ExcelReaderFactory,读取第一张表

Bas*_*all 3 c# excel

ExcelDataReaderFactory在 C# 中使用 ,以便读取我的 Excel 文件并将它们插入到数据库中。
现在我正在指定sheetname我想要使​​用的工作表。我可以让它每次都被选为第一张吗?

这是我加载数据的方式。

public IExcelDataReader getExcelReader()
{
    // ExcelDataReader works with the binary Excel file, so it needs a FileStream
    // to get started. This is how we avoid dependencies on ACE or Interop:
    FileStream stream = File.Open(_path, FileMode.Open, FileAccess.Read);

    // We return the interface, so that
    IExcelDataReader reader = null;
    try
    {
        if (_path.EndsWith(".xls"))
        {
            reader = ExcelReaderFactory.CreateBinaryReader(stream);
        }
        if (_path.EndsWith(".xlsx"))
        {
            reader = ExcelReaderFactory.CreateOpenXmlReader(stream);
        }
        return reader;
    }
    catch (Exception)
    {
        throw;
    }
}

public IEnumerable<string> getWorksheetNames()
{
    var reader = this.getExcelReader();
    var workbook = reader.AsDataSet();
    var sheets = from DataTable sheet in workbook.Tables select sheet.TableName;
    return sheets;
}

public IEnumerable<DataRow> getData(string sheet, bool firstRowIsColumnNames = false)
{
    var reader = this.getExcelReader();
    reader.IsFirstRowAsColumnNames = firstRowIsColumnNames;
    var workSheet = reader.AsDataSet().Tables[sheet];
    var rows = from DataRow a in workSheet.Rows select a;
    return rows;
}
Run Code Online (Sandbox Code Playgroud)

getData("april"); //Here I want it to be the first sheet, and not have to choose.
Run Code Online (Sandbox Code Playgroud)

感谢任何建议。

Tim*_*ter 5

我不知道那个图书馆。但我认为你DataSet无论如何都要把它转换成 a 。那么第一张表/表是:

DataTable firstWorkSheet = reader.AsDataSet().Tables[0];
Run Code Online (Sandbox Code Playgroud)

由于索引器DataTableCollection的索引不仅是名称的重载。

所以整个方法是:

public IEnumerable<DataRow> GetFirstSheetData(bool firstRowIsColumnNames = false)
{
    var reader = this.getExcelReader();
    reader.IsFirstRowAsColumnNames = firstRowIsColumnNames;
    return reader.AsDataSet().Tables[0].AsEnumerable();
}
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是,从 v3 开始,此代码也需要 ExcelDataReader.DataSet nuget 包(移动了 AsDataSet 方法) (5认同)