首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得NPOI?

如何获得NPOI?
EN

Stack Overflow用户
提问于 2018-10-02 09:07:43
回答 2查看 1K关注 0票数 4

我使用DotNetCore.NPOI (1.2.1)来读取MS文件。

有些单元格是文本类型的,包含格式化字符串(例如,一些粗体单词)。

如何获得格式化的单元格值?我的最终目标是:以HTML的形式检索单元格文本。

我试过了

代码语言:javascript
复制
var cell = row.GetCell(1);
var richStringCellValue = cell.RichStringCellValue;

但是这不允许我访问格式化的字符串(只是普通的没有格式化的字符串)。

有谁有主意或解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-18 21:37:22

我想在这种情况下你得走更长的路。首先,您必须维护单元格值(如日期、货币等)的格式,然后从单元格值中提取样式,并将单元格值嵌入到该样式下。

最好的选择是编写扩展方法以获得格式和样式值。

要获得fomat,请查看以下链接How to get the value of cell containing a date and keep the original formatting using NPOI

对于样式,首先您必须检查并找到运行文本的确切样式,然后返回html标记中的值,下面的方法将为您提供从单元格值中提取样式的想法。代码未经测试,您可能必须包括缺少的库。

代码语言:javascript
复制
 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>. 
                }
            }
        }
票数 3
EN

Stack Overflow用户

发布于 2018-10-18 12:22:58

XLSX文件中的字体格式是根据模式http://schemas.openxmlformats.org/spreadsheetml/2006/main存储的,它与HTML标记没有直接关系。因此,你的任务并不是那么直接。

代码语言:javascript
复制
style = cell.getCellStyle();
font = style.getFont(); // or style.getFont(workBook);
// use Font object to query font attributes. E.g. font.IsItalic

然后,您将不得不通过附加相关的HTML标记来构建HTML。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52605284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档