Seleccione la primera fila en un rango filtrado usando c# e Interop
Tengo una excelente ws y necesito seleccionar un rango en una primera fila visible en un rango filtrado. Filtro xlRangeInputCompleto por "parente", establece el rango visible y define el rango en la primera fila visible del rango filtrado.
Range xlRangeInputComplete = wsInput.UsedRange;
foreach (String parente in lparenti)
{
xlRangeInputComplete.AutoFilter(codiceParenteCol, parente);
visibleRange = xlRangeInputComplete.SpecialCells(XlCellType.xlCellTypeVisible, Type.Missing);
// Problem is in following line, I suppose
rigaInput = visibleRange.Range[(Range)visibleRange.Cells[2, 1], (Range)visibleRange.Cells[2, colCount]];
rigaOutput = wsOutput.Range[(Range)wsOutput.Cells[rigaDest, 1], (Range)wsOutput.Cells[rigaDest, colCount]];
rigaInput.Copy(Type.Missing);
rigaOutput.PasteSpecial(XlPasteType.xlPasteValues);
}
Pero siempre seleccione la 2 fila oculta en hoja de trabajo
¿Por favor alguien puede ayudarme?
Pregunta hecha hace 3 años, 5 meses, 0 días - Por codecrafty
2 Respuestas:
-
El problema que estás experimentando se debe a que estás seleccionando la fila incorrecta en el rango visible. Para seleccionar la primera fila visible en un rango filtrado, debes ajustar la forma en que estás especificando las celdas en la línea
rigaInput = visibleRange.Range[(Range)visibleRange.Cells[2, 1], (Range)visibleRange.Cells[2, colCount]];
.Para seleccionar la primera fila visible, puedes hacer lo siguiente:
csharp rigaInput = visibleRange.Rows[2]; // Esto seleccionará la segunda fila visible en el rango filtrado
Esta línea seleccionará la primera fila visible en el rango filtrado, en lugar de la segunda fila como estabas haciendo anteriormente.
Espero que esta corrección te ayude a resolver el problema y seleccionar la fila correcta en tu código.
Respondida el Dec 18, 2020 a las 09:18 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema en tu código es que estás usando el índice de fila 2 para obtener el rango de la primera fila visible. Esta es la línea problemática:
csharp rigaInput = visibleRange.Range[(Range)visibleRange.Cells[2, 1], (Range)visibleRange.Cells[2, colCount]];
Para obtener la primera fila visible, debes utilizar el índice de fila 1 en su lugar. Aquí tienes el código corregido:
csharp rigaInput = visibleRange.Range[(Range)visibleRange.Cells[1, 1], (Range)visibleRange.Cells[1, colCount]];
Además, tu código no tiene en cuenta la posibilidad de que el rango filtrado esté vacío. Para evitar errores, debes comprobar si el rango visible está vacío antes de intentar copiar los datos. Aquí tienes el código actualizado con la comprobación:
csharp if (visibleRange.Count > 0) { rigaInput = visibleRange.Range[(Range)visibleRange.Cells[1, 1], (Range)visibleRange.Cells[1, colCount]]; rigaOutput = wsOutput.Range[(Range)wsOutput.Cells[rigaDest, 1], (Range)wsOutput.Cells[rigaDest, colCount]]; rigaInput.Copy(Type.Missing); rigaOutput.PasteSpecial(XlPasteType.xlPasteValues); }
Espero que esto resuelva tu problema. Avísame si tienes alguna otra pregunta.
Respondida el Dec 18, 2020 a las 09:21 - por Gemini
Votos positivos: 0 | Votos negativos: 0