阿里开源(EasyExcel)--生成导出EXCEL文件 干货分享 Soeasy

     EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。
github地址:https://github.com/alibaba/easyexcel

    直接上实现代码,即可运行查看效果生成的文件,十分简单粗暴

package com.myFirstSpring.test; 

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.metadata.Table;
import com.alibaba.excel.support.ExcelTypeEnum;

/** 
 * @author tqf
 * @version 创建时间:2020-4-1 下午2:21:08 
 * 类说明: 阿里开源(EasyExcel)---生成导出EXCEL文件  Soeasy
 */
public class ExcelMain {
	
	public static void main(String[] args) {
		try {
			long time = System.currentTimeMillis();//获取当前系统时间(毫秒)
			writeExcelOneSheetOnceWrite();
			System.out.println(System.currentTimeMillis()-time+"毫秒");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
     * 针对较少的记录数(20W以内大概)可以调用该方法一次性查出然后写入到EXCEL的一个SHEET中
     * 注意: 一次性查询出来的记录数量不宜过大,不会内存溢出即可。
     *
     * @throws IOException
     */
    public static void writeExcelOneSheetOnceWrite() throws IOException {
    	SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 生成EXCEL并指定输出路径
    	//在本地新建一个文件夹 用于保存文件
    	File file1=new File("D:\\测试生成Excel文件");  
        if(!file1.exists()){//如果文件夹不存在  
            file1.mkdir();//创建文件夹  
        }
        OutputStream out = new FileOutputStream(""+file1+"\\测试SHEET.xls");
        ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLS);
        
        for (int j = 0; j < 2; j++) { //这个地方是写入了2个SHEET文件里面
        	 // 设置SHEET
            Sheet sheet = new Sheet(j, 0);
            sheet.setSheetName("测试sheet"+j);
            Table table;
            // 设置标题
            if(j == 0){
            	 table = new Table(1);
                 List<List<String>> titles = new ArrayList<List<String>>();
                 titles.add(Arrays.asList("用户ID"));
                 titles.add(Arrays.asList("名称"));
                 titles.add(Arrays.asList("年龄"));
                 titles.add(Arrays.asList("生日"));
                 table.setHead(titles);
            }else{
            	 table = new Table(2);
                 List<List<String>> titles = new ArrayList<List<String>>();
                 titles.add(Arrays.asList("用户ID1"));
                 titles.add(Arrays.asList("名称1"));
                 titles.add(Arrays.asList("年龄1"));
                 titles.add(Arrays.asList("生日1"));
                 titles.add(Arrays.asList("多个字段"));
                 table.setHead(titles);
            }
            // 查询数据导出即可 比如说一次性总共查询出1000条数据   模拟数据插入
            List<List<String>> userList = new ArrayList<List<String>>();
            for (int i = 0; i < 1000; i++) {
                userList.add(Arrays.asList("ID_" + i, "小谭" + i, String.valueOf(i), format.format(new Date())));
            }
            writer.write0(userList, sheet, table);
		}
        writer.finish();
        out.close();
    }
}
 

发布了98 篇原创文章 · 获赞 87 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/tanqingfu1/article/details/105245750