【发布时间】:2017-10-17 02:49:56
【问题描述】:
我正在使用以下代码打开一个 Excel 文件 (XLS) 并使用第一个工作表填充 DataTable:
var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", filename);
OleDbConnection connExcel = new OleDbConnection(connectionString);
connExcel.Open();
DataTable dtExcelSchema;
dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
connExcel.Close();
var adapter = new OleDbDataAdapter("SELECT * FROM [" + SheetName + "]", connectionString);
var ds = new DataSet();
int count = 0;
adapter.Fill(ds, SheetName);
DataTable dt = ds.Tables[0];
仅当文件已在 Ms Excel 中打开时才有效。为什么会这样?
如果文件未打开,我会收到一条错误消息(在线connExcel.Open):External table is not in the expected format.
【问题讨论】:
-
尝试在工作表名称后加一个 $(在 " 和 ] 之间" 看看是否有效。
-
你的
fileName是什么?那可能需要包括地址吗? (即fileName = "C:\Users\myself\Docs\mySheet.xlsx") -
@CharlesMay 它在 Excel 打开时工作,所以这不是问题。无论如何,错误发生在代码的那部分之前。
-
@BruceWayne 文件名没问题,我查过了。
-
这不可能是一个重命名为 .xls 的文本文件吧?我问是因为另一个 SO post 发现这是问题所在。