Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 如何获取NPOI Excel RichStringCellValue?_Asp.net Core_Npoi - Fatal编程技术网

Asp.net core 如何获取NPOI Excel RichStringCellValue?

Asp.net core 如何获取NPOI Excel RichStringCellValue?,asp.net-core,npoi,Asp.net Core,Npoi,我正在使用DotNetCore.NPOI(1.2.1)读取MS Excel文件 某些单元格为文本类型,包含格式化字符串(例如,某些粗体字) 如何获取格式化的单元格值?我的最终目标是:将单元格文本检索为HTML 我试过了 var cell = row.GetCell(1); var richStringCellValue = cell.RichStringCellValue; 但是这不允许我访问格式化的字符串(只是没有格式化的普通字符串) 有人有想法或解决办法吗 XLSX文件中的字体格式是根据模

我正在使用DotNetCore.NPOI(1.2.1)读取MS Excel文件

某些单元格为文本类型,包含格式化字符串(例如,某些粗体字)

如何获取格式化的单元格值?我的最终目标是:将单元格文本检索为HTML

我试过了

var cell = row.GetCell(1);
var richStringCellValue = cell.RichStringCellValue;
但是这不允许我访问格式化的字符串(只是没有格式化的普通字符串)


有人有想法或解决办法吗

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。

我认为,在这种情况下,您必须采取更长的路线。首先,您必须维护单元格值的格式,如日期、货币等,然后从单元格值提取样式并将单元格值嵌入该样式下

最好的选择是编写extension方法来获取格式和样式值

要获取fomat,请参阅此链接

对于样式设置,首先您必须检查并找到运行文本的确切样式,然后返回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>. 
                }
            }
        }
public void GetStyleOfCellValue()
{
XSSF工作簿wb=新的XSSF工作簿(“YourFile.xlsx”);
ISHET sheet=wb.GetSheetAt(0);
ICell单元格=sheet.GetRow(0).GetCell(0);
XSSFRichTextString richText=(XSSFRichTextString)cell.RichStringCellValue;
int formattingRuns=cell.RichStringCellValue.NumFormattingRuns;
for(int i=0;i
Hello TRINE,谢谢您的回答。然而,我不确定这将如何帮助我。您提供的链接似乎不存在(不再存在)。代码片段(我尝试过:var style=row.GetCell(1.CellStyle;var font=style.GetFont(工作簿);)对我没有任何帮助。通过探索font对象,我找不到任何有助于分析单元格RichStringCellValue中不同格式的属性。我错过了显而易见的吗?@Ingmar这不是一个链接。请参见什么是架构名称空间@Ingmar Btw,此库的实现有限。如果可能的话,从这个图书馆搬出去也行。能使用excel实例;再次感谢你的帮助,崔妮。库马尔(上图)给了我所需要的想法/信息。是的,我已经想好了,NPOI有点有限,使用起来有点不舒服。但是,到目前为止,它似乎是ASP.NET CORE免费提供的唯一解决方案。这就是它的工作原理。整个字符串分为“FormattingRuns”,然后我可以检查单个formattingRun的基本格式。(可怕的)但是,太棒了,你让我明白了这一点。谢谢,库马尔。这对我帮助很大!