如何用Apache POI *** 作Excel文件

如何用Apache POI *** 作Excel文件,第1张

controller

@RequestMapping("assign2/downloadAssignWayConfigHistory.do")

public void downloadAssignWayConfigHistory(HttpServletResponse response,

@RequestParam(value = "collectName",required = false) String collectName,

@RequestParam(value = "modifyStartTime",required = false) String modifyStartTime,

@RequestParam(value = "modifyEndTime",required = false) String modifyEndTime){

String fileName = "下载清单"

response.setContentType("application/binarycharset=UTF-8")

try{

ServletOutputStream out=response.getOutputStream()

try {

//设置文件头:最后一个参数是设置下载文件名

response.setHeader("Content-Disposition", "attachmentfileName=" + URLEncoder.encode(fileName+".xls", "UTF-8"))

} catch (UnsupportedEncodingException e) {

e.printStackTrace()

}

String[] excleTitles = null//Excel第一行标题

ArrayList<Map<String,Object>> excelDatas = new ArrayList<Map<String,Object>>()//Excel数据

excleTitles = new String[] { "标题1", "标题2", "标题3", "标题4", "标题5","标题6", "标题7", "标题8", "标题9", "标题10","标题11", "标题12"}

//获取数据

HashMap<String, Object> params = new HashMap<String, Object>()

if (StringUtils.isNotBlank(collectName)) {

params.put("collectName", collectName)

}

if (StringUtils.isNotBlank(modifyStartTime)) {

params.put("modifyStartTime", modifyStartTime)

}

if (StringUtils.isNotBlank(modifyEndTime)) {

params.put("modifyEndTime", modifyEndTime)

}

Map<String, Object> assignCaseWayHistory = collectCenterAssignSettingService.getAssignCaseWayHistory(params)

excelDatas= (ArrayList) assignCaseWayHistory.get("rows")

//导出Excel

collectCenterAssignSettingService.exportAssignCaseWayHistory(excleTitles, excelDatas, out)      

} catch(Exception e){

e.printStackTrace()

}

}

service

public void exportAssignCaseWayHistory(String[] exceltitles,

ArrayList<Map<String, Object>> excelDatas, OutputStream out) {

try{

// 第一步,创建一个workbook,对应一个Excel文件

HSSFWorkbook workbook = new HSSFWorkbook()

// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet

HSSFSheet hssfSheet = workbook.createSheet("sheet1")

// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short

HSSFRow row = hssfSheet.createRow(0)

//不带背景颜色居中的cellStyle

HSSFCellStyle hssfCellStyle = workbook.createCellStyle()

//居中

hssfCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER)

hssfCellStyle.setVerticalAlignment(hssfCellStyle.VERTICAL_CENTER)

//带背景和字体颜色并且居中的cellStyle

HSSFCellStyle hssfCellStyleWithBackgroundColor = workbook.createCellStyle()

//居中

hssfCellStyleWithBackgroundColor.setAlignment(HSSFCellStyle.ALIGN_CENTER)

hssfCellStyleWithBackgroundColor.setVerticalAlignment(hssfCellStyle.VERTICAL_CENTER)

//背景

hssfCellStyleWithBackgroundColor.setFillForegroundColor(IndexedColors.YELLOW.getIndex())

hssfCellStyleWithBackgroundColor.setFillPattern(hssfCellStyle.SOLID_FOREGROUND)

//字体

HSSFFont font = workbook.createFont()

font.setColor(HSSFColor.RED.index)

hssfCellStyleWithBackgroundColor.setFont(font)

HSSFCell hssfCell = null

for (int i = 0 i < exceltitles.length i++) {

hssfCell = row.createCell(i)//列索引从0开始

hssfCell.setCellValue(exceltitles[i])//列名1

hssfCell.setCellStyle(hssfCellStyle)//列居中显示

//设置列宽

if (i == 1 || i == 6 || i == 7) {

hssfSheet.setColumnWidth(i, 5000)

}else {

hssfSheet.setColumnWidth(i, 3000)

}

}

// 第五步,写入实体数据           

for (int i = 0 i < excelDatas.size() i++) {

row = hssfSheet.createRow(2*i+1) //奇数行       

Map<String, Object> excelData = excelDatas.get(i)

// 第六步,创建单元格,并设置值

String updateBy = (String) excelData.get("updateBy")

String updateDate = (String) excelData.get("updateDate")

String region = (String) excelData.get("region")

String branch = (String) excelData.get("branch")

String center = (String) excelData.get("center")

String dept = (String) excelData.get("dept")

String assignMode = (String) excelData.get("assignMode")

String newAssignMode = (String) excelData.get("newAssignMode")

String turnableDimension = (String) excelData.get("turnableDimension")

String newTurnableDimension = (String) excelData.get("newTurnableDimension")

String M0 = (String) excelData.get("M0")

String M1 = (String) excelData.get("M1")

String M2 = (String) excelData.get("M2")

String M3 = (String) excelData.get("M3")

String newM0 = (String) excelData.get("newM0")

String newM1 = (String) excelData.get("newM1")

String newM2 = (String) excelData.get("newM2")

String newM3 = (String) excelData.get("newM3")

HSSFCell cell0 = row.createCell(0)

cell0.setCellStyle(hssfCellStyle)

cell0.setCellValue(updateBy)

HSSFCell cell1 = row.createCell(1)

cell1.setCellStyle(hssfCellStyle)

cell1.setCellValue(updateDate)

HSSFCell cell2 = row.createCell(2)

cell2.setCellStyle(hssfCellStyle)

cell2.setCellValue(region)

HSSFCell cell3 = row.createCell(3)

cell3.setCellStyle(hssfCellStyle)

cell3.setCellValue(branch)

HSSFCell cell4 = row.createCell(4)

cell4.setCellStyle(hssfCellStyle)

cell4.setCellValue(center)

HSSFCell cell5 = row.createCell(5)

cell5.setCellStyle(hssfCellStyle)

cell5.setCellValue(dept)

HSSFCell cell6 = row.createCell(6)

cell6.setCellStyle(hssfCellStyle)

cell6.setCellValue(assignMode.equals("0")?"模式1":"模式2")

if ("BRANCH".equals(turnableDimension)) {

turnableDimension = "分部"

} else if ("CENTER".equals(turnableDimension)) {

turnableDimension = "中心"

} else if ("DEPT".equals(turnableDimension)) {

turnableDimension = "部"

}

HSSFCell cell7 = row.createCell(7)

cell7.setCellStyle(hssfCellStyle)

cell7.setCellValue(turnableDimension)

HSSFCell cell8 = row.createCell(8)

cell8.setCellStyle(hssfCellStyle)

cell8.setCellValue(M0.equalsIgnoreCase("Y")?"案2":"案2")

HSSFCell cell9 = row.createCell(9)

cell9.setCellStyle(hssfCellStyle)

cell9.setCellValue(M1.equalsIgnoreCase("Y")?"案1":"案2")

HSSFCell cell10 = row.createCell(10)

cell10.setCellStyle(hssfCellStyle)

cell10.setCellValue(M2.equalsIgnoreCase("Y")?"案1":"案2")

HSSFCell cell11 = row.createCell(11)

cell11.setCellStyle(hssfCellStyle)

cell11.setCellValue(M3.equalsIgnoreCase("Y")?"案1":"案2")

row = hssfSheet.createRow(2*i+2) //偶数行 

HSSFCell newCell6 = row.createCell(6)

newCell6.setCellValue(newAssignMode.equals("0")?"模式1":"模式2")//设置值

if (!newAssignMode.equals(assignMode)){//设置背景色

newCell6.setCellStyle(hssfCellStyleWithBackgroundColor)

}else {

newCell6.setCellStyle(hssfCellStyle)

}

if ("BRANCH".equals(newTurnableDimension)) {

newTurnableDimension = "haha"

} else if ("CENTER".equals(newTurnableDimension)) {

newTurnableDimension = "hehe"

} else if ("DEPT".equals(newTurnableDimension)) {

newTurnableDimension = "hiahia"

}

HSSFCell newCell7 = row.createCell(7)

newCell7.setCellValue(newTurnableDimension)

if (!newTurnableDimension.equals(turnableDimension)){//设置背景色

newCell7.setCellStyle(hssfCellStyleWithBackgroundColor)

}else {

newCell7.setCellStyle(hssfCellStyle)

}

HSSFCell newCell8 = row.createCell(8)

newCell8.setCellValue(newM0.equalsIgnoreCase("Y")?"案1":"案2")

if (!newM0.equals(M0)){//设置背景色

newCell8.setCellStyle(hssfCellStyleWithBackgroundColor)

}else {

newCell8.setCellStyle(hssfCellStyle)

}

HSSFCell newCell9 = row.createCell(9)

newCell9.setCellValue(newM1.equalsIgnoreCase("Y")?"案1":"案2")

if (!newM1.equals(M1)){//设置背景色

newCell9.setCellStyle(hssfCellStyleWithBackgroundColor)

}else {

newCell9.setCellStyle(hssfCellStyle)

}

HSSFCell newCell10 = row.createCell(10)

newCell10.setCellValue(newM2.equalsIgnoreCase("Y")?"案1":"案2")

if (!newM2.equals(M2)){//设置背景色

newCell10.setCellStyle(hssfCellStyleWithBackgroundColor)

}else {

newCell10.setCellStyle(hssfCellStyle)

}

HSSFCell newCell11 = row.createCell(11)

newCell11.setCellValue(newM3.equalsIgnoreCase("Y")?"案1":"案2")

if (!newM3.equals(M3)){//设置背景色

newCell11.setCellStyle(hssfCellStyleWithBackgroundColor)

}else {

newCell11.setCellStyle(hssfCellStyle)

}

//合并单元格

for (int j = 0 j < 6 j++){

CellRangeAddress cellRangeAddress = new CellRangeAddress(2*i+1, 2*i+2, j, j)

hssfSheet.addMergedRegion(cellRangeAddress)

}

}

// 第七步,将文件输出到客户端浏览器

try {

workbook.write(out)

out.flush()

out.close()

} catch (Exception e) {

e.printStackTrace()

}

}catch(Exception e){

e.printStackTrace()

}

}

HSSFFont font = (HSSFFont) (cell.getCellStyle().getFont(

workbook))

//设置字体高度的两个函数

font.setFontHeight()

font.setFontHeightInPoints()

Excel中水印效果实现探讨一文对水印的添加描述比较详细(http://hi.baidu.com/daxiongmao_adi/blog/item/d42c50b40cea49798bd4b20d.html),我取其中的第二种方法,设置背景图片,以完成水印效果。具体解决思路是:制作一个有水印Excel模版,所有生成的excel文件均以此模块为底,完成水印的复制添加效果。

查阅原系统代码,在Excel导出时采用jxl组件,而jxl的API对excel文件的 *** 作分可读、可写的 *** 作权限,不利于复制一个模版,在模板中做新插入内容的添加。于是修改为POI组件进行处理。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11472223.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存