![](/img/trans.png)
[英]OutOfMemoryException when reading Excel .xlsx file in C# using ExcelLibrary
[英]reading excel (.xlsx) file in c#
我正在使用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.
我無法弄清楚代碼中發生了什么錯誤。
我相信你的工作表名為_xlnm.Print_Area
。 嘗試更改此行
var cmd = new OleDbCommand("SELECT * FROM [+"+sheet+"+]", conn);
至
var cmd = new OleDbCommand("SELECT * FROM ["+sheet+"]", conn);
變量sheet
包含值: +_xlnm.Print_Area+
這個+_xlnm.Print_Area+
實際上並不存在。
這就是錯誤的原因。
檢查該對象。
我會檢查你row["TABLE_NAME"].ToString();
中得到了什么row["TABLE_NAME"].ToString();
值。 或者,您可以嘗試OpenXML SDK: 如何:解析和閱讀大型電子表格文檔(Open XML SDK)
在工作表中定義打印區域時,“_xlnm.Print_Area”會自動添加新工作表。 請刪除打印區域表格excel表或使用以下代碼
if (!dr["TABLE_NAME"].ToString().Contains("_xlnm#Print_Area"))
{
obj.SheetName = dr["TABLE_NAME"].ToString();
lst.Add(obj);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.