读取上传的Excel文件

我正在构build一个快速的概念validation项目,以显示parsingexcel文件的能力。 基于微软的文档( 如何分析和阅读一个大的电子表格文档 ),似乎select的SDK是Open Xml

概念validation为用户上传文件(.xlsx)提供了一个基本的forms。 控制器读取文件并回传内容。 我努力抓住单元格的价值,而我似乎只能得到某种标识符或对文本的引用。 这里是我的代码和一些例子

视图

 @using(Html.BeginForm("Index", "Home", FormMethod.Post, new{ enctype="multipart/form-data" } )) { <input type="file" name="file"/> <input type="submit"/> } <br/> @Html.Raw(ViewBag.Text) 

行动

 [HttpPost] public ActionResult Index(HttpPostedFileBase file) { ViewBag.Text = ""; using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(file.InputStream, false)) { WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart; WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First(); string text; foreach (Row r in sheetData.Elements<Row>()) { foreach (Cell c in r.Elements<Cell>()) { text = c.CellValue.Text; ViewBag.Text += text + ", "; } ViewBag.Text += "<br />"; } } return this.View(); } 

Excel文件

| 你好| 世界|
| 世界| 你好|

产量

0,1,
1,0,

正如你所看到的,0表示“你好”,1表示“世界”。 我已经用较大的数据集进行了testing,并且确认了相同的字在打印到屏幕上时具有相同的值。

这个例子几乎是从MS网站复制/粘贴的。 我已经尝试访问其他c.CellValue属性,如InnerTextInnerXml只获得相同的结果。 我究竟做错了什么? Open XML是用于此目的的良好SDK吗?

使用此方法获取单元格的精确值而不是数字:

 private string ReadExcelCell(Cell cell, WorkbookPart workbookPart) { var cellValue = cell.CellValue; var text = (cellValue == null) ? cell.InnerText : cellValue.Text; if ((cell.DataType != null) && (cell.DataType == CellValues.SharedString)) { text = workbookPart.SharedStringTablePart.SharedStringTable .Elements<SharedStringItem>().ElementAt( Convert.ToInt32(cell.CellValue.Text)).InnerText; } return (text ?? string.Empty).Trim(); }