读取带有C#错误的动态Excel文件
我正在尝试用C#读取excel文件,并使用读取带有C#错误的动态Excel文件,c#,excel,file-io,C#,Excel,File Io,我正在尝试用C#读取excel文件,并使用messagebox.Show()方法在messagebox中显示工作表中的每个单元格。问题是我的excel文件有5行3列。这是我的excel表格: 它显示所有内容,直到“屋顶”,之后不再留下“灯”和“铁”,但如果我填写stuff3栏,它会显示所有内容。就我的情况而言,文件可能会更改。它可能有更多的列或行,其中一些可能是空的 知道它为什么不起作用吗 这是我的密码: using System; using System.Windows.Forms; usi
messagebox.Show()
方法在messagebox中显示工作表中的每个单元格。问题是我的excel文件有5行3列。这是我的excel表格:
它显示所有内容,直到“屋顶”,之后不再留下“灯”和“铁”,但如果我填写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();
}
}
}
使用系统;
使用System.Windows.Forms;
使用Excel=Microsoft.Office.Interop.Excel;
命名空间ReadFromExcell
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
this.Load+=new System.EventHandler(this.Form1\u Load);
}
私有void Form1\u加载(对象发送方、事件参数e)
{
Excel.Application xlApp=新的Excel.Application();
Excel.Workbook xlWorkbook=xlApp.Workbooks.Open(“C:\\Users\\User1\\Desktop\\ItemDB.xlsx”);
Excel._工作表xlWorksheet=xlWorkbook.Sheets[1];
Excel.Range xlRange=xlWorksheet.UsedRange;
int rowCount=xlRange.Rows.Count;
int colCount=xlRange.Columns.Count;
对于(inti=1;i现在试试这个
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());
}
}
for(int i=0;i代码中最可能发生的情况是,当循环命中单元格C4(为空)xlRange.Cells[i,j]。Value2
变为null
尝试在null
引用上调用ToString()方法(或任何其他方法)将导致null引用异常
更改循环中的代码,从
MessageBox.Show(xlRange.Cells[i, j].Value2.ToString());
…类似于:
MessageBox.Show( (xlRange.Cells[i, j].Value2 ?? "<no value>").ToString() );
MessageBox.Show((xlRange.Cells[i,j].Value2??).ToString());
在这种情况下非常方便。如果???左侧的表达式(即xlRange.Cells[i,j].Value2
)产生空值,则??运算符将返回??右侧的值
(单元格C4可能包含许多空格字符,在这种情况下,单元格的值不会为空。但是,只有许多空格字符的单元格是一种非常罕见的情况。)你能给我们看一下电子表格吗?也许是一个屏幕截图。我看没问题。一定是你的数据。很抱歉,链接断了,这里有一个新的问题:同样的问题,它显示“屋顶”你能告诉我行数和列数吗?rowCount=5 colCount=3alright,因为我只是在一个消息框中打印变量值。只需几分钟这就是调试的威力。