una tabla recorrer net llenar lista leer las extraer datos con columnas c# excel .net-4.0 excel-interop

c# - tabla - Cómo iterar a través de Excel Worksheets solo extrayendo datos de columnas específicas



recorrer las columnas de un datatable (2)

¿Cómo se itera a través de un libro de trabajo de Excel con múltiples hojas de trabajo que solo extraen datos de las columnas "C", "E" y "F"?

Aquí está el código que tengo hasta ahora:

public static string ExtractData(string filePath) { Excel.Application excelApp = new Excel.Application(); Excel.Workbook workBook = excelApp.Workbooks.Open(filePath); string data = string.Empty; int i = 0; foreach (Excel.Worksheet sheet in workBook.Worksheets) { data += "******* Sheet " + i++.ToString() + " ********/n"; //foreach (Excel.Range row in sheet.UsedRange.Rows) //{ // data += row.Range["C"].Value.ToString(); //} foreach (Excel.Range row in sheet.UsedRange.Rows) { foreach (Excel.Range cell in row.Columns) { data += cell.Value + " "; } data += "/n"; } } excelApp.Quit(); return data; }

Muchas gracias por su tiempo, cualquier ayuda es apreciada.


Podría usar algo como esto para obtener la Columna C, por ejemplo:

var numberOfRows = sheet.UsedRange.Columns[3, Type.Missing].Rows.Count; var values = sheet.Range["C1:C" + numberOfRows].Value2;

numberOfRows contiene el número de filas en la hoja de trabajo (creo que no omite las filas en blanco en la parte superior, no estoy seguro). Después de eso, selecciona un rango de C1 a CN y obtiene el Value2 que contiene los valores. Tenga en cuenta que la matriz de valores es en realidad una matriz bidimensional. Ahora puede hacer fácilmente un ciclo for para obtener los elementos:

for (int i = 1; i <= values.Length; i++){ sb.Append(values[i, 1] + " "); }

Esto podría optimizarse en caso de que las columnas estén una al lado de la otra y demás, pero el código anterior debería ayudarlo a comenzar.


Editando su método, aquí hay algo que debe hacer lo que está buscando:

public static string ExtractData(string filePath) { Excel.Application excelApp = new Excel.Application(); Excel.Workbook workBook = excelApp.Workbooks.Open(filePath); int[] Cols = { 3, 5, 6 }; //Columns to loop //C, E, F string data = string.Empty; int i = 0; foreach (Excel.Worksheet sheet in workBook.Worksheets) { data += "******* Sheet " + i++.ToString() + " ********/n"; foreach (Excel.Range row in sheet.UsedRange.Rows) { foreach (int c in Cols) //changed here to loop through columns { data += sheet.Cells[row.Row, c].Value2.ToString() + " "; } data += "/n"; } } excelApp.Quit(); return data; }

Creé una matriz int para indicar de qué columnas te gustaría leer, y luego en cada fila simplemente recorremos la matriz.

HTH, Z