java-Excel导出中的坑
在Excel导出过程中,若遇到合并单元格样式只有第一行合并,而下面要合并的行没有边框显示。
一般问题出在将单元格样式设置与合并单元格放在同一个循环中导致。
以下为一个完整版的demo以供参考
定义边框样式方法:
package com.ccb.excel.export; import java.io.Serializable;
import java.net.URLEncoder; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor; public class ExportFileNameUtils implements Serializable {
public static HSSFCellStyle initColumnHeadStyle(HSSFWorkbook wb) {
HSSFCellStyle columnHeadStyle = wb.createCellStyle();
HSSFFont columnHeadFont = wb.createFont();
columnHeadFont.setFontName("宋体");
columnHeadFont.setFontHeightInPoints((short) 10);
columnHeadFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
columnHeadStyle.setFont(columnHeadFont);
columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
columnHeadStyle.setLocked(true);
columnHeadStyle.setWrapText(true);
columnHeadStyle.setLeftBorderColor(HSSFColor.BLACK.index);// 左边框的颜色
columnHeadStyle.setBorderLeft((short) 1);// 边框的大小
columnHeadStyle.setRightBorderColor(HSSFColor.BLACK.index);// 右边框的颜色
columnHeadStyle.setBorderRight((short) 1);// 边框的大小
columnHeadStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体
columnHeadStyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色
// 设置单元格的背景颜色(单元格的样式会覆盖列或行的样式)
columnHeadStyle.setFillForegroundColor(HSSFColor.WHITE.index);
return columnHeadStyle;
} public static HSSFCellStyle initColumnCenterstyle(HSSFWorkbook wb) {
HSSFFont font = wb.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short) 10);
HSSFCellStyle centerstyle = wb.createCellStyle();
centerstyle.setFont(font);
centerstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
centerstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
centerstyle.setWrapText(true);
centerstyle.setLeftBorderColor(HSSFColor.BLACK.index);
centerstyle.setBorderLeft((short) 1);
centerstyle.setRightBorderColor(HSSFColor.BLACK.index);
centerstyle.setBorderRight((short) 1);
centerstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体
centerstyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色.
centerstyle.setFillForegroundColor(HSSFColor.WHITE.index);// 设置单元格的背景颜色.
return centerstyle;
}
}
调用过程中步骤应为:
1、初始化带边框的表头样式
2、填充单元格数据
3、合并单元格
package com.ccb.excel.export; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
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; public class ExcelExport {
public static void main(String[] args) throws Exception {
HSSFWorkbook wb = new HSSFWorkbook();// 创建一个Excel文件
HSSFSheet sheet = wb.createSheet("银行存余额表(1)");// 创建一个Excel的Sheet
// 定义样式
HSSFCellStyle cellStyleCenter = ExportFileNameUtils.initColumnHeadStyle(wb);//表头样工
HSSFCellStyle cellStyleRight = ExportFileNameUtils.initColumnCenterstyle(wb);//单元格样式
HSSFCellStyle cellStyleLeft = ExportFileNameUtils.initColumnCenterstyle(wb);
cellStyleRight.setAlignment(HSSFCellStyle.ALIGN_RIGHT);//右对齐
cellStyleLeft.setAlignment(HSSFCellStyle.ALIGN_LEFT);//左对齐
// 设置列宽
sheet.setColumnWidth(0, 7200);
sheet.setColumnWidth(1, 5000);
sheet.setColumnWidth(2, 5000);
sheet.setColumnWidth(3, 5000);
sheet.setColumnWidth(4, 5000);
sheet.setColumnWidth(5, 5000);
try {
HSSFRow row = null;
HSSFCell cell = null;
// ---------------------------1.初始化带边框的表头------------------------------
for (int i = 0; i < 5; i++) {
row = sheet.createRow(i);
for (int j = 0; j <= 5; j++) {
cell = row.createCell(j);
cell.setCellStyle(cellStyleCenter);
}
}
// ---------------------------2.填充单元格数据------------------------------
cell = sheet.getRow(0).getCell(0);
cell.setCellValue(new HSSFRichTextString("银行存余额表"));
cell = sheet.getRow(1).getCell(0);
cell.setCellValue(new HSSFRichTextString("2018-01-31"));
cell = sheet.getRow(2).getCell(0);
cell.setCellValue(new HSSFRichTextString("开户行"));
cell = sheet.getRow(2).getCell(1);
cell.setCellValue(new HSSFRichTextString("活期"));
cell = sheet.getRow(2).getCell(3);
cell.setCellValue(new HSSFRichTextString("定期"));
cell = sheet.getRow(2).getCell(5);
cell.setCellValue(new HSSFRichTextString("存款合计"));
cell = sheet.getRow(3).getCell(1);
cell.setCellValue(new HSSFRichTextString(" "));
cell = sheet.getRow(3).getCell(4);
cell.setCellValue(new HSSFRichTextString("折合本位币合计"));
cell = sheet.getRow(4).getCell(1);
cell.setCellValue(new HSSFRichTextString("人民币"));
cell = sheet.getRow(4).getCell(2);
cell.setCellValue(new HSSFRichTextString("折合本位币合计")); // ---------------------------3.合并单元格------------------------------
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 5));// 开始行,结束行,开始列,结束列
sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 5));
sheet.addMergedRegion(new CellRangeAddress(2, 4, 0, 0));
sheet.addMergedRegion(new CellRangeAddress(2, 3, 1, 2));
sheet.addMergedRegion(new CellRangeAddress(2, 2, 3, 4));
sheet.addMergedRegion(new CellRangeAddress(3, 4, 4, 4));
sheet.addMergedRegion(new CellRangeAddress(2, 4, 5, 5));
FileOutputStream fileOut = new FileOutputStream("d:\\银行存款余额表.xls");
wb.write(fileOut);
fileOut.close();
} catch (Exception e) {
e.printStackTrace();
}
} }
java-Excel导出中的坑的更多相关文章
- Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...
- 自己写的java excel导出工具类
最近项目要用到excel导出功能,之前也写过类似的代码.因为这次项目中多次用到excel导出.这次长了记性整理了一下 分享给大伙 欢迎一起讨论 生成excel的主工具类: public class E ...
- java excel导出(基于注解)
小白,做日志只是为了方便自己查看,能帮到别人当然更好,不喜勿喷. 上代码 依赖: <dependency> <groupId>org.apache.poi</groupI ...
- java excel导出(表头合并,多行表头)
@RequestMapping(value="orderExcelList2") public void orderExcelList2forJava(Order order,Ht ...
- java excel导出
下面是jsp代码: <li class="btns"><input id="btnExport" class="btn btn-pr ...
- Java技术开发中的坑
1.(2014/05/28)struts2中使用eclipse自动获取getter和setter方法的坑 今天着实被eclipse坑了一把,平时遇到get和set方法时,我都是通过eclipse自动生 ...
- Excel导出中HttpServletResponse消息头参数设置
response.setCharacterEncoding("UTF-8"); //编码格式为UTF-8 response.setContentType("applica ...
- java-excel导出
java excel导出分为两种2003年的格式和2007年的格式. 2003年的xls一个sheet限制65536. 2007年的xlsx限制为1048576. jxl导入2003 gradle j ...
- java中Excel导出
转载:https://www.cnblogs.com/gudongcheng/p/8268909.html,稍加修改了 https://www.cnblogs.com/hanfeihanfei/p/7 ...
随机推荐
- 【Hadoop】Win7上搭建Hadoop开发环境,方法一
在Win7上,编写hadoop程序 操作系统:win7 hadoop版本:CDH3u6 1.下载安装JDK,以及Eclipse 2.新建JAVA Project 3.去cloudera网站下载hado ...
- 【转】java格式化输出 printf 例子
[转]java格式化输出 printf 例子 转自http://www.cnblogs.com/TankMa/archive/2011/08/20/2146913.html#undefined imp ...
- Personal idea
我的设想是在android上开发一款应用程序,整体上是一个指南针的样式,或许你可以称之为一个圆盘,在不同的场景下可以作为不同的功能,指南针,游戏转盘,数字转盘等等.界面可以在不同的情境下更换样式.
- Oracle嵌套表
一.介绍 1.定义 嵌套表是表中之表.一个嵌套表是某些行的集合,它在主表中表示为其中的一列.对主表中的每一条记录,嵌套表可以包含多个行.在某种意义上,它是在一个表中存储一对多关系的一种方法. ...
- ASP.NET 前台Javascript调用后台代码 / 后台调用前台Javascript
1:ASP.NET 前台Javascript调用后台代码 1.1:前台Javascript <script> function CallCs() { var str = "< ...
- 基于Ubuntu搭建GMS测试环境
一.版本信息: 系统版本:Ubuntu 18.04.2 LTS JDK版本: 1.8.0_171 SDK版本:android-sdk_r24.4.1-linux.tgz ADB版本:1.0.40 ap ...
- http、https 等 常用默认端口号
⑴. HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080⑵. SOCKS代理协议服务器常用端口号:1080⑶. FTP(文件传输)协议代理服务器常用端口号:21⑷. Tel ...
- shell脚本实现监控shell脚本的执行流程及变量的值
这篇文章主要介绍了shell脚本实现监控shell脚本的执行流程及变量的值本文使用shell完成对执行过程中条件语句中的变量的变化的监控和整个程序的执行流程的观察功能,需要的朋友可以参考下 很多时候, ...
- Linux USB驱动框架分析 【转】
转自:http://blog.chinaunix.net/uid-11848011-id-96188.html 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结 ...
- 01 Go 1.1 Release Notes
Go 1.1 Release Notes Introduction to Go 1.1 Changes to the language Integer division by zero Surroga ...