使用EPPlus读取Excel文件时,如何从对象访问单个数据?

我试图从c#中的Excel文件中读取一行,并使用EPPLUS存储在对象中。

现在,当我打印对象的内容时,它显示行的所有内容为单个string。

如何限制我访问单个单元格内容? 即单个单元格内容,以便我可以按照我的要求使用这些特定的字段。

var existingFile = new FileInfo("D:\\Fields.xlsx"); using (var package = new ExcelPackage(existingFile)) { ExcelWorkbook workBook = package.Workbook; if (workBook != null) { if (workBook.Worksheets.Count > 0) { ExcelWorksheet currentWorksheet = workBook.Worksheets.First(); var lastrow = currentWorksheet.Dimension.End.Row; var lastcol = currentWorksheet.Dimension.End.Column; for (int i = 1; i <= lastrow; i++) { for (int j = 1; j <= lastcol; j++) { object asd = new object(); asd = currentWorksheet.Cells[i, j].Value; Console.WriteLine(asd); } } } } } 

你的代码应该工作正常。 如果你看到excel文件的整行打印为单个string,那么我的猜测就是excel文件本身的内容有问题,在这种情况下,你将不得不以某种方式parsingstring。 张贴一个屏幕截图或你的,甚至更好的,在某处的Excel文件本身,所以我们可以看看。

同时,请查看这个代码,先创build自己的Excel文件,然后重新打开并保存使用您的代码:

 public void ConsoleWriteTest() { //Create some data var existingFile = new FileInfo(@"c:\temp\temp.xlsx"); if (existingFile.Exists) existingFile.Delete(); using (var pck = new ExcelPackage(existingFile)) { var workbook = pck.Workbook; var worksheet = workbook.Worksheets.Add("newsheet"); #region Data //The data worksheet.Cells["A1"].Value = "Col1"; worksheet.Cells["A2"].Value = "sdf"; worksheet.Cells["A3"].Value = "ghgh"; worksheet.Cells["A4"].Value = "sdf"; worksheet.Cells["A5"].Value = "wer"; worksheet.Cells["B1"].Value = "Col2"; worksheet.Cells["B2"].Value = "Group B"; worksheet.Cells["B3"].Value = "Group A"; worksheet.Cells["B4"].Value = "Group C"; worksheet.Cells["B5"].Value = "Group A"; worksheet.Cells["C1"].Value = "Col3"; worksheet.Cells["C2"].Value = 634.5; worksheet.Cells["C3"].Value = 274.5; worksheet.Cells["C4"].Value = 453.5; worksheet.Cells["C5"].Value = 634.5; worksheet.Cells["D1"].Value = "Col4"; worksheet.Cells["D2"].Value = 996440; worksheet.Cells["D3"].Value = 185780; worksheet.Cells["D4"].Value = 686468; worksheet.Cells["D5"].Value = 996440; #endregion pck.Save(); } //Reopen the file using (var package = new ExcelPackage(existingFile)) { ExcelWorkbook workBook = package.Workbook; if (workBook != null) { if (workBook.Worksheets.Count > 0) { ExcelWorksheet currentWorksheet = workBook.Worksheets.First(); var lastrow = currentWorksheet.Dimension.End.Row; var lastcol = currentWorksheet.Dimension.End.Column; for (int i = 1; i <= lastrow; i++) { for (int j = 1; j <= lastcol; j++) { object asd = new object(); asd = currentWorksheet.Cells[i, j].Value; Console.WriteLine(asd); } } } } } } 

编辑1:作为集合的行或列

 //Get entire rows or columns as collection and then print by casting using (var package = new ExcelPackage(existingFile)) { ExcelWorkbook workBook = package.Workbook; if (workBook != null) { if (workBook.Worksheets.Count <= 0) return; ExcelWorksheet currentWorksheet = workBook.Worksheets.First(); var lastrow = currentWorksheet.Dimension.End.Row; var lastcol = currentWorksheet.Dimension.End.Column; //get the row of column headers which are strings var asdrange = currentWorksheet.Cells[1, 1, 1, lastcol]; Console.WriteLine("As cell objects"); foreach (var cell in asdrange) Console.WriteLine(cell.Value); object asd = new object(); asd = currentWorksheet.Cells[1, 1, 1, lastcol].Value; object[,] cellObjects = (object[,])asd; List<string> stringList = cellObjects.Cast<string>().ToList(); Console.WriteLine(Environment.NewLine + "As casted to a List"); Console.WriteLine(stringList[0]); Console.WriteLine(stringList[1]); Console.WriteLine(stringList[2]); Console.WriteLine(stringList[3]); //get the second row which is a mix of strings and double asdrange = currentWorksheet.Cells[2, 1, 2, lastcol]; Console.WriteLine(Environment.NewLine + "As cell objects"); foreach (var cell in asdrange) Console.WriteLine(cell.Value); asd = currentWorksheet.Cells[2, 1, 2, lastcol].Value; cellObjects = (object[,])asd; List<object> objectList = cellObjects.Cast<object>().ToList(); Console.WriteLine(Environment.NewLine + "As casted to a List"); Console.WriteLine(objectList[0]); Console.WriteLine(objectList[1]); Console.WriteLine(objectList[2]); Console.WriteLine(objectList[3]); //Get Col3 which are doubles asdrange = currentWorksheet.Cells[2, 3, lastrow, 3]; Console.WriteLine(Environment.NewLine + "As cell objects"); foreach (var cell in asdrange) Console.WriteLine(cell.Value); asd = currentWorksheet.Cells[2, 3, lastrow, 3].Value; cellObjects = (object[,])asd; List<double> doubleList = cellObjects.Cast<double>().ToList(); Console.WriteLine(Environment.NewLine + "As casted to a List"); Console.WriteLine(doubleList[0]); Console.WriteLine(doubleList[1]); Console.WriteLine(doubleList[2]); Console.WriteLine(doubleList[3]); Console.WriteLine(doubleList[4]); Console.WriteLine(doubleList[5]); Console.WriteLine(doubleList[6]); Console.WriteLine(doubleList[7]); Console.WriteLine(doubleList[8]); } }