Excel写工具类

用于将数据写入到excel中并写回到前端.xls文件;

使用到的技术:

阿里巴巴开源的 easyExcel,官方文档: EasyExcel · 语雀 (yuque.com);

其余参考的博客: (13条消息) Java使用EasyExcel下载xls、xlsx 出现文件格式与扩展名不匹配_小肥羊的博客-CSDN博客

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.example.demo.domain.StudentVO;
import org.apache.poi.ss.formula.functions.T;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

public class ExcelUtils {
    /**
     * 使用response,将指定集合中的数据作为excel输出
     * @param response 应该传入HttpServletResponse,传入前需要先设定response的返回内容类型和返回头信息
     *             response.setContentType("application/vnd.ms-excel");
     *             response.setHeader("content-Disposition","attachment;filename=" + "输出的文件名" +".xls")
     * @param list 需要写到excel中的数据,List<T>中的T需要是个bean,不能使用map,否则数据写入不成功
     * @param voType 将list中的封装好的bean的字节码对象发送过来,如 StudengVO.class, 如果传递有问题,可能会出现没有表头的情况;
     * @throws IOException 将异常抛出,一旦有问题,会将异常抛给方法的调用着;
     */
    public static void responseExcel(HttpServletResponse response, List list, Class voType) throws Exception {
        //获取excelWriter对象,指定将都对应写到哪里。
        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
        //获取sheet的索引号为0,并将其名称改为report的sheet
        WriteSheet sheet = EasyExcel.writerSheet(0,"report").head(voType).build();
        //使用Writer对象,向sheet中写入list
        ExcelWriter write = excelWriter.write(list, sheet);//关闭excelWriter资源,在其中会关闭response中的流资源很重要
        excelWriter.finish();
    }
}

参数中需要传递进去java Bean的class对象,举例:

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data //lombok插件
@NoArgsConstructor
@AllArgsConstructor
public class StudentVO {
    @ExcelProperty("姓名") //在这里定义表头的名称,否则会将该bean的属性名作为该列的表头名称
    private String name;
    @ExcelProperty("年龄") //在这里定义表头的名称,否则会将该bean的属性名作为该列的表头名称
   private String age; }

Controller层代码举例:

import com.example.demo.domain.StudentVO;
import com.example.demo.util.ExcelUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;


@Controller
public class testController {

    @GetMapping("/test")
    @ResponseBody
    public void test(HttpServletResponse response){

        try {
       // 模拟数据
            List<StudentVO> list = new ArrayList<>();
            StudentVO s1 = new StudentVO("张三","21");
            StudentVO s2 = new StudentVO("李四","24");
            list.add(s1);
            list.add(s2);
       //设置响应体的格式
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("content-Disposition","attachment;filename=" + "test.xls");
       //调用工具类 进行写操作
            ExcelUtils.responseExcel(response,list,StudentVO.class);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
<properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- easyExcel 进行报表导出-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.6</version>
        </dependency>
        <!-- lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

另外,2003的excel行数最多65000行,实际使用的话,最好是在业务层及进行一个判断,如果超了的话,做个取舍,具体的判断的话,就不在工具类里面写了;

后续再根据需要写 读取excel的工具类;

大佬们,有问题的话,请帮忙指导啊,谢谢。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值