代码之家  ›  专栏  ›  技术社区  ›  hud

Excel列数据使用asp使字母表值为空。网

  •  0
  • hud  · 技术社区  · 6 年前

    上传时 Excel datatable 这些值正在变为空白。

    string filename = Path.GetFileName(fluploadData.FileName);
            // FileUpload.SaveAs(Server.MapPath("~/") + filename);
            string filenamewithoutrext = string.Empty;
            FileExt = Path.GetExtension(fluploadData.FileName).ToLower();
            if (Path.GetExtension(fluploadData.FileName).ToLower() != ".xls" &&
                Path.GetExtension(fluploadData.FileName).ToLower() != ".xlsx"
            )
            {
    
                Response.Write("Only .xls,.xlsx are allowed.!");
                return;
            }
    
            filenamewithoutrext = Path.GetFileNameWithoutExtension(fluploadData.FileName).ToLower();
    
            string path = Server.MapPath("UploadData\\");
            string filename_ = filenamewithoutrext;
    
            //   DeleteDirectory(path);
            if (!Directory.Exists(path))   // CHECK IF THE FOLDER EXISTS. IF NOT, CREATE A NEW FOLDER.
            {
                Directory.CreateDirectory(path);
            }
            else
            {
                foreach (string file in Directory.GetFiles(path))
                {
                    File.Delete(file);
                }
            }
    
            string fname;
            fname = path + filename_ + ".xls";
    
            fluploadData.SaveAs(fname);
            HttpContext.Current.Session["ExcelFilePath"] = fname;
    
            string conStr = "";
            System.Data.DataTable dtExcelRows = new System.Data.DataTable();
    
            switch (FileExt)
            {
                case ".xls": //Excel 97-03
                    conStr = System.Configuration.ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString;
                    break;
                case ".xlsx": //Excel 07
                    conStr = System.Configuration.ConfigurationManager.ConnectionStrings["Excel07ConString"].ConnectionString;
                    break;
            }
    
            conStr = String.Format(conStr, fname, "YES");
    
            System.Data.OleDb.OleDbConnection connExcel = new System.Data.OleDb.OleDbConnection(conStr);
            System.Data.OleDb.OleDbCommand cmdExcel = new System.Data.OleDb.OleDbCommand();
            System.Data.OleDb.OleDbDataAdapter oda = new System.Data.OleDb.OleDbDataAdapter();
            cmdExcel.Connection = connExcel;
            connExcel.Open();
            System.Data.DataTable dtExcelSchema = connExcel.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
            System.Data.DataTable dtExcelColumnsTable = connExcel.GetSchema("Columns");
            //string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString().Replace('\'', ' ').Trim();
            string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString().Trim();  
            cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";
            oda.SelectCommand = cmdExcel;
            oda.Fill(dtExcelRows);
            connExcel.Close();
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   SBFrancies    6 年前

    该问题可能是由列中的混合数据类型引起的。例如,前几行有一个数字值,因此假定它是一个数字类型的列。当遇到非数值时,将无法解析该值并将其忽略。

    看见 this answer IMEX=1 在连接字符串中,或将标题行视为数据( HDR=0

    您可能还想了解专门用于读/写Excel文档的特定库,我在这方面有很好的经验 EPPlus NPOI

    正如其他人所提到的,如果您只是将Excel文档用作应用程序的数据源,那么最好研究另一种解决方案,如SQL。如果您需要处理来自第三方的电子表格,显然这不是一个选项。