将 excel 文件上传到数据库,但某些列为 null

uploading excel file to database but some columns going null

提问人:Mussaib Siddiqui 提问时间:10/4/2016 更新时间:10/4/2016 访问量:1540

问:

我在将 Excel 文件上传到数据库时遇到了问题,其中有一列我有一个字母数字值或只有数字值,当我读取第一行时,如果我的列中有数值,那么它只存储整个工作表中的数值,它不会选择字母数字值,但是如果它在第一行获得字母数字值,那么它会在整个工作表中存储所有值

这是我的 Excel 工作表:

enter image description here

正如您在 TRAN DETAIL 列中的图片中看到的那样,它可以轻松地将值上传到数据库,但是当有字母数字值(如图像中标记)时,它会另存为 null。

这是我如何将 excel 文件上传到数据库的代码,

  [HttpPost]
        public JsonResult UploadExcel(SBP_NEW users, HttpPostedFileBase FileUpload)
        {

            List<string> data = new List<string>();
            if (FileUpload != null)
            {
                // tdata.ExecuteCommand("truncate table OtherCompanyAssets");  
                if (FileUpload.ContentType == "application/vnd.ms-excel" || FileUpload.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
                {


                    string filename = FileUpload.FileName;
                    string targetpath = Server.MapPath("~/Doc/");
                    FileUpload.SaveAs(targetpath + filename);
                    string pathToExcelFile = targetpath + filename;
                    var connectionString = "";
                    if (filename.EndsWith(".xls"))
                    {
                        connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", pathToExcelFile);
                    }
                    else if (filename.EndsWith(".xlsx"))
                    {
                        connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", pathToExcelFile);
                    }

                    var adapter = new OleDbDataAdapter("SELECT * FROM [SBP OST Entries$]", connectionString);
                    var ds = new DataSet();

                    adapter.Fill(ds, "ExcelTable");

                    DataTable dtable = ds.Tables["ExcelTable"];

                    string sheetName = "SBP OST Entries";

                    var excelFile = new ExcelQueryFactory(pathToExcelFile);
                    var artistAlbums = from a in excelFile.Worksheet<SBP_NEW>(sheetName) select a;

                    foreach (var a in artistAlbums)
                    {
                        try
                        {
                            if (a.SEQN_NUMB != "")
                            {
                                SBP_NEW TU = new SBP_NEW();
                                TU.SEQN_NUMB = a.SEQN_NUMB;
                                TU.VALU_DATE = a.VALU_DATE;
                                TU.DESCRIPTION = a.DESCRIPTION;
                                TU.TRAN_DETAIL = a.TRAN_DETAIL;
                                TU.TRAN_AMNT = a.TRAN_AMNT;
                                TU.OTST_AMNT = a.OTST_AMNT;
                                TU.BRAN_DEPT = a.BRAN_DEPT;
                                TU.OUR_THEIR = a.OUR_THEIR;
                                TU.REMARKS = a.REMARKS;
                                TU.INST_NUMB = a.INST_NUMB;
                                TU.TRAN_DATE = a.TRAN_DATE;
                                TU.RECON_MODE = a.RECON_MODE;
                                TU.USER_ID = a.USER_ID;
                                TU.SUPR_RQRD = a.SUPR_RQRD;
                                TU.SUPR_BY = a.SUPR_BY;
                                TU.SUPR_DATE = a.SUPR_DATE;

                                db.SBP_NEW.Add(TU);

                                db.SaveChanges();



                            }
                            else
                            {
                                //data.Add("<ul>");
                                //if (a.ID == 0 || a.ID == null) data.Add("<li> ID is required</li>");
                                //if (a.NAME == "" || a.NAME == null) data.Add("<li> Name is required</li>");


                                //data.Add("</ul>");
                                data.ToArray();
                                return Json(data, JsonRequestBehavior.AllowGet);
                            }
                        }

                        catch (DbEntityValidationException ex)
                        {
                            foreach (var entityValidationErrors in ex.EntityValidationErrors)
                            {

                                foreach (var validationError in entityValidationErrors.ValidationErrors)
                                {

                                    Response.Write("Property: " + validationError.PropertyName + " Error: " + validationError.ErrorMessage);

                                }

                            }
                        }
                    }
                    //deleting excel file from folder  
                    if ((System.IO.File.Exists(pathToExcelFile)))
                    {
                        System.IO.File.Delete(pathToExcelFile);
                    }
                    return Json("success", JsonRequestBehavior.AllowGet);
                }
                else
                {
                    //alert message for invalid file format  
                    data.Add("<ul>");
                    data.Add("<li>Only Excel file format is allowed</li>");
                    data.Add("</ul>");
                    data.ToArray();
                    return Json(data, JsonRequestBehavior.AllowGet);
                }
            }
            else
            {
                data.Add("<ul>");
                if (FileUpload == null) data.Add("<li>Please choose Excel file</li>");
                data.Add("</ul>");
                data.ToArray();
                return Json(data, JsonRequestBehavior.AllowGet);
            }
        }
C# ASP.NET-MVC EXCEL 预言机

评论


答:

0赞 MMM 10/4/2016 #1

当您输入一个长数字时,文本 ,然后将其传输到 excelconcatinate (')

例如,键入“1234567890123456789”,按 Enter 键后将不显示引号。

点击此处了解更多信息

评论

0赞 Mussaib Siddiqui 10/4/2016
实际上,它正在上传图像中显示的所有值,但仅当它在第一行获得字母数字值时,但是当它在TRAN DETAIL列中获得如图所示的数值时,它只上传数值,而忽略了字母数字值
0赞 MMM 10/4/2016
@MussaibSiddiqui我可以看到您可以上传,但是如果您上传大量数字,它将仅以字母数字形式显示 只需尝试连接其他列值即可显示,因为 - 存在于这些数字之前
0赞 Mussaib Siddiqui 10/4/2016
好的,但是我无法对来自其他来源的 excel 文件进行更改
0赞 MMM 10/4/2016
如果您使用 Excel Mean 将数据上传到 SQL,您可以将十六进制数字系统转换为 long 并保存到您的表格 stackoverflow.com/questions/1139957/...
0赞 Mussaib Siddiqui 10/4/2016
好的最后一个问题,我将如何访问该列?并转换它