有2张Excel表格 - FileA& FILEB。
FileA中只有一个工作表。它有数据和被命名为' Sep'没有隐藏的床单肯定。
FileB有3张。第一个有数据&被命名为' Sheet1'。
使用FileA进行测试,我编写了这段代码并且工作正常。 FileB出现问题。在代码中检查FileA架构时,我看到了' SEP'显示为行2。所以,写下这个以获得第一个名字
string FirstSheetName = dtSchema.Rows[2]["TABLE_NAME"].ToString();
但对于FileB,Sheet1显示为架构中的第一行。
我应该写什么,以便我总是从第一张有数据的数据中获取数据。
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();
}
}
}
}