• C#导入Excel数据常见问题


    今天在做一个excle数据导入的时候遇到了一个奇葩问题,项目使用的是MVC,在VS2010里面调试的时候没有问题,可是当发布到本地IIS或服务器上时就出现了问题:

    1、excel文件正在被使用;

    2、没有安装Microsoft.Jet.OLEDB.4.0。

    后来找公司的前辈帮忙,发现这个Bug其实很好解决。

    问题1的产生原因是打开的链接忘记关闭了,所以才会导致这个错误提示。

    问题2的产生原因可能是因为32位和64位的原因,因为我的机子64位的,IIS的应用池没有允许【启用32位应用程序】,所以最后导致了这个问题。

    最后,po段c#导入excel数据的代码:

    public string ImportData()
    {
        if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0)
      {   HttpPostedFileBase file
    = Request.Files[0]; string path = AppDomain.CurrentDomain.BaseDirectory + "Content\Upload\ItOperation"; string fileName = Path.GetFileNameWithoutExtension(file.FileName); string extension = Path.GetExtension(file.FileName); string newFileName = CurrentEmpCode + extension;//以当前时间命名另一份文件 if (file.ContentLength > 4194304)//不能超过4m {   status = "'status:failed'"; name = "'name':'上传文件大小不能超过4M'"; ret = "{'error':1,'msg':'上传文件不能超过4M!'}"; } else {   string otherFilePath = Path.Combine(path, newFileName); file.SaveAs(otherFilePath); DataTable dtSheetName = new ExcelHelper().GetSheetNames(otherFilePath); if (dtSheetName != null && dtSheetName.Rows.Count > 0) {    string sheetName = dtSheetName.Rows[0]["TABLE_NAME"].ToString(); if (sheetName != "") {    DataTable dt = LoadExcelDataToTable(otherFilePath, sheetName, extension);    if (dt != null && dt.Rows.Count > 0) {
                 //...你的逻辑 } } } } } }
    public DataTable LoadExcelDataToTable(string path, string sheetName, string fileType) {   string strConn = "";
      if (fileType == ".xlsx")
      {
        strConn
    = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + path + ";" + "Extended Properties='Excel 12.0;HDR=YES;IMEX=1'";
    }
    else if (fileType == ".xls") {   strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path + ";" + "Extended Properties="Excel 8.0;HDR=YES;IMEX=1""; } OleDbConnection conn = new OleDbConnection(strConn); DataTable dt = new DataTable(); try {   conn.Open(); string strExcel = ""; OleDbDataAdapter myCommand = null;    strExcel = "select * from [" + sheetName + "]"; myCommand = new OleDbDataAdapter(strExcel, strConn); myCommand.Fill(dt); } catch {   dt = null; } finally {   conn.Close(); }   return dt; }
  • 相关阅读:
    Android ConstraintLayout详解
    Android开发屏幕适配解决方
    高并发场景下的一种JVM GC优化配置【CMS】
    Runnable 和 Callable的区别
    理解对象实例化顺序
    mysql 优化原理【转】
    使用@Scheduled注解编写spring定时任务
    Spring加载resource时classpath*:与classpath:的区别
    Java 8 中的 Streams API 详解
    java 8 函数式接口
  • 原文地址:https://www.cnblogs.com/work-at-home-helloworld/p/4798451.html
Copyright © 2020-2023  润新知