alibaba / easyexcel

快速、简洁、解决大文件内存溢出的java处理Excel工具
https://easyexcel.opensource.alibaba.com
Apache License 2.0
31.65k stars 7.46k forks source link

easyexcel 模版复制到同一个sheet #3416

Open ZhangChengJi opened 11 months ago

ZhangChengJi commented 11 months ago

怎么实现一个模版,进行边复制模版边填充数据,最后汇总到一个sheet

ljluestc commented 2 months ago

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class TemplateDataFiller {

    public static void main(String[] args) {
        // 模板文件路径
        String templateFileName = "template.xlsx";
        // 新文件路径
        String outputFileName = "output.xlsx";

        // 读取模板文件中的数据
        List<List<Object>> templateData = readTemplateData(templateFileName);

        // 创建一个新的工作簿
        ExcelWriterBuilder writerBuilder = EasyExcel.write(outputFileName);
        ExcelWriter excelWriter = writerBuilder.build();

        // 填充数据到新的工作簿中的Sheet
        fillDataToSheet(templateData, excelWriter);

        // 关闭ExcelWriter,保存文件
        excelWriter.finish();
    }

    // 读取模板文件中的数据
    private static List<List<Object>> readTemplateData(String templateFileName) {
        // 这里可以根据需要使用EasyExcel读取模板文件的数据
        // 返回一个List<List<Object>>,表示模板文件中的数据
        // 这里简单地模拟一个模板数据
        List<List<Object>> templateData = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            List<Object> rowData = new ArrayList<>();
            rowData.add("Column1 data");
            rowData.add("Column2 data");
            // 其他列数据...
            templateData.add(rowData);
        }
        return templateData;
    }

    // 填充数据到新的工作簿中的Sheet
    private static void fillDataToSheet(List<List<Object>> templateData, ExcelWriter excelWriter) {
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
        FillWrapper fillWrapper = FillWrapper.builder().collection(templateData).build();
        excelWriter.fill(fillWrapper, fillConfig, writeSheet);
    }
}