使用Aspose Cells将HTML字符串转Excel时mso-number-format不生效问题求助
问题原因
- Aspose Cells 19.6对HTML中
mso-number-format这类Office专属样式的支持度有限,仅能识别部分预置的标准格式,自定义数字格式大概率无法通过HTML样式直接导入生效。 - 你当前写入
<td>的内容是带格式的文本(比如(1,234)、1,234),Aspose导入HTML时会默认将这类内容识别为字符串类型,即使格式规则被识别,也无法应用到文本类型的单元格上。
推荐解决方案(可靠性最高)
不用依赖HTML样式传递格式,先把纯数值写入HTML的<td>,导入Excel后统一用Aspose Cells的API设置单元格数字格式即可,你要的「负数带括号、带千分位、小数点纵向对齐」的需求可以直接通过自定义格式实现,步骤如下:
- 生成HTML的时候,
<td>里直接写纯数字,不要加千分位、括号这类格式,示例代码:
var html += '<td>'+ -1234 +'</td><td>'+ 1234 +'</td>';
- 用Aspose Cells加载HTML文件后,获取对应的工作表和单元格范围,设置自定义数字格式即可,格式字符串
#,##0.00_);(#,##0.00)里的_)是用来给正数右侧补和右括号宽度一致的空格,实现小数点对齐的效果,Java代码示例:
// 加载HTML文件 Workbook workbook = new Workbook("你的HTML文件路径"); Worksheet sheet = workbook.getWorksheets().get(0); // 创建自定义格式样式 Style style = workbook.createStyle(); // 可根据需求调整小数位数,比如保留1位就改成#,##0.0_);(#,##0.0) style.setCustom("#,##0.00_);(#,##0.00)"); StyleFlag flag = new StyleFlag(); flag.setNumberFormat(true); // 应用到目标单元格范围,示例为应用到工作表所有已使用单元格,可自行指定范围 sheet.getCells().applyStyle(style, flag); // 保存Excel文件 workbook.save("导出的文件路径.xlsx");
兼容HTML样式的解决方案
如果必须通过HTML传递格式,可以做两个调整:
- 升级Aspose Cells到21.1及以上版本,该版本大幅优化了对mso样式的识别支持
- HTML的
<td>里写纯数值,同时style里的mso-number-format要补全引号,正确写法示例:
var msoStyle = "'mso-number-format:\"#,##0.00_);(#,##0.00)\"'"; var html += '<td style='+msoStyle+'>-1234</td><td style='+msoStyle+'>1234</td>';
内容的提问来源于stack exchange,提问作者Newinjava
相关产品推荐
相关产品推荐

