POI进行跨行需要用到对象HSSFSheet对象,现在就当我们程序已经定义了一个HSSFSheet对象sheet。
跨第1行第1个到第2个单元格的操作为
sheet.addMergedRegion(new Region(0,(short)0,0,(short)1));
跨第1行第1个到第2行第1个单元格的操作为
sheet.addMergedRegion(new Region(0,(short)0,1,(short)0));
重点注意事项:
1.单元格CELL和ROW对象下标都是从0开始的。
2.单元格合并时Region(1,2,3,4)第1个值的行号必须要比3位置的行号小,如果大于3就不能正常合并单元格
3.合并单元格的时候要合并的单单元格必须先创建,这样方便后面再次获取这个单元格来填充数据,主要就是因为合并时不能由后向前进行合并引起的。
- import java.io.IOException;
- import org.apache.poi.hssf.usermodel.HSSFCell;
- import org.apache.poi.hssf.usermodel.HSSFCellStyle;
- 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.Region;
- public class ExcelTest {
- /**
- * @param args
- */
- public static void main(String[] args) throws IOException {
- try {
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet sheet = wb.createSheet("new sheet");
- HSSFCellStyle style = wb.createCellStyle(); // 样式对象
- style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直
- style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平
- HSSFRow row = sheet.createRow((short) 0);
- HSSFRow row2 = sheet.createRow((short) 1);
- sheet.addMergedRegion(new Region(0, (short) 0, 1, (short) 0));
- HSSFCell ce = row.createCell((short) 0);
- ce.setEncoding(HSSFCell.ENCODING_UTF_16);// 中文处理
- ce.setCellValue("项目\\日期"); // 表格的第一行第一列显示的数据
- ce.setCellStyle(style); // 样式,居中
- int num = 0;
- for (int i = 0; i < 9; i++) { // 循环9次,每一次都要跨单元格显示
- // 计算从那个单元格跨到那一格
- int celln = 0;
- int celle = 0;
- if (i == 0) {
- celln = 0;
- celle = 1;
- } else {
- celln = (i * 2);
- celle = (i * 2 + 1);
- }
- // 单元格合并
- // 四个参数分别是:起始行,起始列,结束行,结束列
- sheet.addMergedRegion(new Region(0, (short) (celln + 1), 0,
- (short) (celle + 1)));
- HSSFCell cell = row.createCell((short) (celln + 1));
- cell.setCellValue("merging" + i); // 跨单元格显示的数据
- cell.setCellStyle(style); // 样式
- // 不跨单元格显示的数据,如:分两行,上一行分别两格为一格,下一行就为两格,“数量”,“金额”
- HSSFCell cell1 = row2.createCell((short) celle);
- HSSFCell cell2 = row2.createCell((short) (celle + 1));
- cell1.setEncoding(HSSFCell.ENCODING_UTF_16);
- cell1.setCellValue("数量");
- cell1.setCellStyle(style);
- cell2.setEncoding(HSSFCell.ENCODING_UTF_16);
- cell2.setCellValue("金额");
- cell2.setCellStyle(style);
- num++;
- }
- // 在后面加上合计百分比
- // 合计 在最后加上,还要跨一个单元格
- sheet.addMergedRegion(new Region(0, (short) (2 * num + 1), 0,
- (short) (2 * num + 2)));
- HSSFCell cell = row.createCell((short) (2 * num + 1));
- cell.setEncoding(HSSFCell.ENCODING_UTF_16);
- cell.setCellValue("合计");
- cell.setCellStyle(style);
- HSSFCell cell1 = row2.createCell((short) (2 * num + 1));
- HSSFCell cell2 = row2.createCell((short) (2 * num + 2));
- cell1.setEncoding(HSSFCell.ENCODING_UTF_16);
- cell1.setCellValue("数量");
- cell1.setCellStyle(style);
- cell2.setEncoding(HSSFCell.ENCODING_UTF_16);
- cell2.setCellValue("金额");
- cell2.setCellStyle(style);
- // 百分比 同上
- sheet.addMergedRegion(new Region(0, (short) (2 * num + 3), 0,
- (short) (2 * num + 4)));
- HSSFCell cellb = row.createCell((short) (2 * num + 3));
- cellb.setEncoding(HSSFCell.ENCODING_UTF_16);
- cellb.setCellValue("百分比");
- cellb.setCellStyle(style);
- HSSFCell cellb1 = row2.createCell((short) (2 * num + 3));
- HSSFCell cellb2 = row2.createCell((short) (2 * num + 4));
- cellb1.setEncoding(HSSFCell.ENCODING_UTF_16);
- cellb1.setCellValue("数量");
- cellb1.setCellStyle(style);
- cellb2.setEncoding(HSSFCell.ENCODING_UTF_16);
- cellb2.setCellValue("金额");
- cellb2.setCellStyle(style);
- /***这里是问题的关键,将这个工作簿写入到一个流中就可以输出相应的名字,这里需要写路径就ok了。
- FileOutputStream fileOut = new FileOutputStream("workbook.xls");
- wb.write(fileOut);
- fileOut.close();
- **/
- /**第二种是输出到也面中的excel名称
- * pName="栏目统计表";
- response.reset();
- response.setContentType("application/x-msdownload");
- response.setHeader("Content-Disposition","attachment; filename="+new String(pName.getBytes("gb2312"),"ISO-8859-1")+".xls");
- ServletOutputStream outStream=null;
- try{
- outStream = response.getOutputStream();
- wb.write(outStream);
- }catch(Exception e)
- {
- e.printStackTrace();
- }finally{
- outStream.close();
- }
- * */
- System.out.print("OK");
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- }
相关推荐
主要给大家介绍了关于java实现合并单元格的同时并导出excel的相关资料,文中先进行了简单的介绍,之后给出了详细的示例代码,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
【JAVA】easypoi根据Excel模板导出 循环遍历合并单元格处理
easyuiPoi 通过模板导出Excel、支持纵向合并单元格(合并重复内容)。压缩包包含公共工具类、示例模板、调用截图。
POI导出Excel工具类,自动设置标题 列名 文件名,可插入图片,合并单元格
poi导入/导出Excel表格,合并单元格的读取和设置
利用poi进行excel相同内容合并单元格,只摘要了传入部分功能,请关注addMergedRegion方法
POI操作Excel 合并单元格 边框问题解决方法,这个方法是我亲自测试,并运用于项目中的,可以放心使用,还一并写出了很多注释,其中有写poi的bug的解决方法
easyui structs java环境下多列单元格合并及完美导出excel,合并采用递归方式,例如第一列相同的合并,第二...完美导出到excel,保留了多列合并的结果,一级datagrid中的列宽信息,需要下载jxl才能用。希望对你有帮助。
java 导出,导入excel。用户自定义导出模板。模板显示内容用el表达式即可。用户可以定义每一个单元格的显示内容。可以自定义List数据的展示。一个excel的sheet内,可以有多个list的数据循环
一个导出组织架构的excel报表的实现,自动计算合并单元格,支持无限级树导出,其中主要涉及组合模式和一系列算法
java POI导出Excel文件多表头文件
可以实现上图表格的合并导出,只需添加表头的值和合并单元格的数量,设置单元格的样式(字体,字体大小,字体颜色,是否加粗,是否居中)即可。
支持大数据量导出excel。自动合并相同数据单元格,可根据id自动识别是否合并,支持自定义类型数据转换,根据实体类自动识别。
1. 第一部门:详细介绍POI使用以及完成各种复杂的Excel的导出(动态筛选、多对象数据导出到同一sheet内、动态横向合并单元格以及动态纵向合并单元格等) 2.第二部分:使用EasyExcel导出excel的多种情况的例子介绍...
10、添加区域,合并单元格 11、保存Excel文件 12、根据单元格不同属性返回字符串数值 13、常用单元格边框格式 14、设置字体和内容位置 15、插入图片 16、调整工作表位置 17、设置打印区域 18、标注脚注 19...
一般在导出Excel中,在创建工作表sheet后,初始化的sheet中row都是一行一行的,每个单元格都是最小单位,所以问题1什么时候将单元格合并? 方案:先将数据组装成json格式方便插入Excel时进行遍历,接着以巡检项为每...
参考代码cellStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT); cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); cellStyle.setBorderBottom(HSSFCellStyle....
关于java EXCEL poi 合并后无法显示或无法设置边框问题 【本人亲测】 excel poi 新手! 坑了1.5天!
easyExcel 2.1.7 poi 3.17 springboot 2.2.5 lombok 1.18.12
java代码,实现从数据库中查询出数据,然后通过poi实现合并单元格生成excel