设置下拉无法显示问题

我用java设置了单元格下拉,直接返回前端,下拉会丢失,我要重新加载一次gridjs生成的缓存文件才能生效
2327574bf1bc700e6406a7ee9cb9c76a.png (37.4 KB)

设置下拉
不生效代码
ebfac12110c4882d47540370bd6bf7f6.png (38.9 KB)

生效代码
a662c7717d07d1036263cf04ca780b80.png (23.9 KB)

另外还有个问题,我现在excel有些数据量很大,还有并发请求,我怎么防止oom。比如我设计排队,从aspose端控制,有什么优化或者设置的建议吗

@feng.qun.zhu.avaryholding.com
你直接提供一个sample工程给我们吧。
文件很大的话,你可以使用流式输输入输出,用我们的stream api 来获取json,就不会Oom。

我的是往excel铺数据,造成OOM,我会限制请求和数据量
aspose端的优化,我问了AI,是这三点就可以吗

  • LoadOptions.setMemorySetting(MemorySetting.MemoryPreference):让 Aspose 用临时文件缓存单元格数据,牺牲速度换堆占用,大数据量场景必开;
  • 写入大文件用 LightCells API(LightCellsDataProvider):以流式回调方式逐行/逐区写单元格,Workbook 不在堆里持有全部数据——这是 Aspose 官方给“几十万行导出”场景的标准答案;
  • 控制样式开销:样式对象、合并单元格在 Aspose 里非常吃内存,逐单元格 setStyle 会产生大量重复对象,用 Style 复用 + 批量套用。

工程无法提供,我把关键代码贴出来
导出json,下拉消失
public static String getExcelString(String fileName, Workbook workbook) {
GridJsWorkbook wbj = new GridJsWorkbook();

    try {
        StringBuilder sb = wbj.getJsonByUid(fileName, fileName);
        if (sb == null) {
            workbook.calculateFormula();
            wbj.importExcelFile(fileName, workbook);
            sb = wbj.exportToJsonStringBuilder(fileName);
        }

        return sb.toString();
    } catch (Exception e) {
        return "获取文件失败" + e.getMessage();
    }
}

设置下拉代码
//设置单元格为下拉
List isCriticalEqpTypeList = List.of(“Y”, “N”);
String isCriticalEqpTypeFormula = String.join(“,”, isCriticalEqpTypeList);
CellArea isCriticalEqpTypeArea = new CellArea();
isCriticalEqpTypeArea.StartRow = 1;
isCriticalEqpTypeArea.EndRow = dataList.size() + 1;
isCriticalEqpTypeArea.StartColumn = DATA_START_COL + 8;
isCriticalEqpTypeArea.EndColumn = DATA_START_COL + 8;

    int isCriticalEqpTypeValidationIndex = worksheet.getValidations().add(isCriticalEqpTypeArea);
    Validation isCriticalEqpTypevalidation = worksheet.getValidations().get(isCriticalEqpTypeValidationIndex);
    isCriticalEqpTypevalidation.setType(ValidationType.LIST);
    isCriticalEqpTypevalidation.setFormula1(isCriticalEqpTypeFormula);
    isCriticalEqpTypevalidation.setInCellDropDown(true);
    isCriticalEqpTypevalidation.setShowError(true);
    isCriticalEqpTypevalidation.setInputMessage("请从下拉列表中选择一个选项");


    List<ScmUiWorkstationMachineProcessTypeDto> processTypeDict = loadProcessTypeDict();
    Set<String> processTypeNameSet = processTypeNameSet(processTypeDict);
    String processTypeFormula = String.join(",", processTypeNameSet);
    CellArea processTypeArea = new CellArea();
    processTypeArea.StartRow = 1;
    processTypeArea.EndRow = dataList.size() + 1;
    processTypeArea.StartColumn = DATA_START_COL + 12;
    processTypeArea.EndColumn = DATA_START_COL + 12;

    int processTypeValidationIndex = worksheet.getValidations().add(processTypeArea);
    Validation processTypeValidation = worksheet.getValidations().get(processTypeValidationIndex);
    processTypeValidation.setType(ValidationType.LIST);
    processTypeValidation.setFormula1(processTypeFormula);
    processTypeValidation.setInCellDropDown(true);
    processTypeValidation.setShowError(true);
    processTypeValidation.setInputMessage("请从下拉列表中选择一个选项");

@feng.qun.zhu.avaryholding.com

感谢您提供的关键代码片段。

我们已将您补充的下拉数据验证设置以及 GridJsWorkbook 导出 JSON 的相关代码更新到内部跟踪问题中,并已转交给开发团队做进一步分析与排查。

一旦开发团队有针对该问题的调查进展或解决结果,我们会第一时间在此贴中通知您。

@feng.qun.zhu.avaryholding.com
你这代码我们这边无法跑起来。
你可以这样测试下拉效果 new workbook,然后设置完保存成一个Excel文件,然后用Excel打开看一下有没有效果。

@feng.qun.zhu.avaryholding.com
使用stream api
gridjsworkbook.jsonToStreamByUid(OutputStream stream, String uid, String filename)
不要用stringbuilder,如果json太大的话会OoM。

你可以java设置A1单元格下拉,然后用gridjs返回前端,是没有的
如果重新加载一下生成的缓存文件,就可以(下图,多了一部读excel缓存,再加载一次)

a662c7717d07d1036263cf04ca780b80.png (23.9 KB)

@feng.qun.zhu.avaryholding.com
这很简单你直接写个main函数打印一下json就行了
我可以写个测试案例给你

@feng.qun.zhu.avaryholding.com
测试工程给你了
gridjs_java_test.7z (4.3 KB)
测试都没有问题的