导出excel 的方法及示例

时间:2023-03-09 13:27:39
导出excel 的方法及示例

一、基本知识

1.Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

2. HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。

3.POI 文档结构类

     HSSFWorkbook excel文档对象

HSSFSheet excel的sheet HSSFRow excel的行

HSSFCell excel的单元格 HSSFFont excel字体

HSSFName 名称 HSSFDataFormat 日期格式

HSSFHeader sheet头

HSSFFooter sheet尾

HSSFCellStyle cell样式

HSSFDateUtil 日期

HSSFPrintSetup 打印

HSSFErrorConstants 错误信息表

二、使用逻辑:

1.前端页面发起请求

2.控制器接收,并调用sql 语句查询需要导出的条件

3.调用导出excel模块工具类

1.页面请求

<script type="text/javascript">
$(function(){
//导出数据执行方法
$("#btn_print").click(function() {
location.href = "../baseExcelExport/export"
});
})
</script>

2.调用控制器

public void getExportFile(RedirectAttributes redirectAttributes,HttpServletResponse resp){

        List<BaseAssetsEquipment> list = baseAssestsEquipmentService.getExcelList();

         Map<String,String> titleMap = new LinkedHashMap<String,String>();
titleMap.put("paymentNo", "设备编号");
titleMap.put("customerNo", "设备名称"); String sheetName = "标题名";
ExportExcelUtils.excelExport(list, titleMap, sheetName, response);
}

3.导出工具类

public class ExportExcelUtils {

    /***
* 构造方法
*/
private ExportExcelUtils() { } /***
* 工作簿
*/
private static HSSFWorkbook workbook; /***
* sheet
*/
private static HSSFSheet sheet;
/***
* 标题行开始位置
*/
private static final int TITLE_START_POSITION = 0; /***
* 时间行开始位置
*/
private static final int DATEHEAD_START_POSITION = 1; /***
* 表头行开始位置
*/
private static final int HEAD_START_POSITION = 2; /***
* 文本行开始位置
*/
private static final int CONTENT_START_POSITION = 3; /**
*
* @param dataList
* 对象集合
* @param titleMap
* 表头信息(对象属性名称->要显示的标题值)[按顺序添加]
* @param sheetName
* sheet名称和表头值
*/
public static void excelExport(List<?> dataList,Map<String, String> titleMap, String sheetName,HttpServletResponse resp) { try {
String fileName = sheetName+".xls";
fileName = URLEncoder.encode(fileName, "UTF-8");
resp.addHeader("Content-Disposition", "attachment;filename=" + fileName);
// 初始化workbook
initHSSFWorkbook(sheetName);
// 标题行
createTitleRow(titleMap, sheetName);
// 时间行
createDateHeadRow(titleMap);
// 表头行
createHeadRow(titleMap);
// 文本行
createContentRow(dataList, titleMap);
// 设置自动伸缩
// autoSizeColumn(titleMap.size());
OutputStream out = resp.getOutputStream();
workbook.write(out);
out.close();
} catch (IOException e) {
e.printStackTrace();
} } /***
*
* @param sheetName
* sheetName
*/
private static void initHSSFWorkbook(String sheetName) {
workbook = new HSSFWorkbook();
sheet = workbook.createSheet(sheetName);
} /**
* 生成标题(第零行创建)
*
* @param titleMap
* 对象属性名称->表头显示名称
* @param sheetName
* sheet名称
*/
private static void createTitleRow(Map<String, String> titleMap,
String sheetName) {
CellRangeAddress titleRange = new CellRangeAddress(0, 0, 0,
titleMap.size() - 1);
sheet.addMergedRegion(titleRange);
HSSFRow titleRow = sheet.createRow(TITLE_START_POSITION);
HSSFCell titleCell = titleRow.createCell(0);
titleCell.setCellValue(sheetName);
} /**
* 创建时间行(第一行创建)
*
* @param titleMap
* 对象属性名称->表头显示名称
*/
private static void createDateHeadRow(Map<String, String> titleMap) {
CellRangeAddress dateRange = new CellRangeAddress(1, 1, 0,
titleMap.size() - 1);
sheet.addMergedRegion(dateRange);
HSSFRow dateRow = sheet.createRow(DATEHEAD_START_POSITION);
HSSFCell dateCell = dateRow.createCell(0);
dateCell.setCellValue(new SimpleDateFormat("yyyy年MM月dd日")
.format(new Date()));
} /**
* 创建表头行(第二行创建)
*
* @param titleMap
* 对象属性名称->表头显示名称
*/
private static void createHeadRow(Map<String, String> titleMap) {
// 第1行创建
HSSFRow headRow = sheet.createRow(HEAD_START_POSITION);
int i = 0;
for (String entry : titleMap.keySet()) {
HSSFCell headCell = headRow.createCell(i);
headCell.setCellValue(titleMap.get(entry));
i++;
}
} /**
*
* @param dataList
* 对象数据集合
* @param titleMap
* 表头信息
*/
private static void createContentRow(List<?> dataList,Map<String, String> titleMap) {
try {
int i = 0;
for (Object obj : dataList) {
HSSFRow textRow = sheet.createRow(CONTENT_START_POSITION + i);
int j = 0;
for (String entry : titleMap.keySet()) { String method = "get" + entry.substring(0, 1).toUpperCase()+ entry.substring(1); Method m = obj.getClass().getMethod(method, null); String value = ""; if (m.invoke(obj, null)!=null) { value = m.invoke(obj, null).toString(); if( m.getReturnType().toString().contains("Date")){
value = DateUtils.getStringByDatefindStr(value,"EEE MMM dd HH:mm:ss Z yyyy","yyyy-MM-dd hh:mm:ss");
}
} HSSFCell textcell = textRow.createCell(j);
textcell.setCellValue(value);
j++;
}
i++;
} } catch (Exception e) {
e.printStackTrace();
}
} /**
* 自动伸缩列(如非必要,请勿打开此方法,耗内存)
*
* @param size
* 列数
*/
private static void autoSizeColumn(Integer size) {
for (int j = 0; j < size; j++) {
sheet.autoSizeColumn(j);
}
} }

完美。

欢迎关注:一只阿木木