我从使用OLEDB Excel电子表格让工作表名称的问题。 问题是,当我使用GetOleDbSchemaTable,结果DataTable已经不仅仅是实际的工作表名称的更多; 它具有“表”,我只能假设使用Excel内部使用额外行。
因此,举例来说,如果我有一个名为myWorksheet工作表,下面的代码可能最终与包含myWorksheet $,$ myWorksheet和PrintTable $ myWorksheet _列表。 只有第一个myWorksheet $记录是实际的工作表。 其他人都只是垃圾,我不需要。 当您在元数据看他们,他们看起来就像普通的表,甚至表的类型。
现在我只是手动过滤掉以“$ _”或在一个名为“$打印”任何东西,但谁知道什么其他Excel功能可能使这些额外的记录以不同的格式转起来。
有谁知道只得到实际的工作表名称的最佳途径,而不是不属于这些工作表内表? 有什么在元数据中,将区分它们呢?
private ArrayList getXlsWorksheetNames(OleDb.OleDbConnection conn)
{
ArrayList wsList = new ArrayList();
DataTable schemaTable;
try
{
conn.Open();
schemaTable = conn.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, null);
foreach (DataRow row in schemaTable.Rows)
{
//form.appendToResultsTxt("Adding worksheet to list: " + Environment.NewLine +
// "Name = " + row.Field<string>("TABLE_NAME") + "," + Environment.NewLine +
// "Type = " + row.Field<string>("TABLE_TYPE") + "," + Environment.NewLine + Environment.NewLine);
wsList.Add(row.Field<string>("TABLE_NAME"));
}
conn.Close();
}
catch (Exception ex)
{
if (this.mode == Cps2TxtUtilModes.GUI_MODE)
{
this.form.appendToResultsTxt(ex.ToString());
}
throw;
}
return wsList;
}
我通过文章在此链接阅读,但他们似乎并没有以不同的方式做任何事情比我的,我没有看到任何过滤出额外的非工作表,因此微软似乎并没有所提供的正确答案。
http://support.microsoft.com/kb/318452
而且我也看了看周围很多StackOverflow上的,象在从连接线下方这是有益的,但并没有解决这一问题。
使用Excel的OleDb来获得单订购表名称
有人问之前,我还想说,我真的没有在什么功能在电子表格中使用的控制,所以我不能告诉他们“不要打开过滤”或“不使用打印表格”。
任何想法非常赞赏。 谢谢!