簡體   English   中英

在讀取 Excel 工作表時,如果列的值為數字,則它在數據表中返回 null

[英]While reading Excel sheet if the value of column is numberic then it returns null in datatable

我正在讀取 Excel 表中的值。 列通常包含String但有時它可能包含數值。 在將 Excel 工作表讀入數據表時,數值被讀取為空白。

它將 90004 讀取為null ,但是如果我按數字對這一列進行排序,它會讀取數值並將字符串值為null ,如果我按字符串對這一列進行排序,那么它會讀取字符串值並給出數字為 null。

AC62614 abc     EA  MISC
AC62615 pqr     EA  MISC
AC62616 xyz     EA  MISC
AC62617 test    EA  90004
AC62618 test3   TO  MISC
AC62619 test3   TO  STEEL

我的代碼:

    public static DataTable ReadExcelFile(FileUpload File1, string strSheetName)
    {
        string strExtensionName = "";
        string strFileName = System.IO.Path.GetFileName(File1.PostedFile.FileName);
        DataTable dtt = new DataTable();
        if (!string.IsNullOrEmpty(strFileName))
        {
            //get the extension name, check if it's a spreadsheet
            strExtensionName = strFileName.Substring(strFileName.IndexOf(".") + 1);
            if (strExtensionName.Equals("xls") || strExtensionName.Equals("xlsx"))
            {
                /*Import data*/
                int FileLength = File1.PostedFile.ContentLength;
                if (File1.PostedFile != null && File1.HasFile)
                {

                    //upload the file to server
                    //string strServerPath = "~/FolderName"; 
                    FileInfo file = new FileInfo(File1.PostedFile.FileName);
                    string strServerFileName = file.Name;
                    string strFullPath =     HttpContext.Current.Server.MapPath("UploadedExcel/" + strServerFileName);
                    File1.PostedFile.SaveAs(strFullPath);

                    //open connection out to read excel
                    string strConnectionString = string.Empty;
                    if (strExtensionName == "xls")
                        strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
                                                + strFullPath
                                                + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
                    else if (strExtensionName == "xlsx")
                        strConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
                                                + strFullPath
                                                + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";

                    if (!string.IsNullOrEmpty(strConnectionString))
                    {
                        OleDbConnection objConnection = new OleDbConnection(strConnectionString);
                        objConnection.Open();
                        DataTable oleDbSchemaTable = objConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                        bool blExists = false;
                        foreach (DataRow dtr in oleDbSchemaTable.Rows)
                        {
                            //reads from the spreadsheet called 'Sheet1'
                            if (dtr["TABLE_NAME"].ToString() == "" + strSheetName + "$")
                            {
                                blExists = true;
                                break;
                            }
                        }
                        if (blExists)
                        {
                            OleDbCommand objCmd = new OleDbCommand(string.Format("Select * from [{0}$]", strSheetName), objConnection);
                            OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
                            objAdapter1.SelectCommand = objCmd;
                            DataSet objDataSet = new DataSet();
                            objAdapter1.Fill(objDataSet);
                            objConnection.Close();
                            dtt = objDataSet.Tables[0];
                        }

                    }
                }
            }
        }
        return dtt;
    }

如果將連接字符串中的IMEX = 2更改為IMEX = 1,則列將被解釋為文本。 然后,您可以獲得工作表的所有數據,並使用Int32.TryParse()檢查該值是否為數字。

連接字符串:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"
  • IMEX=1用於從 Excel 文件讀取所有值作為文本

  • HDR =Yes對於 Excel 第一行作為列讀取

  • IMEX=1不使用 Than Numeric value will be NULL read

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM