Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取带有C#错误的动态Excel文件_C#_Excel_File Io - Fatal编程技术网

读取带有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

我正在尝试用C#读取excel文件,并使用
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,因为我只是在一个消息框中打印变量值。只需几分钟这就是调试的威力。