后端代码实现例子:
在这里我定义一个 content
我获取的数据库值就会从0开始对应
list是数据库调用数据的定义值
具体例子判断和日期格式定义成yyyy--mm-dd例子如:
@ResponseBody
@RequestMapping("/exportExcel")
public void export(HttpServletRequest request, HttpServletResponse response) throws Exception {
...
List<WorkerEntity> list = getWorkerService().getExportWorkers(weParam);
String title = "xxxx";
String[] Mytitle = {"姓名", "性别",''创建日期''};
String sheetName = "xxx档案";
int a = list.size();
String content[][] = new String[a][];
for (int i = 0; i < list.size(); i++) {
content[i] = new String[Mytitle.length];
content[i][0] = list.get(i).getChineseName();
content[i][1] = list.get(i).getSex() == 0 ? "男" : "女";
content[i][2] = String.valueOf(DateUtil.format(list.get(i).getCreateDate(), DatePattern.NORM_DATE_FORMATTER));
}
//创建HSSFWorkbook
HSSFWorkbook wb = ExportExcelUtil.getHSSFWorkbook(sheetName, Mytitle, title, content, null);
try {
String name = "xxxx.xls"; // 文件名
OutputStream os = response.getOutputStream(); // 取得输出流
response.reset(); // 清空输出流
response.setHeader("Content-Disposition", "attachment;filename=" + name + ";filename*=utf-8''"
+ URLEncoder.encode(name, "UTF-8")); // 设定输出文件头
response.setContentType("application/msexcel");// 定义输出类型
wb.write(os);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
注意:
1.ExportExcelUtil是一个导出的excel格式定义,例子:
<dependency>
<groupId>org.meteor</groupId>
<artifactId>meteor-mgr</artifactId>
<version>0.0.1.2-SNAPSHOT</version>
</dependency>
具体代码:
package org.meteor.mgr.utils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellRangeAddress;
@SuppressWarnings("deprecation")
public class ExportExcelUtil {
/**
* * 导出Excel
* @param sheetName sheet名称
* @param titleColumn 列标题
* @param title 标题
* @param values 表内容
* @param wb HSSFWorkbook对象
* @return
*/
public static HSSFWorkbook getHSSFWorkbook(String sheetName,String []titleColumn,String title,String [][]values, HSSFWorkbook wb){
// 第一步,创建一个HSSFWorkbook,对应一个Excel文件
if(wb == null){
wb = new HSSFWorkbook();
}
// 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet(sheetName);
//创建表名的样式
HSSFCellStyle tableNamestyle = wb.createCellStyle();
tableNamestyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
sheet.autoSizeColumn((short)0);
tableNamestyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
tableNamestyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
tableNamestyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
tableNamestyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
//设置字体
HSSFFont tableNamefont =wb.createFont();
tableNamefont.setFontHeightInPoints((short) 14); //字体高度
tableNamefont.setColor(HSSFFont.COLOR_NORMAL); //字体颜色
tableNamefont.setFontName("宋体"); //字体
tableNamefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //宽度
tableNamestyle.setFont(tableNamefont);
//创建第一行
HSSFRow row = sheet.createRow(0);
//设置合并单元格样式
setCellBorder(1,titleColumn.length-1,row,tableNamestyle);
//单元格合并
CellRangeAddress cra =new CellRangeAddress(0, 0, 0, titleColumn.length-1);
sheet.addMergedRegion(cra);
//声明列对象
HSSFCell cell = null;
cell=row.createCell(0);
cell.setCellValue(title);
/**设置单元格格式为文本格式*/
HSSFDataFormat format = wb.createDataFormat();
tableNamestyle.setDataFormat(format.getFormat("@"));
cell.setCellStyle(tableNamestyle);//设置单元格格式为"文本"
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
row = sheet.createRow(1);
// 第四步,创建单元格,并设置值表头 设置表头居中
HSSFCellStyle titlestyle = wb.createCellStyle();
titlestyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
sheet.autoSizeColumn((short)0);
//设置字体
HSSFFont font =wb.createFont();
font.setFontHeightInPoints((short) 9); //字体高度
font.setColor(HSSFFont.COLOR_NORMAL); //字体颜色
font.setFontName("宋体"); //字体
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //宽度
titlestyle.setFont(font);
titlestyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
titlestyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
titlestyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
titlestyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
//创建单元格样式
HSSFCellStyle cellstyle = wb.createCellStyle();
//设置字体
HSSFFont tableCountfont =wb.createFont();
tableCountfont.setFontHeightInPoints((short) 10); //字体高度
tableCountfont.setColor(HSSFFont.COLOR_NORMAL); //字体颜色
tableCountfont.setFontName("宋体"); //字体
tableCountfont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); //宽度
cellstyle.setFont(tableCountfont);
cellstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
cellstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
cellstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
cellstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
cellstyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
/**设置单元格格式为文本格式*/
HSSFDataFormat format1 = wb.createDataFormat();
cellstyle.setDataFormat(format1.getFormat("@"));
//创建标题
for(int i=0;i<titleColumn.length;i++){
cell = row.createCell(i);
cell.setCellValue(titleColumn[i]);
cell.setCellStyle(titlestyle);
}
//创建内容
for(int i=0;i<values.length;i++){
HSSFCell cellcell = null;
row = sheet.createRow(i + 2);
for(int j=0;j<values[i].length;j++){
//将内容按顺序赋给对应的列对象
cellcell=row.createCell(j);
cellcell.setCellValue(values[i][j]);
cellcell.setCellStyle(cellstyle);
cellcell.setCellType(HSSFCell.CELL_TYPE_STRING);
}
}
// 设置为根据内容自动调整列宽
for (int k = 0; k < values[0].length; k++) {
sheet.autoSizeColumn(k);
HSSFCellStyle cellstyle1 = wb.createCellStyle();
HSSFDataFormat format2 = wb.createDataFormat();
cellstyle1.setDataFormat(format2.getFormat("@"));
sheet.setDefaultColumnStyle(k, cellstyle1);
}
setSizeColumn(sheet, values[0].length);
return wb;
}
/**
* 自适应宽度(中文支持)
* @param sheet
* @param size
*/
public static void setSizeColumn(HSSFSheet sheet, int size) {
for (int columnNum = 0; columnNum < size; columnNum++) {
int columnWidth = sheet.getColumnWidth(columnNum) / 256;
for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
HSSFRow currentRow;
//当前行未被使用过
if (sheet.getRow(rowNum) == null) {
currentRow = sheet.createRow(rowNum);
} else {
currentRow = sheet.getRow(rowNum);
}
if (currentRow.getCell(columnNum) != null) {
HSSFCell currentCell = currentRow.getCell(columnNum);
if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
int length = currentCell.getStringCellValue().getBytes().length;
if (columnWidth < length) {
columnWidth = length;
}
}
}
}
sheet.setColumnWidth(columnNum, columnWidth * 256);
}
}
/**
* 合并单元格加边框 水平
* @param sheet
* @param region
* @param cs
* 参数说明:start和并的第二列,end为合并的最后一列,row就为当前行,style样式(里面有设置边框)
例如从0-10列合并: ExcelUtil.setCellBorder(2,10,row,style); 这样可以设置
*/
public static void setCellBorder(int start, int end, HSSFRow row, HSSFCellStyle style) {
for(int i=start;i<=end;i++){
HSSFCell cell = row.createCell(i);
cell.setCellValue("");
cell.setCellStyle(style);
}
}
}
2. Integer类型数据进行判断
往往数据库一些定义判断都是0和1代表好坏等等的判断
就比如性别0是男1是女,0是在职1是离职
content[i][1] = list.get(i).getSex() == 0 ? "男" : "女";
content[i][1] = list.get(i).getQuit()== 0 ? "在职" : "离职";
这样导出的excel就不是0和1这种数字而变成了汉字方便查看
3.日期格式设置
DateUtil是一个需要导入的包
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.12</version>
</dependency>
这里有一个时间工具类,具体查看jar包里的源码package cn.hutool.core.date.DateUtil;
这个例子:
content[i][1] = String.valueOf(DateUtil.format(list.get(i).getCreateDate(), DatePattern.NORM_DATE_FORMATTER));
注:把date类型转换成了String,设置导出时间类型为yyyy-MM-dd

这篇博客介绍了如何使用Java后端代码实现Excel导出,并进行了数据判断和日期格式设置。通过ExportExcelUtil工具类,结合Integer类型的数据判断(如性别、状态)和日期格式转换(如使用DateUtil格式化为'yyyy-MM-dd'),实现了更易读的Excel表格内容。
876

被折叠的 条评论
为什么被折叠?



