簡體   English   中英

讀取上傳的Excel文件

[英]Reading an uploaded Excel file

我正在構建一個概念快速證明項目,以展示解析excel文件的能力。 根據Microsoft文檔( 如何解析和閱讀大型電子表格文檔 ),似乎首選的SDK是Open Xml

概念驗證為用戶上傳文件(.xlsx)提供了一種基本形式。 控制器讀取文件並吐回內容。 我正在努力獲取單元格的值,相反,似乎只能獲得某種標識符或對文本的引用。 這是我的代碼和一些例子

視圖

@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代表“ Hello”,而1代表“ World”。 我已經使用較大的數據集對此進行了測試,並確認當打印到屏幕上時相同的單詞具有相同的值。

該示例幾乎是從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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM