我有一个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
答案 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;
}
}