C# 在c中读取excel(.xlsx)文件#
我正在用c#像这样读取.xlsx文件C# 在c中读取excel(.xlsx)文件#,c#,excel,xlsx,C#,Excel,Xlsx,我正在用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(s
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(输出,“School”)中遇到错误;
错误是
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.
我无法找出代码中发生了什么错误。变量
工作表
包含值:+\u xlnm.Print\u Area+
这个+\u xlnm.Print\u区域+
实际上并不存在
这就是为什么会发生错误
检查该对象。我会检查您在
行[“TABLE_NAME”]中得到的内容。ToString()代码>值。或者,您可以尝试OpenXMLSDK:我相信您的工作表名为\uxlnm.Print\uArea
。
试着换一行
var cmd = new OleDbCommand("SELECT * FROM [+"+sheet+"+]", conn);
到
在工作表中定义打印区域时,“打印区域”自动添加到新工作表中。请从excel表格中删除打印区域或使用以下代码
if (!dr["TABLE_NAME"].ToString().Contains("_xlnm#Print_Area"))
{
obj.SheetName = dr["TABLE_NAME"].ToString();
lst.Add(obj);
}
您的excel文件的版本是什么?是否有这样做的原因?您不能使用一些现有库来读取*.xlsx
文件吗?@voo它是excel 2007文件。从哪里可以看到这个对象?看到了吗,在您的数据库“xlnm.Print\u区域”中,这个特定的表或对象是否存在?如果不是,则[这绝对不是]通过调试器从何处输入此值。行[“TABLE_NAME”]。ToString()将表名命名为xlnm.Print_Area,但我不知道它为什么会这样。行[“TABLE_NAME”]。ToString()正在将表名命名为xlnm.Print_Area,但我不知道为什么会这样。是否尝试从Excel中清除源文档中的打印区域?1.单击工作表上要清除打印区域的任意位置。2.在“页面布局”选项卡上的“页面设置”组中,单击“清除打印区域”。
if (!dr["TABLE_NAME"].ToString().Contains("_xlnm#Print_Area"))
{
obj.SheetName = dr["TABLE_NAME"].ToString();
lst.Add(obj);
}