我使用DotNetCore.NPOI (1.2.1)来读取MS文件。
有些单元格是文本类型的,包含格式化字符串(例如,一些粗体单词)。
如何获得格式化的单元格值?我的最终目标是:以HTML的形式检索单元格文本。
我试过了
var cell = row.GetCell(1);
var richStringCellValue = cell.RichStringCellValue;但是这不允许我访问格式化的字符串(只是普通的没有格式化的字符串)。
有谁有主意或解决办法吗?
发布于 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标记中的值,下面的方法将为您提供从单元格值中提取样式的想法。代码未经测试,您可能必须包括缺少的库。
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>.
}
}
}发布于 2018-10-18 12:22:58
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。
https://stackoverflow.com/questions/52605284
复制相似问题