importjava.io.File;importjava.io.FileOutputStream;importjava.util.ArrayList;importjava.util.List;importorg.apache.poi.hssf.util.HSSFColor;importorg.apache.poi.ss.usermodel.CellStyle;importorg.apache.poi.ss.usermodel.Font;importorg.apache.poi.ss.usermodel.IndexedColors;importorg.apache.poi.xssf.usermodel.XSSFCell;importorg.apache.poi.xssf.usermodel.XSSFCellStyle;importorg.apache.poi.xssf.usermodel.XSSFFont;importorg.apache.poi.xssf.usermodel.XSSFRow;importorg.apache.poi.xssf.usermodel.XSSFSheet;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;public classDemo {public static voidmain(String[] args) {//文件内容
List rows = new ArrayList();
rows.add(new String[] { "编号", "姓名", "成绩"});
rows.add(new Object[] { 1001, "张三", 87.5F});
rows.add(new Object[] { 1002, "李四", 99.5F});
rows.add(new Object[] { 1003, "王五", null});
rows.add(new Object[] { 1004, "小六", 59F });//文件路径
String folderPath = "E:\\tmp";//文件名称
String fileName = "学生分数";//生成文件
newDemo().createExcelFile(rows, folderPath, fileName);
}/*** 根据[文件内容&文件路径&文件名称],生成一个excel文件*/
private void createExcelFile(Listrows, String folderPath, String fileName) {try{//创建一个Workbook
XSSFWorkbook wb = newXSSFWorkbook();//创建一个Sheet
XSSFSheet sheet =wb.createSheet(fileName);//样式1:设置列宽
sheet.setColumnWidth(0, 2000); //第一列的宽度为2000
sheet.setColumnWidth(1, 3000); //第二列的宽度为3000//样式1:设置单元格背景
CellStyle titleStyle =wb.createCellStyle();
titleStyle.setFillForegroundColor(IndexedColors.SKY_BLUE.getIndex());
titleStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);//样式1:设置单元格边框
titleStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); //下边框
titleStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);//左边框
titleStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);//上边框
titleStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);//右边框//样式1:设置单元格字体
Font font =wb.createFont();//font.setColor((short) 42);//设置字体颜色
font.setColor(HSSFColor.GREEN.index); //XSSFColor中未找到颜色和short数值的映射,使用HSSFColor来定位颜色的short值
font.setFontName("黑体"); //设置字体
font.setFontHeightInPoints((short) 12);//设置字体大小
font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);//粗体显示
titleStyle.setFont(font);//样式1:设置单元格居中
titleStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);//样式2:设置单元格居中
CellStyle contentStyle =wb.createCellStyle();
contentStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);//遍历输出每行
for (int i = 0; i < rows.size(); i++) {//创建一个row
XSSFRow row =sheet.createRow(i);//每一行的数据
Object[] rowData =rows.get(i);//遍历生成每个单元格
for (int j = 0; j < rowData.length; j++) {//创建一个cell
XSSFCell cell =row.createCell(j);//样式:设置单元格样式
if (i == 0) {
cell.setCellStyle(titleStyle);//使用样式1
} else{
cell.setCellStyle(contentStyle);//使用样式2
}//如果为空,就不做设值处理
if (null ==rowData[j]) {continue;
}//设值处理:假设只有四种类型的数据,如果还有其他类型,根据需要,做格式转换//String类型数值
if (rowData[j].getClass() == String.class) {
cell.setCellValue((String) rowData[j]);
}//double类型数值
else if (rowData[j].getClass() == double.class || rowData[j].getClass() == Double.class) {
cell.setCellValue((Double) rowData[j]);
}//float类型数值
else if (rowData[j].getClass() == float.class || rowData[j].getClass() == Float.class) {
cell.setCellValue((Float) rowData[j]);
}//integer类型数值
else if (rowData[j].getClass() == int.class || rowData[j].getClass() == Integer.class) {
cell.setCellValue((Integer) rowData[j]);
}
}
}//文件路径
String filePath = folderPath + File.separator + fileName + ".xls";//含文件名的全路径,如果是2007及以后的版本,后缀可用.xlsx,向前兼容
File file = newFile(filePath);//如果父目录不存在,创建父目录
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}//如果已存在,删除旧文件
if(file.exists()) {
file.delete();
}//将excel内容写入到文件当中
file.createNewFile();
FileOutputStream fileOut= newFileOutputStream(file);
wb.write(fileOut);
fileOut.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}