8

我需要从 xls 中提取数据,我还需要让用户能够更改文件的位置。所以 OleDbConnection 似乎是一个好的开始,直到第一个合并的单元格。

这适用于除合并单元格之外的所有单元格:

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source=F:\test.xls;Extended Properties=Excel 8.0;");
cmd.CommandText = "SELECT * FROM [Sheet$]";
cmd.Connection.Open();

我发现这应该允许访问合并的单元格:

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls;Extended Properties=Excel 8.0;HDR=Yes;IMEX=1;");

但后来我在 cmd.conn.open(); 上得到一个找不到可安装的 ISAM 异常;

我在这里遵循了建议:http: //support.microsoft.com/kb/209805

在这里: 错误:“找不到可安装的 ISAM”

没运气。

我对从 xls 中提取数据的其他方式持开放态度。或者即使有一个命令我可以在 xls 上运行以删除可能工作的 mirged 单元格。

4

4 回答 4

14

我认为这只是因为如果您有多个扩展属性,则必须将扩展属性括在引号中

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls;
Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';");

或者如果单引号不起作用(你明白了)

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls;
Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;"";");

虽然您的示例没有显示,但此错误也可能是由文件路径中的空格引起的。在这种情况下,您还需要将文件路径用引号括起来。

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""F:\test.xls"";...
于 2009-03-13T19:58:10.347 回答
2

假设您的系统要求包括安装 Excel,您可以使用 Excel 对象库

Excel.Sheets sheets = m_Excel.Worksheets;
Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);
Excel.Range range = worksheet.get_Range("A1", "E1".ToString());

等等

另请参阅VSTO

于 2009-03-13T20:01:03.353 回答
1

试试这个

我有这个问题。只是因为引号

string sConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sFilePath + ";" + "Extended Properties='Excel 8.0;HDR=YES;'";
于 2012-01-14T12:07:24.767 回答
-1

SpreadsheetGear for .NET是一个免版税的 .NET 电子表格组件,应该可以为 32 位和 64 位 .NET 做所有你想做的事情,而不依赖于 Excel(或除 .NET 2.0+ 之外的任何其他东西)。

如果您想亲自试用,可以在此处查看实时 ASP.NET 示例并在此处下载免费试用版。

免责声明:我拥有 SpreadsheetGear LLC

于 2010-02-02T17:45:28.980 回答