工作表和包含单元格的单元格虽然有值,但据说是空的

时间:2019-07-16 07:05:17

标签: c# excel office-interop excel-interop

我有一个Excel文件,其中包含我需要提取的数据。我希望使用的实际文件很大,并且包含大量数据。但是,当我开始在线使用互操作代码时,发现不断出现nullpointer异常。 因此,我创建了一个非常简单的文件,在单张纸的第一个单元格中输入了一些非常简单的数据(1a,2b,3c等)。当我尝试在控制台应用程序中打印数据时,我仍然得到nullpointers。在下面粘贴的代码中,我将添加注释,最终将其最终为null。

我不知道我在做什么错,这使得互操作性完全错过了单元格中确实存在数据的事实。我可以轻松地从文件的工作表中获取名称,但完全无法访问任何单元格。

如果有帮助,我正在使用Visual Studio Community 2019和Office 365中的最新Excel版本。该文件本身是xslx文件。

我曾尝试使用谷歌搜索这个问题,但是遇到了一群试图在excel中检测空单元格的人,这几乎与我正在尝试的相反。当我确实找到一个更相关的问题时,给定的解决方案对我没有任何帮助(例如“激活”工作表)。我怀疑关于Interop或Excel缺少某些东西或不了解,但是不知道该寻找什么。

public Excel(string path, int sheet) {
            this.path = path;
            wb = excel.Workbooks.Open(path);
            ws = wb.Worksheets[++sheet] as Worksheet;
            Console.WriteLine(ws.Name); //Prints the correct sheet name
            range = ws.UsedRange;
            Console.WriteLine(range.Count); //Prints 0
            var cell = ws.Cells[1,1] as Range;
            var cellValue = cell.Value2; //Nullpointer due to cell being null
            Console.WriteLine(cellValue.ToString());
}

我希望能够访问单元格内容,包括数字和字符串值。但是,如果您想获取技术方面的知识,我什么都没有,或者为空。

编辑:通过进一步的测试,我确定ws.Cells确实返回了com对象,但是当我尝试使用索引从中获取特定的单元格时,它变为null,就像它不包含任何单元格一样。

var cell = ws.Cells[1,1] as Range; //Is null
var cell2 = ws.Cells[1,1]; //Is null
var cell3 = ws.Cells as Range; //returns com object
var test = cell3[0, 0]; //Test is null

1 个答案:

答案 0 :(得分:0)

例如,您需要精确指定范围:

var col2 = xlWorkSheet.UsedRange.Columns["I:I", Type.Missing];

            foreach (Microsoft.Office.Interop.Excel.Range item in col2.Cells)
            {
                if (Convert.ToString(item.Value) != null)
                {
                Console.WriteLine(Convert.ToString(item.Value));
                }
                else
                {
                  //do something with null
                  return;
                }
            }