14

如何在不使用 OLEDB 连接的情况下使用具有 OpenXML 格式的c# 读取 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 格式实现上述转换。谢谢。

4

3 回答 3

4

您需要用于 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 是我找到的唯一方法。

于 2012-10-08T14:21:45.817 回答
2

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

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

于 2012-10-08T14:29:04.593 回答
0

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

conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+filepath.ToString() + ";Extended Properties=Excel 12.0 Xml;");
于 2015-05-26T06:24:33.490 回答