Чтение загруженного файла Excel

1

Я создаю быстрое доказательство концептуального проекта, чтобы показать возможность синтаксического анализа файла 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 представляет "Привет", а 1 представляет "Мир". Я проверил это с большим набором данных и подтвердил, что одинаковые слова имеют одинаковое значение при печати на экране.

Пример довольно скопирован/вставлен с веб-сайта MS. Я попытался получить доступ к другим свойствам c.CellValue, таким как InnerText и InnerXml только для получения тех же результатов. Что я делаю не так? Является ли Open XML хорошим SDK для использования с этой целью?

  • 0
    stackoverflow.com/questions/15793442/...
  • 0
    @Gandarez Этот вопрос использует совершенно другую библиотеку и не отвечает на заданный вопрос.
Показать ещё 1 комментарий
Теги:
excel
razor
asp.net-mvc

1 ответ

0

Используйте этот метод, чтобы получить точное значение ячейки вместо чисел:

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();
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню