我试图弄清楚为什么我看到的行为以及"记录的"行为是不同的。我已经阅读了这两篇文章:Read and Write Excel Documents Using OLEDB和Working with MS Excel(xls / xlsx) Using MDAC and Oledb,这是来自第二个链接的文字。
如果您在第二个链接中读到它,则说:
检索Excel工作簿的架构信息:
您可以使用GetOleDbSchemaTable获取excel工作簿中存在的工作表。使用以下代码段。
DataTable dtSchema = null; dtSchema = conObj.GetOleDbSchemaTable( OleDbSchemaGuid.Tables,new object [] {null,null,null," TABLE" });
这里dtSchema将保存所有工作簿的列表。假设我们有两个工作簿:wb1,wb2。上面的代码将返回wb1,wb1 $,wb2,wb2 $的列表。我们需要过滤掉$ elements。
然而,当我运行此代码时,我只得到" wb1 $和wb2 $"。我可以轻松删除代码中的$,但是我试图确保当我将代码放在不同的计算机/操作系统/环境中时,我不会破坏代码,并且它的行为与记录的一致。有人可以告诉我自从这些内容发生了什么或者是否发生了变化,或者我是否遗漏了一些关键部分。需要注意的是,VS2015,Windows 7 Pro和Office 2010正在开发中。
//Connection String
//string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Extra blank space cannot appear in Office 2007 and the last version. And we need to pay attention on semicolon.
//string connstring = Provider = Microsoft.JET.OLEDB.4.0; Data Source = " + path + "; Extended Properties = 'Excel 8.0;HDR=NO;IMEX=1'; "; //This connection string is appropriate for Office 2007 and the older version. We can select the most suitable connection string according to Office version or our program.
using (OleDbConnection conn = new OleDbConnection(_connectionString))
{
conn.Open();
//DataTable sheetNames = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); //Get All Sheets Name
DataTable sheetNames = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); //Get All Sheets Name
// Loop through all Sheets to get data
foreach (DataRow dr in sheetNames.Rows)
{
string sheetName = dr["TABLE_NAME"].ToString();
//if (!sheetName.EndsWith("$"))
// continue;
Debug.Print(sheetName);
}
return sheetNames;
由于
DBL