所以我一直在尝试编写一个控制台应用程序(。Net Core)从Excel文件中读取数据,但我有点卡住了。
我一直在尝试让这个代码样例工作:https://www.csharp-console-examples.com/general/reading-excel-file-in-c-console-application/
我需要显式地使用(Range)cell
,因为当示例代码试图直接访问单元格时,Visual Studio会抛出错误。
当尝试加载工作表和使用的范围m_ObjectToDataMap = null
时,工作表和范围都是m_ObjectToDataMap = null
。使用excelRange访问行。行因系统而失败。NullReferenceException:'对象引用未设置为对象的示例。”
static void Main(string[] args)
{
//Create COM Objects.
Application excelApp = new Application();
if (excelApp == null)
{
Console.WriteLine("Excel is not installed!!");
return;
}
Workbook excelBook = excelApp.Workbooks.Open(@"D:\test.xlsx");
_Worksheet excelSheet = (_Worksheet)excelBook.Sheets[1];
Range excelRange = excelSheet.UsedRange;
foreach (Range row in excelRange.Rows) // Here is the NullReference Error
{
// create new line
Console.Write("\r\n");
foreach (Range col in excelRange.Columns)
{
Range cell = (Range)excelRange.Cells[row, col];
// write the console
if (excelRange.Cells[row, col] != null && cell.Value2 != null)
Console.Write(cell.Value2.ToString() + "\t");
}
}
//after reading, relaase the excel project
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
Console.ReadLine();
}
我尝试了很多不同的代码,循环遍历所有的工作表或按其名称调用工作表,但它总是以工作表和范围加载错误和NullReferenceException结束。
任何帮助将不胜感激。
2条答案
按热度按时间uidvcgyl1#
我认为你使用的代码参考是中的控制台应用程序。NET Framework.我使用了您引用的here中的代码,并将其放入。NET Framework控制台应用程序,它工作得很完美。我把同样的代码放进了a。NET Core控制台应用程序,它不工作。所以你可能需要换成。NET Framework或您可以使用另一个Excel库。我使用NPOI,你可以按照一个例子here或做一些更多的谷歌搜索找到其他例子。可能还有更多的库,比如EPPlus。NET Core用于解析Excel,但我没有使用或研究过任何其他的。
kwvwclae2#
我使用下面的代码经过广泛的测试,它似乎工作。NET Framework以及。NET核心:
请注意,Excel中有两个值。范围-对象:价值与价值2对于Date-Value,'Value'返回Date-String,而'Value 2'返回数字。Interop真的很酷,但非常bug,同时也没有很好的文档记录。.