繁体   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