一、Excel依赖包POI
(1)Maven配置
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.7</version></dependency>
(2)jar下载地址http://poi.apache.org/download.html
二、Java代码实例
Excel工具代码
package com.mk.util;import com.mk.bean.LogInfo;
import org.apache.poi.hssf.usermodel.*;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.poi.ss.util.CellRangeAddress;public class Excels {public static byte[] export(String sheetName, String title, List<LogInfo> list, int start, int end) {if (list == null||start>end) {return null;}HSSFWorkbook workbook = new HSSFWorkbook(); //工作簿initWorkbook(workbook, sheetName, title, list,start,end);//先写到字节数组,在从字节数组读出 ByteArrayOutputStream os = new ByteArrayOutputStream();try {workbook.write(os);byte[] bytes = os.toByteArray();return bytes;} catch (IOException ex) {Logger.getLogger(Excels.class.getName()).log(Level.SEVERE, null, ex);} finally {try {os.close();} catch (IOException ex) {Logger.getLogger(Excels.class.getName()).log(Level.SEVERE, null, ex);}}return null;}private static final int MAX_ROWS = 65535;/*** 初始化工作簿* @param workbook 工作簿* @param sheetName 工作表名* @param title 标题* @param list 数据* @param start 起始索引,起始值为0* @param end 截止索引,为末尾索引+1*/private static void initWorkbook(HSSFWorkbook workbook, String sheetName, String title,List<LogInfo> list, int start, int end) {assert end - start <= MAX_ROWS - 2;HSSFSheet sheet = workbook.createSheet(sheetName); //工作表 initTitle(workbook, sheet, title, 0, 16, 800, 0, 0, 0, 2);// 属性样式 HSSFCellStyle attrCellStyle = createStyle(workbook, 10, true, HSSFFont.BOLDWEIGHT_BOLD);// 默认样式HSSFCellStyle defaultCellStyle = createStyle(workbook, 10, true, HSSFFont.BOLDWEIGHT_NORMAL);//属性行HSSFRow attrRow = sheet.createRow(1);final int baseFont=10;sheet.setColumnWidth(0, baseFont*400);sheet.setColumnWidth(1, baseFont*800);sheet.setColumnWidth(2, baseFont*1200);HSSFCell cell = attrRow.createCell(0);cell.setCellValue("索引");cell.setCellStyle(attrCellStyle);cell = attrRow.createCell(1);cell.setCellValue("时间");cell.setCellStyle(attrCellStyle);cell = attrRow.createCell(2);cell.setCellValue("信息");cell.setCellStyle(attrCellStyle);DateFormat dateFomater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");for (int i = 2; start < end; i++) {LogInfo logInfo = list.get(start++);HSSFRow row = sheet.createRow(i);//除开标题和属性行//索引cell = row.createCell(0);cell.setCellValue(logInfo.getIndex());cell.setCellStyle(defaultCellStyle);//时间cell = row.createCell(1);cell.setCellValue(dateFomater.format(logInfo.getTime()));cell.setCellStyle(defaultCellStyle);//信息cell = row.createCell(2);cell.setCellValue(logInfo.getInfo());cell.setCellStyle(defaultCellStyle);}}/*** 设置工作表标题** @param workbook 工作簿* @param sheet 工作表* @param title 标题* @param rowIndex 当前行* @param fontSize 字体* @param height 高度* @param firstRow 合并区域起始行* @param lastRow 合并区域末尾行* @param firstCol 合并区域起始列* @param lastCol 合并区域末尾列*/private static void initTitle(HSSFWorkbook workbook, HSSFSheet sheet,String title, int rowIndex, int fontSize, int height, int firstRow,int lastRow, int firstCol, int lastCol) {HSSFCellStyle titleCellStyle = createStyle(workbook, fontSize, true, HSSFFont.BOLDWEIGHT_BOLD);//标题行HSSFRow titleRow = sheet.createRow(0);titleRow.setHeight((short) height); //标题行高度HSSFCell titleCell = titleRow.createCell(rowIndex); //标题单元titleCell.setCellValue(title); //设置标题titleCell.setCellStyle(titleCellStyle);sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCol, lastCol));//指定合并区域 }private static HSSFCellStyle createStyle(HSSFWorkbook workbook, int fontSize, boolean wrapText, short boldweight) {// 标题字体HSSFFont font = workbook.createFont();font.setFontHeightInPoints((short) fontSize);// 字体大小font.setBoldweight(boldweight); //字体加粗//标题样式HSSFCellStyle cellStyle = workbook.createCellStyle();cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平中间对齐cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直中间对其cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); //顶边cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//底边cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); //左边cellStyle.setWrapText(wrapText); //自动换行cellStyle.setFont(font);//样式字体return cellStyle;}
}
日志类
package com.mk.bean;import java.util.Date;public class LogInfo {private int index;private Date time;private String info;public int getIndex() {return index;}public void setIndex(int index) {this.index = index;}public Date getTime() {return time;}public void setTime(Date time) {this.time = time;}public String getInfo() {return info;}public void setInfo(String info) {this.info = info;}
}
测试代码
package com.mk.testmaven;import com.mk.bean.LogInfo;
import com.mk.util.Excels;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;public class Test {public static void main(String[] args) {List<LogInfo> list=new ArrayList<>();LogInfo logInfo=new LogInfo();logInfo.setIndex(0);logInfo.setInfo("你好");logInfo.setTime(new Date(2018,9,12));list.add(logInfo );logInfo=new LogInfo();logInfo.setIndex(1);logInfo.setInfo("问你");logInfo.setTime(new Date(2018,9,15));list.add(logInfo );logInfo=new LogInfo();logInfo.setIndex(2);logInfo.setInfo("世界");logInfo.setTime(new Date(2018,9,17));list.add(logInfo );byte[] bs=Excels.export("1", "日志", list,0,list.size());try (FileOutputStream outputStream=new FileOutputStream("D:/log.xls")){outputStream.write(bs);outputStream.flush();} catch (Exception e) {}}
}