none
请问vs2017为什么读取excel 文件报错? RRS feed

  • 问题

  • 发生了 System.Data.OleDb.OleDbException
      HResult=0x80004005
      Message=外部数据库驱动程序 (1) 中的意外错误。
      Source=Microsoft JET Database Engine
      StackTrace:
       在 Business.getExcelTable(String ExcelFile) 在 d:\develop\business2014\App_Code\Business.cs 中: 第 432 行
       在 telecomm_bill_basic_data_input.ButtonBatchInput_Click(Object sender, EventArgs e) 在 d:\develop\business2014\dev\dev_prepare_single.aspx.cs 中: 第 1289 行

    读取代码是通用的

    public DataSet ExcelToDS(string Path) 
    { 
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;"; 
    OleDbConnection conn = new OleDbConnection(strConn); 
    conn.Open();   
    string strExcel = "";    
    OleDbDataAdapter myCommand = null; 
    DataSet ds = null; 
    strExcel="select * from [sheet1$]"; 
    myCommand = new OleDbDataAdapter(strExcel, strConn); 
    ds = new DataSet(); 
    myCommand.Fill(ds,"table1");    
    return ds; 
    }


    • 已编辑 尺蠖 2017年10月20日 8:29
    2017年10月20日 8:29

全部回复

  • 原来和vs2017无关的,是windows server 2012操作系统昨天升级打补丁以后,不支持excel扩展名为xls格式的访问了,必须是xlsm格式,即excel 2010格式
    2017年10月21日 1:47
  • 看代码还是在用Microsoft JET Database Engine,现在推荐用

    Microsoft Access Database Engine 2010 Redistributable

    https://www.microsoft.com/en-us/download/details.aspx?id=13255


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年10月23日 0:41
  •  现在是只能用Microsoft Access Database Engine 2010 Redistributable方式读取xlsm格式excel了

      public static DataTable getExcelTable(string ExcelFile)
        {
    
       
            DataSet ds = new DataSet();
       
    
            string strConn = "Provider=Microsoft.Ace.OleDb.12.0;Data Source= " + ExcelFile + "; Extended Properties='Excel 12.0;HDR=No'";
            //string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + ExcelFile + "; Extended Properties='Excel 8.0;HDR=No'";
            OleDbDataAdapter oada = new OleDbDataAdapter("select * from [Sheet1$]", strConn);
            oada.Fill(ds);
    
            return ds.Tables[0];
    
        }

    2017年10月23日 9:41
  • 首先很明确,不是vs2017的问题而是外部驱动的问题

    推荐你用 NPOI,我现在就在用,挺好使的,支持 .xls 和 .xlsx

    2018年5月9日 3:44
  • 非常感谢,今天才发现closexml插件不能打开.xls文件,换用了NPOI,挺好用的

    https://www.cnblogs.com/chunxiong/p/9406178.html 从这篇文章学习了

    2019年7月23日 7:13