【问题标题】:How to read the xls and xlsx files using c#如何使用 c# 读取 xls 和 xlsx 文件
【发布时间】:2015-05-26 14:33:51
【问题描述】:

如何在不使用 OLEDB 连接的情况下使用 c#以 OpenXML 格式读取 xls 和 xlsx 文件。我正在寻找 Open XML 格式程序。

下面是我使用 OLEDB preocedure 的代码。但我正在寻找 OpenXML 格式。

public static DataTable ConvretExcelToDataTable(string FilePath)
{
    string strConn = string.Empty;

     if (FilePath.Trim().EndsWith(".xlsx"))
     {
         strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", FilePath);
     }
     else if (FilePath.Trim().EndsWith(".xls"))
     {
         strConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", FilePath);
     }

    OleDbConnection conn = null;
    OleDbCommand cmd = null;
    OleDbDataAdapter da = null;
    DataTable dt = new DataTable();
    try
    {
        conn = new OleDbConnection(strConn);
        conn.Open();
        cmd = new OleDbCommand(@"SELECT * FROM [Sheet1$]", conn);
        cmd.CommandType = CommandType.Text;
        da = new OleDbDataAdapter(cmd);
        da.Fill(dt);
    }
    catch (Exception exc)
    {
        Console.WriteLine(exc.ToString());
        Console.ReadLine();
    }
    finally
    {
        if (conn.State == ConnectionState.Open)
            conn.Close();
        conn.Dispose();
        cmd.Dispose();
        da.Dispose();
    }
    return dt;
}

要求是以OpenXML格式实现上述转换。谢谢。

【问题讨论】:

  • XLS 不是 OpenXML。因此,您不能使用 OpenXML SDK 来读取 XLS 文件。您只能将其用于 XLSX 文件。
  • 我最近回答了一个类似的问题here
  • 任何人请在上述评论中澄清我的疑问。谢谢。
  • 你是对的,如果 Excel 不存在,代码将无法工作
  • 如果目标机器没有安装 Office,上述 OLEDB 程序是否有效?请建议..

标签: c# openxml xls


【解决方案1】:

您需要适用于 xlsx 的 OpenXml SDK:

http://www.microsoft.com/en-gb/download/details.aspx?id=30425

但是对于 XLS,您将无法使用此 XLS 格式不是基于 xml。

我使用 NPOI 库来访问旧文件:

http://npoi.codeplex.com/

NPOI 库还支持 xlsx,因此这将为您提供一致的访问方式。缺点是您必须手动遍历工作表/行/列,并构建数据集,如果您有大型工作簿,这可能会影响性能。如果您想使用查询来访问数据,OLEDB 是我找到的唯一方法。

【讨论】:

    【解决方案2】:

    如果您安装了 Excel,则可以使用 Microsoft.Office.Interop.Excel;

    http://support.microsoft.com/kb/302084

    【讨论】:

    • 在客户端机器上,可能没有安装 Excel。这是主要原因,我正在寻找像 OpenXML 格式这样的替代解决方案。谢谢。
    • 寻找相同的解决方案
    • 问题是,如果您要求电子表格最初以 .xls 以外的格式保存,那么您实际上并不想再阅读 Excel 电子表格,并且可以使用更简单的解决方案 - 沼泽标准csv.
    【解决方案3】:

    从连接字符串中删除\。你可以给如下。

    conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+filepath.ToString() + ";Extended Properties=Excel 12.0 Xml;");
    

    【讨论】:

      猜你喜欢
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      相关资源
      最近更新 更多