gpt4 book ai didi

asp.net - OleDb - 检索 Excel 工作表名称也会检索定义的名称

转载 作者:行者123 更新时间:2023-12-04 20:19:33 24 4
gpt4 key购买 nike

我正在尝试检索 Excel 工作簿中的工作表列表,但我取回的集契约(Contract)时包含工作表名称和数据列 ID,它们在原始 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 下的条目:

  • 数据1
  • 数据2
  • 数据3
  • 数据4
  • 数据5
  • 工作表 1$
  • 测试1-测试2
  • 测试 key
  • 测试 key
  • 测试电视 key

它们都有 TABLE_TYPE 的 TABLE。

对应于上面的原始工作簿将有一个包含 5 列的工作表,第一行将包含一个标题。我只对 Sheet1$ 条目感兴趣。电子表格是在 Excel 2010 中创建,我试图在用 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();

关于asp.net - OleDb - 检索 Excel 工作表名称也会检索定义的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10742807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com