我正在使用c#读取.xlsx文件,如此
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName +
";Extended Properties=\"Excel 12.0;HDR=No;IMEX=1\";";
var output = new DataSet();
using (var conn = new OleDbConnection(strConn))
{
conn.Open();
var dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
foreach (DataRow row in dt.Rows)
{
string sheet = row["TABLE_NAME"].ToString();
var cmd = new OleDbCommand("SELECT * FROM [+"+sheet+"+]", conn);
cmd.CommandType = CommandType.Text;
OleDbDataAdapter xlAdapter = new OleDbDataAdapter(cmd);
xlAdapter.Fill(output,"School");
}
}
但我在xlAdapter.Fill(输出,“学校”)收到错误; 错误是
The Microsoft Office Access database engine could not find the object '+_xlnm.Print_Area+'. Make sure the object exists and that you spell its name and the path name correctly.
我无法弄清楚代码中发生了什么错误。
答案 0 :(得分:3)
我相信您的工作表名为_xlnm.Print_Area
。
尝试更改此行
var cmd = new OleDbCommand("SELECT * FROM [+"+sheet+"+]", conn);
到
var cmd = new OleDbCommand("SELECT * FROM ["+sheet+"]", conn);
答案 1 :(得分:0)
变量sheet
包含值:+_xlnm.Print_Area+
此+_xlnm.Print_Area+
实际上并不存在。
这就是为什么会出现错误。
检查该对象。
答案 2 :(得分:0)
我会检查您在row["TABLE_NAME"].ToString();
值中获得的内容。或者,您可以尝试使用OpenXML SDK:How to: Parse and read a large spreadsheet document (Open XML SDK)
答案 3 :(得分:0)
在工作表中定义打印区域" _xlnm.Print_Area"自动添加新工作表。请删除打印区域表格excel表或使用以下代码
if (!dr["TABLE_NAME"].ToString().Contains("_xlnm#Print_Area"))
{
obj.SheetName = dr["TABLE_NAME"].ToString();
lst.Add(obj);
}