You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Aspose Cells 19.10 Linux环境下HTML转存Xlsx结果异常问题咨询

问题原因分析
  • 区域配置优先级异常:Aspose Cells 19.10版本在Linux环境下存在已知的配置优先级缺陷,你代码中手动设置的数字分隔符、区域规则没有覆盖操作系统的默认区域配置。Ubuntu 19.10自带的德语区域默认规则为「小数点是逗号,、千位分隔符是点.」,和你代码中设置的setNumberDecimalSeparator('.')、setNumberGroupSeparator(' ')规则冲突,导致HTML中的数字串识别错误:例如5.000中的点被识别为小数点,最终解析为数值5,而非预期的5000。
  • 字体依赖缺失:Linux系统默认没有预装Windows环境下的常用Office字体,Aspose Cells开启setAutoFitColsAndRows(true)后,需要基于字体计算单元格宽度来适配内容,缺少对应字体时会触发兼容逻辑,自动在内容前后补空格来适配宽度,导致数字前后出现多余空格。
  • 跨平台解析逻辑差异:Windows环境下的区域编码、字符处理逻辑和Linux存在原生差异,你在Windows下的测试环境刚好和Aspose的默认兼容逻辑匹配,所以没有触发异常。
解决方案

1. 修正代码配置,强制覆盖解析规则

优先在JVM启动级别设置区域规则,同时保证所有层级的区域、分隔符配置一致,新增遍历单元格强制设置数字格式的逻辑,避免解析异常:

// 初始化前先设置JVM全局区域配置,优先级高于操作系统默认配置
Locale.setDefault(Locale.GERMANY);
System.setProperty("user.language", "de");
System.setProperty("user.region", "DE");

HtmlLoadOptions loadOptions = new HtmlLoadOptions();
loadOptions.setLocale(Locale.GERMANY);
loadOptions.setRegion(CountryCode.GERMANY);
loadOptions.setLanguageCode(CountryCode.GERMANY);
loadOptions.setAutoFitColsAndRows(true);
loadOptions.setDeleteRedundantSpaces(true);
loadOptions.setKeepPrecision(true);
loadOptions.setCheckExcelRestriction(true);
// 强制开启HTML数字自动识别
loadOptions.setConvertNumericData(true);

Workbook workbook = new Workbook(inputStream, loadOptions);
workbook.getSettings().setLocale(Locale.GERMANY);
workbook.getSettings().setRegion(CountryCode.GERMANY);
workbook.getSettings().setLanguageCode(CountryCode.GERMANY);
// 若需遵循德语标准规则用以下配置,自定义规则可改回你原来的设置,核心是全局配置要统一
workbook.getSettings().setNumberDecimalSeparator(',');
workbook.getSettings().setNumberGroupSeparator('.');
// 禁用不需要的兼容性逻辑
workbook.getSettings().setCheckCompatibility(false);

// 遍历所有单元格,强制应用数字格式,避免自动识别偏差
WorksheetCollection worksheets = workbook.getWorksheets();
for (int i = 0; i < worksheets.getCount(); i++) {
    Worksheet sheet = worksheets.get(i);
    Cells cells = sheet.getCells();
    int maxRow = cells.getMaxDataRow();
    int maxCol = cells.getMaxDataColumn();
    for (int row = 0; row <= maxRow; row++) {
        for (int col = 0; col <= maxCol; col++) {
            Cell cell = cells.get(row, col);
            if (CellValueType.IS_NUMERIC.equals(cell.getType())) {
                Style style = cell.getStyle();
                // 自定义数字格式:显示千位分隔符,无小数位
                style.setCustom("#,##0");
                cell.setStyle(style);
            }
        }
    }
}

workbook.save(targetOutputStream, SaveFormat.XLSX);

2. 安装Linux环境必备字体

在Ubuntu 19.10服务器上执行以下命令安装常用字体,解决字符宽度计算错误导致的多余空格问题:

sudo apt update
sudo apt install -y fonts-dejavu fonts-liberation msttcorefonts
# 刷新系统字体缓存
fc-cache -fv

3. 版本升级(可选)

如果上述调整后问题仍然存在,可以升级到Aspose Cells 21.4及以上版本,该版本已经官方修复了Linux环境下区域配置优先级不生效的已知bug。

内容的提问来源于stack exchange,提问作者Sergiu Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:54:01