I am using the ExcelDataReaderFactory
in C#, in order to read my Excel files and inserting them to a database.
Right now I am specifying sheetname
Update for v3
There have been some breaking changes in the upgrade to v3, so here's the original code and accepted answer updated to work with v3.
public IExcelDataReader getExcelReader()
{
return ExcelReaderFactory.CreateReader(System.IO.File.OpenRead(_path));
}
public IEnumerable getWorksheetNames()
{
var reader = this.getExcelReader();
var workbook = reader.AsDataSet();
var sheets = from DataTable sheet in workbook.Tables.Cast() select sheet.TableName;
return sheets;
}
public IEnumerable getData(string sheet, bool firstRowIsColumnNames = false)
{
var reader = this.getExcelReader();
reader.AsDataSet(new ExcelDataSetConfiguration()
{
ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
{
UseHeaderRow = firstRowIsColumnNames
}
});
var workSheet = reader.AsDataSet().Tables[sheet];
var rows = from DataRow a in workSheet.Rows select a;
return rows;
}
public IEnumerable GetFirstSheetData(bool firstRowIsColumnNames = false)
{
var reader = this.getExcelReader();
reader.AsDataSet(new ExcelDataSetConfiguration()
{
ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
{
UseHeaderRow = firstRowIsColumnNames
}
});
return getData(getWorksheetNames().First());
}
I would say that getExcelReader has been simplified to the point of redundancy.