我正在尝试使用C#读取excel文件,并使用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();
}
}
}
答案 0 :(得分:1)
您的代码中最有可能发生的事情是,当循环命中单元格 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() );
?? operator 在这种情况下非常方便。如果表达式在左侧? (即xlRange.Cells[i, j].Value2
)导致 null 值, ?? 运算符返回 ?? 右侧的值em>而不是。
(单元格C4可能包含许多空格字符,在这种情况下,单元格的值不会是 null 。但是只有一些空白字符的单元格是一种相当不寻常的罕见发生。)
答案 1 :(得分:0)
现在试试这个..
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());
}
}