簡體   English   中英

讀取帶有C#錯誤的動態Excel文件

[英]Reading an dynamic Excel File with C# error

我正在嘗試使用C#讀取excel文件,並使用messagebox.Show()方法在messagebox.Show()的工作表中顯示每個單元格。 問題是我的excel文件有5行3列。 這是我的Excel工作表: http : //postimg.org/image/xts9n1kif

它顯示所有內容,直到“屋頂”,然后停止顯示“光”和“鐵”,但是如果我填充stuff3列,則一切都很好。 按照我的情況,文件可能會更改。 它可能有更多的列或行,其中一些可能為空。

知道為什么它不起作用嗎?

這是我的代碼:

using System;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

namespace ReadFromExcell
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Load += new System.EventHandler(this.Form1_Load);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Excel.Application xlApp = new Excel.Application();
            Excel.Workbook xlWorkbook = xlApp.Workbooks.Open("C:\\Users\\User1\\Desktop\\ItemDB.xlsx");
            Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
            Excel.Range xlRange = xlWorksheet.UsedRange;

            int rowCount = xlRange.Rows.Count;
            int colCount = xlRange.Columns.Count;


            for (int i = 1; i <= rowCount; i++)
            {
                for (int j = 1; j <= colCount; j++)
                {
                    MessageBox.Show(xlRange.Cells[i, j].Value2.ToString());
                }
            }
            //Close the excel file after reading it.
            xlWorkbook.Close();
        }



    }
}

代碼中最有可能發生的情況是,當循環到達單元格C4 (為空)時, xlRange.Cells[i, j].Value2變為null

嘗試在null引用上調用ToString()方法(或其他任何方法)將導致NullReferenceException

從...更改循環內的代碼...

MessageBox.Show(xlRange.Cells[i, j].Value2.ToString());

...像這樣:

MessageBox.Show( (xlRange.Cells[i, j].Value2 ?? "<no value>").ToString() );

?? 在這種情況下, 操作員很方便。 如果表達式在??的左側 (即xlRange.Cells[i, j].Value2 )得出值,即 運算符返回??右側的值。 代替。


(單元格C4可以包含多個空格字符,在這種情況下,該單元格的值不能為null 。但是,只有多個空格字符的單元格是非常罕見的情況。)

現在嘗試這個。

        for (int i = 0; i <= rowCount-1; i++)
        {
            for (int j = 0; j <= xlRange.Rows[0].Columns.Count-1; j++)
            {
                MessageBox.Show(xlRange.Cells[i, j].Value2.ToString());
            }
        }

暫無
暫無

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

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