【问题标题】:C# Excel file OLEDB read HTML IMPORTC# Excel 文件 OLEDB 读取 HTML IMPORT
【发布时间】:2010-11-17 07:57:00
【问题描述】:

我必须为财务部门自动化一些事情。我有一个要使用 OleDb 读取的 Excel 文件:

string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=A_File.xls;Extended Properties=""HTML Import;IMEX=1;""";

using (OleDbConnection connection = new OleDbConnection())
{
    using (DbCommand command = connection.CreateCommand())
    {
        connection.ConnectionString = connectionString;
        connection.Open();

        DataTable dtSchema = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);                        
        if( (null == dtSchema) || ( dtSchema.Rows.Count <= 0 ) )                        
        {                                
            //raise exception if needed                        
        }

        command.CommandText = "SELECT * FROM [NameOfTheWorksheet$]";

        using (DbDataReader dr = command.ExecuteReader())
        {
            while (dr.Read())
            {
                //do something with the data
            }
        }
    }
}

通常connectionstring 将具有扩展属性“Excel 8.0”,但无法以这种方式读取该文件,因为它似乎是一个重命名为 .xls 的 html 文件。 当我将数据从 xls 复制到新的 xls 时,我 可以 使用 E.P. 读取新的 xls。设置为“Excel 8.0”。

是的,我可以通过创建 Excel 实例来读取文件,但我宁愿不... 知道如何使用 OleDb 读取 xls 而无需手动更改 xls 或在实例化的 Excel 中使用范围?

问候,

米歇尔

【问题讨论】:

    标签: c# .net html excel oledb


    【解决方案1】:

    我也遇到了同样的问题。如前所述,它似乎是一个重命名为 .xls 的 html 文件。当我将数据从 xls 复制到新的 xls 时,我可以使用 E.P. 读取新的 xls。设置为“Excel 8.0”。

    在这种情况下,文件无法以正确的格式保存。所以我们必须将该文件转换为正确的格式。为此,请使用 MS Office Excel 2007,单击 File -> Convert。该文件将自动转换为正确的格式。

    【讨论】:

      【解决方案2】:

      我一直在寻找很多解决方案,最终我发现了一些非常简单易行的方法 - 要将 XML 文件导入 Excel 文件,我先尝试将 XML 转换为 HTML,使用 -

      http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=63

      然后我发现我可以轻松地将输出文件更改为 .xls,而不是 .html

              //create the output stream
              XmlTextWriter myWriter = new XmlTextWriter
      ("result.html", null);
      

      那么输出就是来自我的 XML 数据文件的完美 Excel 文件。

      希望这会节省你的工作。

      【讨论】:

        【解决方案3】:

        我在另一个论坛上问了同样的问题并得到了答案,所以我想我会在这里分享。根据这篇文章:http://ewbi.blogs.com/develops/2006/12/reading_html_ta.html

        您必须在选择语句中使用不带 $ 的页面标题,而不是使用工作表名称。选择 * 从 [HTMLPageTitle]

        【讨论】:

        • 感谢您的回答,看起来它可以解决问题。我必须完成我的程序,所以我现在通过实例化 Excel 来实现它。有时间我会修改代码!
        • 如果您的 HTML 文件在元数据中没有 标记,这很重要,您可以尝试进行如下查询:SELECT * FROM [Table]
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-24
        • 1970-01-01
        相关资源
        最近更新 更多