Как получить NPOI Excel RichStringCellValue? - PullRequest
0 голосов
/ 02 октября 2018

Я использую DotNetCore.NPOI (1.2.1) для чтения файла MS Excel.

Некоторые ячейки имеют текстовый тип и содержат отформатированные строки (например, некоторые слова выделены жирным шрифтом).

Как получить отформатированное значение ячейки?Моя конечная цель: получить текст ячейки как HTML.

Я пытался

var cell = row.GetCell(1);
var richStringCellValue = cell.RichStringCellValue;

Но это не позволит мне получить доступ к отформатированной строке (просто простая строка без форматирования).

У кого-нибудь есть идея или решение??

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Я думаю, что в этом случае вам придется выбрать более длинный маршрут.Сначала вам нужно сохранить форматирование значения ячейки, например, дату, валюту и т. Д., А затем извлечь стиль из значения ячейки и встроить значение ячейки под этот стиль.

лучший вариант - написать метод расширения, чтобы получить формат и значение стиля.

Чтобы получить поле, перейдите по этой ссылке Как получить значение ячейки, содержащей дату, и сохранитьисходное форматирование с использованием NPOI

Для стилизации сначала необходимо проверить и найти точный стиль выполнения текста, а затем вернуть значение внутри тега html, метод, приведенный ниже, даст вам идею извлечь стили иззначение ячейки.Код не проверен, возможно, вам придется включить отсутствующую библиотеку.

 public void GetStyleOfCellValue()
        {

            XSSFWorkbook wb = new XSSFWorkbook("YourFile.xlsx");
            ISheet sheet = wb.GetSheetAt(0);
            ICell cell = sheet.GetRow(0).GetCell(0);  
            XSSFRichTextString richText = (XSSFRichTextString)cell.RichStringCellValue;
            int formattingRuns = cell.RichStringCellValue.NumFormattingRuns;

            for (int i = 0; i < formattingRuns; i++)
            {
                int startIdx = richText.GetIndexOfFormattingRun(i);
                int length = richText.GetLengthOfFormattingRun(i);
                Console.WriteLine("Text: " + richText.String.Substring(startIdx, startIdx + length));
                if (i == 0)
                {
                    short fontIndex = cell.CellStyle.FontIndex;
                    IFont font = wb.GetFontAt(fontIndex);
                    Console.WriteLine("Bold: " + (font.IsBold)); // return string <b>my string</b>.
                    Console.WriteLine("Italics: " + font.IsItalic + "\n"); // return string <i>my string</i>. 
                    Console.WriteLine("UnderLine: " + font.Underline + "\n"); // return string <u>my string</u>. 
                }
                else
                {
                    IFont fontFormat = richText.GetFontOfFormattingRun(i);
                    Console.WriteLine("Bold: " + (fontFormat.IsBold)); // return string <b>my string</b>.
                    Console.WriteLine("Italics: " + fontFormat.IsItalic + "\n");// return string <i>my string</i>. 
                }
            }
        }
0 голосов
/ 18 октября 2018

Форматирование шрифта в файлах XLSX хранится в соответствии со схемой http://schemas.openxmlformats.org/spreadsheetml/2006/main, которая не имеет прямого отношения к тегам HTML.Поэтому ваша задача не так уж проста.

style = cell.getCellStyle();
font = style.getFont(); // or style.getFont(workBook);
// use Font object to query font attributes. E.g. font.IsItalic

Тогда вам придется создавать HTML, добавляя соответствующие теги HTML.

...