Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3.3.4 版本,使用excelWriter.write(data, sheet1)的时候,data数据如果是map的话,写不进去数据 #3999

Open
baiying319 opened this issue Sep 19, 2024 · 0 comments
Labels
help wanted Extra attention is needed

Comments

@baiying319
Copy link

建议先去看文档

快速开始常见问题

异常代码

 // 获取导出模板需要的数据
        List<JSONObject> data = this.getExportExcelTemplateData(itemImportDto, detailList, excelItemByConfigRpcService);
        // 包含的行
        List<String> includeColumnSet = detailList.stream().map(ExcelItem::getColumnCode).collect(toList());;
        try (OutputStream outputStream = response.getOutputStream()) {
            response.setContentType("application/force-download");
            String name = CharSequenceUtil.emptyToDefault(itemImportDto.getName(), "导入模板") + ".xls";
            response.addHeader("Content-Disposition", "attachment;fileName=" + new String(name.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
            ExcelWriter excelWriter = EasyExcel.write(outputStream).build();
            WriteSheet sheet1 = EasyExcel.writerSheet(0, "data")
                    .registerWriteHandler(new ExcelCellStyleStrategy(detailList))
                    .registerWriteHandler(ExcelCellStyleStrategy.TEMPLATE_WRITE_HANDLER)
                    .registerWriteHandler(new ExcelDictWriteHandler(detailList, this, itemImportDto.getBusAccount()))
                    .includeColumnFieldNames(includeColumnSet)
                    .head(ExcelUtil.getHeaderList(detailList))
                    .build();
            excelWriter.write(data, sheet1);


ExcelWriteAddExecutor:
 private void addOneRowOfDataToExcel(Object oneRowData, int rowIndex, int relativeRowIndex) {
        if (oneRowData == null) {
            return;
        }
        RowWriteHandlerContext rowWriteHandlerContext = WriteHandlerUtils.createRowWriteHandlerContext(writeContext,
                rowIndex, relativeRowIndex, Boolean.FALSE);
        WriteHandlerUtils.beforeRowCreate(rowWriteHandlerContext);

        Row row = WorkBookUtil.createRow(writeContext.writeSheetHolder().getSheet(), rowIndex);
        rowWriteHandlerContext.setRow(row);

        WriteHandlerUtils.afterRowCreate(rowWriteHandlerContext);

        if (oneRowData instanceof Collection<?>) {
            addBasicTypeToExcel(new CollectionRowData((Collection<?>) oneRowData), row, rowIndex, relativeRowIndex);
        }
//        else if (oneRowData instanceof JSONObject || oneRowData instanceof com.alibaba.fastjson.JSONObject) {
//            addBasicTypeToExcelNew(new StringMapRowData((Map<String, ?>) oneRowData), row, rowIndex, relativeRowIndex);
//        }
        else if (oneRowData instanceof Map) {
            // 这个jsonobject 强转成new MapRowData((Map<Integer, ?>) oneRowData),使用get(index) 怎么可能可以取到值?
            addBasicTypeToExcel(new MapRowData((Map<Integer, ?>) oneRowData), row, rowIndex, relativeRowIndex);
        } else {
            addJavaObjectToExcel(oneRowData, row, rowIndex, relativeRowIndex);
        }

        WriteHandlerUtils.afterRowDispose(rowWriteHandlerContext);
    }

异常提示

data为jsonObject或者map的时候,传进去进入执行器,走的map逻辑,但是代码强转呈rowData,只是这个要求key是interger啊,估计是要求列对应这个map里面,使用列index作为key,但是这样感觉非常不合理,我使用map瑶瑶特意改成map<integer,Object> 类型
而且,ExcelWriteAddExecutor初始化还不放出来,覆盖写的话,也是就、打包的话改了还没用,自己还得在启动类重写这个类,太恶心了
大家尽量把问题一次性描述清楚,然后贴上全部异常,这样方便把问题一次性解决掉。
至少大家要符合一个原则就是,能让其他人复现出这个问题,如果无法复现,肯定无法解决。

问题描述

@baiying319 baiying319 added the help wanted Extra attention is needed label Sep 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

1 participant