如何把一张表的数据导入到另一张表_表格怎么从另一个表格中导入数据

如何把一张表的数据导入到另一张表_表格怎么从另一个表格中导入数据要求生成的excel如下:这里我第一想到的就是用阿里的easyexcel来做:链接如下填充excel要求生成的excel如下:1)引入pom依赖:需要3.0.x以上的版本<dependency><groupId>com.alibaba</groupId>

大家好,欢迎来到IT知识分享网。

要求生成的excel如下:
如何把一张表的数据导入到另一张表_表格怎么从另一个表格中导入数据
这里我第一想到的就是用阿里的easyexcel来做:链接如下填充excel
要求生成的excel如下:
1)引入pom依赖:需要3.0.x以上的版本
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.1.1</version> </dependency>
2)定义excel模板,如下;为了测试方便,下面的两个表格里的模板字段就放一样的,后面好赋值
如何把一张表的数据导入到另一张表_表格怎么从另一个表格中导入数据

3)编写代码:

点击查看列表实体代码
package com.px.model;

import lombok.Data;

/**
 * @author pengxin
 * @Description
 * @date 2023-04-23 14:05
 */
@Data
public class Data2DTO {

    private String no;

    private String billDate;

    private String billNo;

    private String billCompany;

    private String notReciviedAmount;

    private String goodSn;

    private String goodName;

    private String goodUnit;

    private String paymentDays;

    private String qty;

    private String expectedPaymentTime;

}

点击查看生成excel代码
package com.px.controller;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
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.px.model.Data2DTO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author pengxin
 * @Description
 * @date 2023-04-23 14:05
 */
@RestController
@RequestMapping("/easyExcel")
public class EasyExcelTestController {

    @GetMapping("/export")
    public void export(HttpServletResponse response) throws IOException {
        String templateFileName = "D:\\Downloads\\对账单模板2023-04-23.xlsx";
        String fileName = "D:\\Downloads\\" + "对账单" + System.currentTimeMillis() + ".xlsx";
        try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build()) {
            WriteSheet writeSheet = EasyExcel.writerSheet().build();
            //  表单一
            Map<String, Object> data1Map = new HashMap<String, Object>();
            data1Map.put("customName", "aaa");
            data1Map.put("deadline", "bbb");
            data1Map.put("salesman", "ccc");
            data1Map.put("invoiceReceived", "ddd");
            data1Map.put("deliveryNotInvoiceReceived", "eee");
            data1Map.put("received", "fff");
            data1Map.put("bankName", "ggg");
            data1Map.put("demo01", "1000万");
            data1Map.put("demo02", "2");
            data1Map.put("demo03", "2000万");
            excelWriter.fill(data1Map, writeSheet);
            // 如果有多个list 模板上必须有{前缀.} 这里的前缀就是 data1,然后多个list必须用 FillWrapper包裹
            // 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
            // forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用
            // 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存
            FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
            //  表单二
            excelWriter.fill(new FillWrapper("data2", data2()), fillConfig, writeSheet);
            //  表单三
            excelWriter.fill(new FillWrapper("data3", data2()), fillConfig, writeSheet);

        }
    }
    private List<Data2DTO> data2() {
        List<Data2DTO> data2DTOS = new ArrayList<>();
        for (int i = 1; i <= 5; i++) {
            final Data2DTO data2DTO = new Data2DTO();
            data2DTO.setBillCompany("aaa");
            data2DTO.setBillDate("bbb" + i);
            data2DTO.setBillNo("ccc");
            data2DTO.setGoodName("ddd");
            data2DTO.setExpectedPaymentTime("eee");
            data2DTO.setGoodSn("fff");
            data2DTO.setGoodUnit("ggg");
            data2DTO.setNo("hhh" + i);
            data2DTO.setPaymentDays("iii");
            data2DTO.setQty("jjjj");
            data2DTOS.add(data2DTO);
        }
        return data2DTOS;
    }

}

4)注意事项:最终想要的文件就按要求生成了,但是我用公司给的模板去跑程序时,发现excel会报一个错误,错误提示如下:

Merged region E25 must contain 2 or more cells

后面我把excel一部分一部分复制过来,然后运行又没有报错,所以后续遇到类似的情况可以分块复制成一个新的excel模板,用于数据的填充。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/28297.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信