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

如何使用带有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格式实现上述转换。 谢谢。

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

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

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

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

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