private static DataTable ReadExcelSheet(IXLWorksheet workSheet, ReadOptions options) { DataTable dt = new DataTable(); options = options ?? ReadOptions.DefaultOptions; //primera fila de títulos bool firstRow = options.TitlesInFirstRow; dt.TableName = workSheet.GetNameForDataTable(); if (!options.TitlesInFirstRow) { //si no tenemos títulos en la tabla utilizamos los nombres de columna del excel para la definición del DataTable foreach (var col in workSheet.ColumnsUsed()) { dt.Columns.Add(col.ColumnLetter()); } } Func <IXLRow, bool> getRows = _ => true; if (options.RowStart != 0) { getRows = (r) => (r.RowNumber() >= options.RowStart); } foreach (IXLRow row in workSheet.RowsUsed(r => getRows(r))) { //Usamos la primera fila para crear las columnas con los títulos //init with options.TitlesInFirstRow if (firstRow) { foreach (IXLCell cell in row.CellsUsed()) { dt.Columns.Add(cell.Value?.ToString()); } firstRow = false; } else { dt.Rows.Add(); int i = 0; foreach (IXLCell cell in row.Cells(row.FirstCellUsed().Address.ColumnNumber, row.LastCellUsed().Address.ColumnNumber)) { dt.Rows[dt.Rows.Count - 1][i] = cell.Value.ToString(); i++; } } } return(dt); }
private DataTable ReadExcelSheet(IXLWorksheet workSheet, ReadOptions options) { DataTable dt = new DataTable(); options = options ?? ReadOptions.DefaultOptions; //TODO: Implementar opción con columnas sin títulos //primera fila de titulos bool firstRow = options.TitlesInFirstRow; dt.TableName = workSheet.GetNameForDataTable(); if (options.TitlesInFirstRow) { //si no tenemos títulos en la tabla utilizamos los nombres de columna del excel para la definición del DataTable foreach (var col in workSheet.ColumnsUsed()) { dt.Columns.Add(col.ColumnLetter()); } } foreach (IXLRow row in workSheet.RowsUsed()) { //Usamos la primera fila para crear las columnas con los títulos //init with options.TitlesInFirstRow if (firstRow) { foreach (IXLCell cell in row.CellsUsed()) { dt.Columns.Add(cell.GetContentWithOutSpaces()); } firstRow = false; } else { dt.Rows.Add(); int i = 0; foreach (IXLCell cell in row.Cells(row.FirstCellUsed().Address.ColumnNumber, row.LastCellUsed().Address.ColumnNumber)) { dt.Rows[dt.Rows.Count - 1][i] = cell.Value.ToString(); i++; } } } return(dt); }