Чтение формата ячейки Excel

Я работаю над этой программой, которая будет читать данные в файле Excel и помещать их в нашу базу данных. Программа написана в Visual Studio 2010 с использованием C#, и я использую библиотеку NPOI.

Раньше я мог читать электронную таблицу построчно и по ячейке, чтобы получить данные, но новый формат файла Excel не позволит мне сделать это легко. (Excel предоставлен другим пользователем, поэтому я не могу вносить в него большие изменения).

На одном листе есть несколько «таблиц» (с использованием границ и заголовков для каждого имени столбца), и мне нужно будет получать данные в основном из таблиц, но иногда и за пределами таблиц.

Мне было интересно, если бы я прочитал электронную таблицу построчно (это то, с чем я немного знаком), есть ли способ сказать, что я достиг таблицы? Есть ли способ прочитать «формат» ячейки?

Я имею в виду, например, что «эта ячейка имеет границы вокруг себя, поэтому эта строка начинается с таблицы» или «текст в этой ячейке выделен полужирным шрифтом, поэтому эта строка является заголовком строка для этой новой таблицы."

Раньше я мог читать только «текст» для электронной таблицы, а не формат/стиль. Я искал в Интернете, и я могу только найти, как установить стиль для вывода Excel, но не как читать формат из ввода.

Любая помощь приветствуется, спасибо!


person sora0419    schedule 20.01.2014    source источник


Ответы (1)


Было бы лучше определить различные таблицы в исходной книге как именованные диапазоны с известными именами. Затем вы можете получить связанную область следующим образом:

using System.IO;
using System.Windows;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;

// ...
        using (var file = new FileStream(workbookLocation, FileMode.Open, FileAccess.Read))
        {
          var workbook = new XSSFWorkbook(file);
          var nameInfo = workbook.GetName("TheTable");
          var tableRange = nameInfo.RefersToFormula;
          // Do stuff with the table
        }

Если у вас нет контроля над исходной электронной таблицей и вы не можете определить таблицы как именованные диапазоны, вы можете прочитать форматы ячеек, как вы предлагаете. Вот пример чтения стиля TopBorder —

        using (var file = new FileStream(workbookLocation, FileMode.Open, FileAccess.Read))
        {
            var workbook = new XSSFWorkbook(file);
            var sheet = workbook.GetSheetAt(0);

            for (int rowNo = 0; rowNo <= sheet.LastRowNum; rowNo++)
            {
                var row = sheet.GetRow(rowNo);
                if (row == null) // null is when the row only contains empty cells 
                    continue;
                for (int cellNo = 0; cellNo <= row.LastCellNum; cellNo++)
                {
                    var cell = row.GetCell(cellNo);
                    if (cell == null) // null is when the cell is empty
                        continue;
                    var topBorderStyle = cell.CellStyle.BorderTop;
                    if (topBorderStyle != BorderStyle.None)
                    {
                        MessageBox.Show(string.Format("Cell row: {0} column: {1} has TopBorder: {2}", cell.Row.RowNum, cell.ColumnIndex, topBorderStyle));
                    }
                }
            }
        }
person Edward    schedule 20.01.2014