C#System.Object

我写了一个小小的C#程序,打开一个Excel工作簿和一个工作表,并遍历工作表中的所有单元格,并在每个单元格中打印出值。

我遇到的问题是控制台打印System.Object[,]而不是实际的单元格值,它似乎是一个无限循环。

有谁知道为什么不打印实际值?

这是我的程序:

 using System; using System.IO; using System.Text; using System.Windows; using System.Windows.Forms; using NetOffice.ExcelApi; using NetOffice.ExcelApi.Enums; using Excel = NetOffice.ExcelApi.Application; namespace excelApp { class Program { Excel excelApplication; Workbook workbook; Worksheet sheet; [STAThreadAttribute] public static void Main(string[] args) { Program p = new Program(); p.openWorkSheet(@"C:\Users\HP\Desktop\Book1.xlsx", 2); p.printValues(); Console.ReadKey(true); } private void openWorkSheet(string path, int worksheet) { excelApplication = new Excel { Visible = true, ScreenUpdating = true }; try { workbook = excelApplication.Workbooks.Open(path); sheet = (Worksheet)workbook.Worksheets[worksheet]; } catch { Console.WriteLine("File does not exist"); } } private void printValues() { Range range = sheet.Cells[2, 2]; Range rngLastCell = range.get_End(XlDirection.xlToRight) .get_End(XlDirection.xlDown); // holds the range of cells in the worksheet Range tableRange = sheet.Range(range, rngLastCell); try { foreach(var cell in tableRange.Rows) { Console.Write(cell.Value.ToString()); } } catch(Exception e) { Console.WriteLine("Something went wrong" + e.StackTrace); } } } } 

这里是控制台输出:

在这里输入图像说明

你的问题在这里:

 foreach(var cell in tableRange.Rows) { Console.Write(cell.Value.ToString()); } 

这是遍历范围的 ,每个范围本身是一个范围,所以“值”是一个数组。 数组的ToString的默认实现是只打印types的名字,即System.Object[,]

这应该工作,因为Range.Value将是一个对象数组:

 foreach(object cell in ((object[,])tableRange.Value)) { Console.Write(cell.ToString()); } 

请注意,它还节省了在每个单元格上调用.Value的开销,这是一个昂贵的操作。 将整个范围的值放入一个数组并将其循环会更有效率。