OleDb – 检索Excel工作表名称还会检索已定义的名称
我正在尝试检索Excel工作簿中的工作表列表,但是我找回的集合中同时包含工作表名称和数据列标识,它们在原始xlsx xml中似乎被称为“已定义名称”。 你能告诉我如何只返回工作表名称?
我正在使用的代码是:
OleDbConnection connExcel = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;" + @"Data Source=" + FilePath + ";" + @"Extended Properties=""Excel 8.0;HDR=Yes;"""); OleDbCommand cmdExcel = new OleDbCommand(); cmdExcel.Connection = connExcel; connExcel.Open(); DataTable testTable = connExcel.GetSchema("Tables");
生成的testTable集合的内容包含TABLE_NAME下的条目:
- DATA1
- DATA2
- DATA3
- DATA4
- DATA5
- 工作表Sheet1 $
- TEST1 -TEST2
- TESTHKEY
- TESTKEYS
- TESTVKEY
他们都有TABLE的TABLE_TYPE。
对应于上面的原始工作簿将有1个工作表包含5列,第一行将包含一个标题。 我只对Sheet1 $条目感兴趣。 电子表格是在Excel 2010中创build的,我试图在用C#编写的ASP.NET 4应用程序中处理它。 有可能,工作表名称可能已被更改,所以我不能保证它将始终是Sheet1 $。
我的第一个想法是错误的,所以我想出了这个解决方法。 返回的实际工作表名称应始终以$结束,所以我砍了它来检查。 凌乱,但你确定了一般想法。
OleDbConnection connExcel = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;" + @"Data Source=c:\test.xlsx;" + @"Extended Properties=""Excel 12.0 Xml;HDR=Yes;"""); OleDbCommand cmdExcel = new OleDbCommand(); cmdExcel.Connection = connExcel; connExcel.Open(); DataTable testTable = connExcel.GetSchema("Tables"); String[] excelSheets = new String[testTable.Rows.Count]; int i = 0; foreach (DataRow row in testTable.Rows) { excelSheets[i] = row["TABLE_NAME"].ToString(); if (excelSheets[i].EndsWith("$")) { Console.WriteLine(excelSheets[i] = row["TABLE_NAME"].ToString()); i++; } else { i++; } } Console.ReadLine();
- 工作簿不在MsWord中打开,并要求修复和修复后显示xml错误
- 如何使用c#在asp.net中创build一个excel文件时指定path和文件名?
- SQL批量复制“使用ASP.NET的数据源中的Stringtypes的给定值无法转换为指定的目标列的typesdatetime”
- 将文件夹中的图像添加到Excel工作表
- 使用DataTable和Linq导出到Excel中缺less一些数据
- 在VB.NET的Excel单元格中限制粘贴(Ctrl-V)
- 无法从格式的excel文件parsingasp.net中的DateTime – 25-OCT-13 01.08.24.732000000 PM
- 使用OpenXML sdk读取excel文件时遇到困难
- 将查询结果从ASP.NET网站发送到Excel