繁体   English   中英

从Excel First Sheet读取数据-C#

[英]Reading data from Excel First Sheet - C#

有2个Excel工作表-FileA和FileB。

FileA中只有一张纸。 它具有数据并命名为“ Sep”。 肯定没有隐藏的工作表。

FileB有3张纸。 第一个具有数据&的名称为“ Sheet1”。

使用FileA进行测试,我编写了这段代码,并且工作正常。 FileB出现问题。 在代码中检查FileA模式时,我看到“ SEP”显示为第2行。 所以,写这个以获得第一张纸的名字

string FirstSheetName = dtSchema.Rows[2]["TABLE_NAME"].ToString();

但是对于FileB,Sheet1显示为架构中的第一行。

  1. 为什么这对于不同的工作表有所不同。
  2. 我应该写些什么,以便总能从具有数据的第一张纸中获取数据。

      private void GetDataFromExcel() { DataSet dsExcel = null; if (true) { OleDbCommand cmdSelect = null; OleDbDataAdapter daXls = null; OleDbConnection xlsCSV = null; DataTable dtSchema = null; try { xlsCSV = new OleDbConnection(ExcelFileConnString); if (xlsCSV.State == ConnectionState.Closed) { xlsCSV.Open(); } dtSchema = xlsCSV.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); //Screenshots of dtSchema attached. if (dtSchema.Rows.Count > 0) { string FirstSheetName = dtSchema.Rows[2]["TABLE_NAME"] .ToString(); cmdSelect = new OleDbCommand("select * from [" + FirstSheetName + "]", xlsCSV); daXls = new OleDbDataAdapter(); daXls.SelectCommand = cmdSelect; dsExcel = new DataSet(); daXls.Fill(dsExcel); xlsCSV.Close(); } int count = dsExcel.Tables[0].Rows.Count; } catch (Exception) { } finally { if (xlsCSV != null && xlsCSV.State == ConnectionState.Open) { xlsCSV.Close(); xlsCSV.Dispose(); } if (cmdSelect != null) { cmdSelect.Dispose(); } } } } 

    在此处输入图片说明在此处输入图片说明

尝试使用库ExcelDataReader。 您可以读取和保存旧格式(.xls)和新格式(.xlsx)的Excel文件。

这样,您无需安装任何Office组件,并且使用非常简单。 自2014年1月以来,我一直在使用,我一直很喜欢。 您可以从CodePlexGitHub获取它

如果仅使用.xlsx文件,并且需要更高级的内容,则可以尝试Microsoft Office Open XML SDK。 它不是那么简单,但是允许您使用Excel文件执行任何操作-或几乎执行任何操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM