alibaba-easyexcel使用

  1. 工具類,設置好表頭樣式
/**============================================================
 * 修改記錄:
 * 日期                作者           內容
 * =============================================================
 * 2019年8月9日       AINY
 * ============================================================*/

package com.ainy.gofsix.common.utils;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import org.apache.poi.ss.usermodel.IndexedColors;

import com.alibaba.excel.metadata.Font;
import com.alibaba.excel.metadata.TableStyle;
import com.ainy.gofsix.common.constant.ExcelConstants;

/**
 * <p>
 * TODO Alibaba EasyExcel導出Excel工具類
 * </p>
 *
 * <p>
 * Copyright: 版權所有 (c) 2002 - 2008<br>
 * </p>
 *
 * @author AINY
 * @version 2019年8月9日
 */

public class AliExcelUtils {

	/**
	 * 表格樣式 TODO
	 * 
	 * @param
	 * @return TableStyle
	 */
	public static TableStyle createTableStyle() {
		TableStyle tableStyle = new TableStyle();
		// 設置表頭樣式
		Font headFont = new Font();
		// 字體是否加粗
		headFont.setBold(true);
		// 字體大小
		headFont.setFontHeightInPoints((short) 12);
		// 字體
		headFont.setFontName("楷體");
		tableStyle.setTableHeadFont(headFont);
		// 背景色
		tableStyle.setTableHeadBackGroundColor(IndexedColors.GREY_40_PERCENT);
		// 設置表格主體樣式
		Font contentFont = new Font();
		contentFont.setBold(true);
		contentFont.setFontHeightInPoints((short) 12);
		contentFont.setFontName("黑體");
		tableStyle.setTableContentFont(contentFont);
		tableStyle.setTableContentBackGroundColor(IndexedColors.WHITE);

		return tableStyle;
	}

	/**
	 * 用車企業查詢統計表頭設計
	 * 
	 * @param
	 * @return List<List<String>>
	 */
	public static List<List<String>> createUseVehicleCompanyHead() {
		// 模型上沒有註解,表頭數據動態傳入
		List<List<String>> head = new ArrayList<List<String>>();
		List<String> headCoulumn1 = new ArrayList<String>();

		head.add(getNormalHeadCoulumn(headCoulumn1, ExcelConstants.EXCEL_HEAD_USECOMPANY));
		List<String> headCoulumn01;
		List<String> headCoulumn02;
		List<String> headCoulumn03;
		for (int i = 1; i < 13; i++) {
			headCoulumn01 = new ArrayList<String>();
			headCoulumn02 = new ArrayList<String>();
			headCoulumn03 = new ArrayList<String>();
			headCoulumn01.add(i + "月");
			headCoulumn01.add(ExcelConstants.EXCEL_HEAD_USECOUNT);
			headCoulumn01.add(ExcelConstants.EXCEL_HEAD_USECOUNT);

			headCoulumn02.add(i + "月");
			headCoulumn02.add(ExcelConstants.EXCEL_HEAD_MONEY);
			headCoulumn02.add(ExcelConstants.EXCEL_HEAD_MONEY);

			headCoulumn03.add(i + "月");
			headCoulumn03.add(ExcelConstants.EXCEL_HEAD_OVERMONEY);
			headCoulumn03.add(ExcelConstants.EXCEL_HEAD_OVERMONEY);
			head.add(headCoulumn01);
			head.add(headCoulumn02);
			head.add(headCoulumn03);
		}
		head.add(getNormalHeadCoulumn(headCoulumn1, ExcelConstants.EXCEL_HEAD_TOTALUSECOUNT));
		head.add(getNormalHeadCoulumn(headCoulumn1, ExcelConstants.EXCEL_HEAD_MONEY));
		return head;
	}

	/**
	 * 出租車公司查詢統計表頭設計
	 * 
	 * @param
	 * @return List<List<String>>
	 */
	public static List<List<String>> createRentVehicleCompanyHead(Date startDate, Date endDate) {
		long daysBetween = (endDate.getTime() - startDate.getTime() + 1000000) / (60 * 60 * 24 * 1000) + 1;
		Calendar calendar = new GregorianCalendar();
		calendar.setTime(startDate);
		calendar.add(calendar.DATE, 1); // 把日期往後增加一天,整數 往後推,負數往前移動
		startDate = calendar.getTime(); // 這個時間就是日期往後推一天的結果
		// 模型上沒有註解,表頭數據動態傳入
		List<List<String>> head = new ArrayList<List<String>>();
		List<String> headCoulumn1 = new ArrayList<String>();
		head.add(getNormalHeadCoulumn(headCoulumn1, ExcelConstants.EXCEL_HEAD_RENTCOMPANY));
		List<String> headCoulumn01;
		List<String> headCoulumn02;
		for (int i = 0; i < daysBetween; i++) {
			headCoulumn01 = new ArrayList<String>();
			headCoulumn02 = new ArrayList<String>();
			calendar.add(calendar.DATE, i);

			headCoulumn01.add(DateUtils.dateTime(calendar.getTime()));
			headCoulumn01.add(ExcelConstants.EXCEL_HEAD_USECOUNT);
			headCoulumn01.add(ExcelConstants.EXCEL_HEAD_USECOUNT);

			headCoulumn02.add(DateUtils.dateTime(calendar.getTime()));
			headCoulumn02.add(ExcelConstants.EXCEL_HEAD_MONEY);
			headCoulumn02.add(ExcelConstants.EXCEL_HEAD_MONEY);
			head.add(headCoulumn01);
			head.add(headCoulumn02);
		}
		head.add(getNormalHeadCoulumn(headCoulumn1, ExcelConstants.EXCEL_HEAD_TOTAL_VEHICLE_NUM));
		head.add(getNormalHeadCoulumn(headCoulumn1, ExcelConstants.EXCEL_HEAD_TOTAL_INCOME));
		return head;
	}

	/**
	 * 設置普通表頭
	 * 
	 * @param
	 * @return List<String>
	 */
	private static List<String> getNormalHeadCoulumn(List<String> headCoulumn1, String excelHeadCompany) {
		headCoulumn1 = new ArrayList<>();
		for (int i = 0; i < 3; i++) {
			headCoulumn1.add(excelHeadCompany);
		}
		return headCoulumn1;

	}

}

  1. 插入記錄,生成excel文件
public void getAliExcel1(Context ctx, HttpServletRequest request, HttpServletResponse response) throws IOException {
		/// String fileName = new String(("用車企業查詢統計 " + new
		/// SimpleDateFormat("yyyy-MM-dd").format(new Date()))
		/// .getBytes(), "UTF-8");
		String fileName = new String(("出租車公司查詢統計 ").getBytes("UTF-8"), "ISO8859-1");
		ServletOutputStream out = response.getOutputStream();
		response.setContentType("multipart/form-data");
		response.setCharacterEncoding("utf-8");
		response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
		ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX, true);

		Table table1 = new Table(1);
		table1.setTableStyle(AliExcelUtils.createTableStyle());
		// 根據參數判斷是用車企業查詢統計還是出租車公司查詢統計
		table1.setHead(AliExcelUtils.createRentVehicleCompanyHead(null, null));
		Sheet sheet1 = new Sheet(1, 0);
		sheet1.setSheetName("第一個sheet");
		/// writer.write1(rows, sheet1,table1);
		writer.write1(getUseCompanyList(ctx), sheet1, table1);

		writer.finish();
		out.flush();

	}
  1. 模擬數據
	/**
	 * 用車企業查詢統計
	 * 
	 * @param
	 * @return List<List<Object>>
	 */
	private List<List<Object>> getUseCompanyList(Context ctx) {
		List<List<Object>> rows = new ArrayList<>();
		for (int i = 0; i < 100; i++) {
			List<Object> row = new ArrayList<>();
			row.add("String" + i);
			row.add(Long.valueOf(56456456L + i));
			rows.add(row);
		}
		return rows;
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章