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

标签 asp.net excel c#-4.0 oledb

我正在尝试检索 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/

相关文章:

asp.net - windows azure asp.net MVC2 中的 Multi-Tenancy

c# - 无法查询 AD(获取 DirectoryServicesCOMException)

asp.net - 在本地调试生产 asp.net 应用程序

arrays - 使用 VBA 将二维数组卸载到 Excel 工作表中的最快方法是什么?

vba - Excel 使用列表对列重新排序

c# - 从网站保存网络摄像头图像

asp.net - 对 html 控件使用 runat=server 的性能问题

excel - 添加具有连续名称的工作表在第 10 个工作表之后停止递增

c# - LINQ FirstOrDefault 与 Where(...).FirstOrDefault 之间的区别?

c#-4.0 - 为什么这个整数不增加两次?