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

13

如何使用C#读取xls和xlsx文件,而不使用OLEDB连接并使用OpenXML格式。我正在寻找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格式中实现上述转换。谢谢。


1
XLSдёҚжҳҜOpenXMLж јејҸпјҢеӣ жӯӨжӮЁдёҚиғҪдҪҝз”ЁOpenXML SDKиҜ»еҸ–XLSж–Ү件гҖӮжӮЁеҸӘиғҪз”Ёе®ғжқҘиҜ»еҸ–XLSXж–Ү件гҖӮ - Darin Dimitrov
我最近在这里回答了一个类似的问题:链接 - JMK
请有人在上面的评论中澄清我的疑问。谢谢。 - user1537319
1
你是正确的,如果没有安装Excel,代码将无法运行。 - JMK
上述的OLEDB程序是否适用于没有安装Office的目标机器?请建议。 - SST
3个回答

4
您需要使用OpenXml SDK来处理xlsx文件,下载链接如下:http://www.microsoft.com/en-gb/download/details.aspx?id=30425。但是,XLS文件无法使用该工具,因为XLS格式不是基于xml的。因此,您可以尝试使用NPOI库来处理旧版Excel文件:http://npoi.codeplex.com/。该库也支持xlsx文件,这样可以保证一致性。但缺点是您需要手动循环遍历表格、行和列,并构建数据集。如果您需要使用查询访问数据,则我发现OLEDB是唯一的方法。请注意不要删除任何HTML标签。

2

3
在客户机器上可能没有安装Excel。这就是我正在寻找像OpenXML格式这样的替代解决方案的主要原因。谢谢。 - user1537319
寻找相同的解决方案 - Frank Liu
问题在于,如果您要求电子表格最初保存在除 .xls 以外的格式中,那么您实际上不再想读取 Excel 电子表格,更简单的解决方案变得可用 - 普通的 csv。 - Craig Graham

0

从连接字符串中删除\。您可以按以下方式提供。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接