none
NPOI 讀取 Excel 內容問題 RRS feed

  • 問題

  • 請教各位大大們 我遇到一個讀取問題
    檔並到某欄位內容為空時會出現該錯誤訊息

    並未將物件參考設定為物件的執行個體

    如下 當讀到 第二列 第二欄位時 就會出錯
    
    請問我該如何修改才不會有這種問題 
    
    當我指定讀取欄位3 程式就可以正常讀取 
    
    所以應該不是程式有錯誤!
    
    
    內容:
    
    欄位1 欄位2 欄位3
    
     1 2010/5/5 王小明
     2      陳小明
     3 2010/10/5 吳小明
    
    
    程式
    
     Dim file As New FileStream(Excelpath, FileMode.Open, FileAccess.Read)
     Dim hssfworkbook As New HSSFWorkbook(file)
     Dim ws As MemoryStream = New MemoryStream()
     Dim sheet1 As HSSFSheet = hssfworkbook.GetSheet(X)
     Dim str As String = ""
    
     For i As Integer = sheet1.FirstRowNum To 2
    
      MsgBox(sheet1.GetRow(i).GetCell(1).ToString())
    
     Next
    2010年10月25日 上午 03:34

解答

  •  Dim file As New FileStream(Excelpath, FileMode.Open, FileAccess.Read)
     Dim hssfworkbook As New HSSFWorkbook(file)
     Dim ws As MemoryStream = New MemoryStream()
     Dim sheet1 As HSSFSheet = hssfworkbook.GetSheet(X)
     Dim str As String = ""
     For i As Integer = sheet1.FirstRowNum To 2

      MsgBox(Convert.ToString(sheet1.GetRow(i).GetCell(1)))

     Next

    2010年10月25日 上午 05:11

所有回覆

  •  Dim file As New FileStream(Excelpath, FileMode.Open, FileAccess.Read)
     Dim hssfworkbook As New HSSFWorkbook(file)
     Dim ws As MemoryStream = New MemoryStream()
     Dim sheet1 As HSSFSheet = hssfworkbook.GetSheet(X)
     Dim str As String = ""
     For i As Integer = sheet1.FirstRowNum To 2

      MsgBox(Convert.ToString(sheet1.GetRow(i).GetCell(1)))

     Next

    2010年10月25日 上午 05:11
  • Hi!

    這主要您的資料有 Nothing 的情況,使用 Object.ToString 會拋出 NullReferenceException

    改用 Convert.ToString() 或者先判斷資料是否為 Nothing 即可

    參考 Object.ToString()與Convert.ToString()


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年10月25日 上午 05:54
  • to 阿尼

       還是一樣的錯誤訊息!!

       我發現空值的那個欄位 在msgbox 前   先 create 就不會出錯了

       sheet1.GetRow(i).CreateCell(1).SetCellValue("test") 

       可是目前還是無法解決目前的問題

    2010年10月25日 上午 06:06
  • to 小歐ou

       使用了  Convert.ToString()  還是一樣

       程式改為   msgbox (Convert.ToString(sheet1.GetRow(i).GetCell(1).ToString))

       錯誤訊息是一樣的     感謝你的回覆

    2010年10月25日 上午 06:12
  • Hi!

    跑跑看此專案 http://cid-101d8ba47227b414.office.live.com/self.aspx/.Public/WindowsApplicationNPOI.zip

    或者把你的 Excel 與專案上傳到 SkyDrive


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年10月25日 上午 06:21
  • 我在網路找到別人的判斷

    For i As Integer = sheet1.FirstRowNum To 3  
       If sheet1.GetRow(i) IsNot Nothing Then 
         If sheet1.GetRow(i).GetCell(1) IsNot Nothing Then 
            MsgBox(Convert.ToString(sheet1.GetRow(i).GetCell(1).ToString))  
         End If 
       End If 
     Next 
     

    這樣就可以了..

    to  小歐ou

         我來去試試你的專案看看   感謝上面大大的幫忙了

    2010年10月25日 上午 06:27
  • to  小歐ou

         我下載你的專案 直接執行exe 也是會出現一樣的錯誤訊息耶

         難到你不會有錯誤訊息?  

    2010年10月25日 上午 06:32
  • to  小歐ou

         我下載你的專案 直接執行exe 也是會出現一樣的錯誤訊息耶

         難到你不會有錯誤訊息?  


    我這邊不會有錯誤,參考 http://www.youtube.com/watch?v=pwhOdvRSavg

    不過你只要能先判斷資料是否為 Nothing 即可

     


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年10月25日 上午 07:18
  • to 小歐ou

    哇..可是我真的會出錯   難到電腦版本關係嗎 ?

    還是frameWork 版本

    但至少目前問題先解決了!  感謝 小歐ou 的幫忙了!!

    2010年10月25日 上午 09:34