所需要的第三方jar包:jxl.jar
package test;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.Pattern;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
/**
* @author cyq
* 导出 excel
*/
public class ExcelExport {
public static void main(String[] args) {
List<String[]> list = new ArrayList<String[]>();
list.add(new String[] { "a", "b", "c" });
list.add(new String[] { "d", "e", "f" });
createExcel(list, new String[] { "ID", "名称", "时间" }, "G:\\",
String.valueOf(new Date().getTime()));
}
/**
* 生成Excel
* @param models 数据List<String[]>
* @param colNames 成Excel的实体列名
* @param tempPath 导出路径
* @param excelName 生成的Excel名
*/
public static void createExcel(List<String[]> models, String[] colNames,
String tempPath, String excelName) {
try {
OutputStream os = new FileOutputStream(tempPath + "\\" + excelName
+ ".xls");
WritableWorkbook workbook = Workbook.createWorkbook(os);
/*createSheet 传入的int型参数代表sheet号,0是第一页,1是第二页,依次类推,打开Excel表格在底端可以看到,编号最小的页在最左边。
如果在使用createSheet函数的时候没有注意编号问题,两次使用了同一个编号,比如两次创建编号为0的sheet,这时第二次创建的sheet会是第一页,但第一次创建的sheet并未被覆盖,而是向后移成为第二页,后面的页也都后移一页,有些像数组的插入。
另外如果使用了不连续的编号,比如依次创建了编号为0,1,2的sheet,接着创建了编号为4的sheet,这时最后创建的一个sheet的编号不会是4,而是会被设置为顺延的3,如果你执行getSheet(4),会报数组越界的错
*/
WritableSheet sheet = workbook.createSheet(excelName, 0);
// 设置标题
WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 17,
WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,
jxl.format.Colour.WHITE);
WritableCellFormat wcf_title = new WritableCellFormat(titleFont);
wcf_title.setBackground(Colour.TEAL, Pattern.SOLID);
wcf_title.setBorder(Border.ALL, BorderLineStyle.DOUBLE,
Colour.OCEAN_BLUE);
wcf_title.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcf_title.setAlignment(Alignment.CENTRE);
// 设置正文
WritableFont NormalFont = new WritableFont(WritableFont.TAHOMA, 11);
WritableCellFormat wcf_center = new WritableCellFormat(NormalFont);
wcf_center.setBorder(Border.ALL, BorderLineStyle.DOUBLE,
Colour.GRAY_25);
wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcf_center.setAlignment(Alignment.CENTRE);
wcf_center.setWrap(true); // 是否换行
sheet.addCell(new Label(0, 0, excelName, wcf_title));
sheet.mergeCells(0, 0, colNames.length, 0);
//设置列名
for (int i = 0; i < colNames.length; i++) {
sheet.setColumnView(i, colNames[i].length() * 5);
sheet.addCell(new Label(i, 1, colNames[i], wcf_center));
}
int rowId = 2;// 写入第几行 第一行为列头 数据从第二行开始写
//导入数据集
for (Object ssTopModel : models) {
int columnId = 0;// 写入第几列 第一列为自动计算的行号 数据从第二列开始写
// 获取该类 并获取自身方法
String[] strs = (String[]) ssTopModel;
for (int i = 0; i < strs.length; i++) {
try {
sheet.addCell(new Label(columnId, rowId, strs[i],
wcf_center));
} catch (Exception e) {
e.printStackTrace();
}
columnId++;
}
rowId++;
}
workbook.write();
workbook.close();
os.flush();
os.close();
} catch (WriteException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}