簡體   English   中英

在c#中讀取excel(.xlsx)文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM