如何使用c#读取xls和xlsx文件

时间:2012-10-08 14:19:22

标签: c# openxml xls

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

以下是我使用OLEDB预处理的代码。但我正在寻找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格式实现上述转换。感谢。

3 个答案:

答案 0 :(得分: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是我找到的唯一方法。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

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