`

java合并单元格同时导出excel

    博客分类:
  • java
阅读更多

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.合并单元格的时候要合并的单单元格必须先创建,这样方便后面再次获取这个单元格来填充数据,主要就是因为合并时不能由后向前进行合并引起的。 

Java代码  收藏代码
  1. import java.io.IOException;  
  2.   
  3. import org.apache.poi.hssf.usermodel.HSSFCell;  
  4. import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
  5. import org.apache.poi.hssf.usermodel.HSSFRow;  
  6. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  7. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  8. import org.apache.poi.hssf.util.Region;  
  9.   
  10.   
  11. public class ExcelTest {      
  12.      
  13.     /**    
  14.      * @param args    
  15.      */     
  16.     public static void main(String[] args) throws IOException {      
  17.      
  18.         try {      
  19.             HSSFWorkbook wb = new HSSFWorkbook();      
  20.             HSSFSheet sheet = wb.createSheet("new   sheet");      
  21.             HSSFCellStyle style = wb.createCellStyle(); // 样式对象      
  22.      
  23.             style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直      
  24.             style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平      
  25.             HSSFRow row = sheet.createRow((short0);      
  26.             HSSFRow row2 = sheet.createRow((short1);      
  27.      
  28.             sheet.addMergedRegion(new Region(0, (short01, (short0));      
  29.             HSSFCell ce = row.createCell((short0);      
  30.             ce.setEncoding(HSSFCell.ENCODING_UTF_16);// 中文处理      
  31.             ce.setCellValue("项目\\日期"); // 表格的第一行第一列显示的数据      
  32.             ce.setCellStyle(style); // 样式,居中      
  33.             int num = 0;      
  34.             for (int i = 0; i < 9; i++) { // 循环9次,每一次都要跨单元格显示      
  35.                 // 计算从那个单元格跨到那一格      
  36.                 int celln = 0;      
  37.                 int celle = 0;      
  38.                 if (i == 0) {      
  39.                     celln = 0;      
  40.                     celle = 1;      
  41.                 } else {      
  42.                     celln = (i * 2);      
  43.                     celle = (i * 2 + 1);      
  44.                 }      
  45.                 // 单元格合并      
  46.                 // 四个参数分别是:起始行,起始列,结束行,结束列      
  47.                 sheet.addMergedRegion(new Region(0, (short) (celln + 1), 0,      
  48.                         (short) (celle + 1)));      
  49.                 HSSFCell cell = row.createCell((short) (celln + 1));      
  50.                 cell.setCellValue("merging" + i); // 跨单元格显示的数据      
  51.                 cell.setCellStyle(style); // 样式      
  52.                 // 不跨单元格显示的数据,如:分两行,上一行分别两格为一格,下一行就为两格,“数量”,“金额”      
  53.                 HSSFCell cell1 = row2.createCell((short) celle);      
  54.                 HSSFCell cell2 = row2.createCell((short) (celle + 1));      
  55.                 cell1.setEncoding(HSSFCell.ENCODING_UTF_16);      
  56.                 cell1.setCellValue("数量");      
  57.                 cell1.setCellStyle(style);      
  58.                 cell2.setEncoding(HSSFCell.ENCODING_UTF_16);      
  59.                 cell2.setCellValue("金额");      
  60.                 cell2.setCellStyle(style);      
  61.                 num++;      
  62.             }      
  63.      
  64.             // 在后面加上合计百分比      
  65.      
  66.             // 合计 在最后加上,还要跨一个单元格      
  67.             sheet.addMergedRegion(new Region(0, (short) (2 * num + 1), 0,      
  68.                     (short) (2 * num + 2)));      
  69.             HSSFCell cell = row.createCell((short) (2 * num + 1));      
  70.             cell.setEncoding(HSSFCell.ENCODING_UTF_16);      
  71.             cell.setCellValue("合计");      
  72.             cell.setCellStyle(style);      
  73.             HSSFCell cell1 = row2.createCell((short) (2 * num + 1));      
  74.             HSSFCell cell2 = row2.createCell((short) (2 * num + 2));      
  75.             cell1.setEncoding(HSSFCell.ENCODING_UTF_16);      
  76.             cell1.setCellValue("数量");      
  77.             cell1.setCellStyle(style);      
  78.             cell2.setEncoding(HSSFCell.ENCODING_UTF_16);      
  79.             cell2.setCellValue("金额");      
  80.             cell2.setCellStyle(style);      
  81.      
  82.             // 百分比 同上      
  83.             sheet.addMergedRegion(new Region(0, (short) (2 * num + 3), 0,      
  84.                     (short) (2 * num + 4)));      
  85.             HSSFCell cellb = row.createCell((short) (2 * num + 3));      
  86.             cellb.setEncoding(HSSFCell.ENCODING_UTF_16);      
  87.              
  88.             cellb.setCellValue("百分比");      
  89.             cellb.setCellStyle(style);      
  90.               
  91.             HSSFCell cellb1 = row2.createCell((short) (2 * num + 3));      
  92.             HSSFCell cellb2 = row2.createCell((short) (2 * num + 4));      
  93.             cellb1.setEncoding(HSSFCell.ENCODING_UTF_16);      
  94.             cellb1.setCellValue("数量");      
  95.             cellb1.setCellStyle(style);      
  96.             cellb2.setEncoding(HSSFCell.ENCODING_UTF_16);      
  97.             cellb2.setCellValue("金额");      
  98.             cellb2.setCellStyle(style);      
  99.      
  100.             /***这里是问题的关键,将这个工作簿写入到一个流中就可以输出相应的名字,这里需要写路径就ok了。 
  101.             FileOutputStream fileOut = new FileOutputStream("workbook.xls");     
  102.             wb.write(fileOut);     
  103.             fileOut.close(); 
  104.              **/  
  105.               
  106.               
  107.             /**第二种是输出到也面中的excel名称 
  108.              * pName="栏目统计表";    
  109.     response.reset();    
  110.     response.setContentType("application/x-msdownload");    
  111.     response.setHeader("Content-Disposition","attachment; filename="+new String(pName.getBytes("gb2312"),"ISO-8859-1")+".xls");    
  112.     ServletOutputStream outStream=null;    
  113.    
  114.     try{    
  115.         outStream = response.getOutputStream();    
  116.         wb.write(outStream);    
  117.     }catch(Exception e)    
  118.     {    
  119.      e.printStackTrace();    
  120.     }finally{    
  121.         outStream.close();    
  122.     }    
  123.              * */  
  124.             System.out.print("OK");      
  125.         } catch (Exception ex) {      
  126.             ex.printStackTrace();      
  127.         }      
  128.      
  129.     }      
  130.      
  131. }    
分享到:
评论

相关推荐

    java excel poi合并单元格

    总结,Java通过Apache POI库可以方便地处理Excel文件,包括合并单元格。这个过程涉及到创建工作簿和工作表,定义合并范围,写入数据并保存文件。在开发过程中,灵活运用这些方法可以满足各种复杂的Excel操作需求。

    java实现合并单元格的同时并导出excel示例

    Java实现合并单元格的同时并导出Excel示例 Java实现合并单元格的同时并导出Excel是软件开发中常见的一种需求,特别是在报表系统和数据处理中。本文将详细介绍Java实现合并单元格的同时并导出Excel的相关知识点,并...

    easyuiPoi导出Excel工具类封装(支持合并单元格)

    EasyUIPoI是一款基于Apache POI的Java工具库,专门用于简化Excel的导出操作,尤其在处理模板和合并单元格方面提供了便利。这个库主要适用于那些需要在Web应用中生成Excel报告或导出数据的场景,比如数据分析、报表...

    将HtmlTable 导出为Execl文件,支持合并单元格、合并行,无需Office支持

    3. **映射HTML表格到Excel**:将解析到的数据填充到工作簿对象中,同时处理合并单元格和行的逻辑。 4. **保存为Excel文件**:最后,将工作簿对象写入到Excel文件中,可以是XLSX或XLS格式。 在这个名为...

    java 后端生成pdf模板合并单元格表格的案例.docx

    ### Java后端生成PDF模板合并单元格表格案例详解 #### 概述 本文将详细介绍一个Java后端生成PDF模板,并在此基础上实现单元格合并功能的案例。案例的主要目的是展示如何在Java环境中创建复杂的表格结构,并将其导出...

    JAVAeasypoi根据Excel模板导出 循环遍历合并单元格处理

    【JAVA】easypoi根据Excel模板导出 循环遍历合并单元格处理

    excel poi工具类 导入 导出 合并单元格 计算公式

    导出数据到Excel文件的过程类似,只是方向相反: 1) 创建新的`Workbook`对象。 2) 添加工作表:调用`Workbook`的`createSheet()`方法。 3) 插入数据:在工作表中创建新的行`Row`,然后在行中添加单元格`Cell`,并...

    poi导入/导出Excel表格,合并单元格的读取和设置

    poi导入/导出Excel表格,合并单元格的读取和设置

    easyExcel导出合并单元格策略

    easyExcel导出合并单元格策略 WriteSheet writeSheet = EasyExcel.writerSheet(i, "Sheet" + (i + 1)) .registerWriteHandler(new CustomCellWriteHandler()) //设置合并单元格策略 .registerWriteHandler(new ...

    POI导出Excel工具类,自动设置标题 列名 文件名,可插入图片,合并单元格

    在这个场景中,我们关注的是如何使用POI来创建一个功能丰富的Excel导出工具类,它能够自动设置标题、列名、文件名,并且支持插入图片以及合并单元格。下面将详细介绍这些功能的实现。 首先,要创建一个Excel工作簿...

    excel合并单元格导入

    2. **数据处理问题**:在编程中,如Python的Pandas库或Java的Apache POI库处理Excel时,合并单元格可能导致数据读取不一致。例如,如果一个列中的某些单元格被合并,那么对应的行数将无法与未合并的数据对齐,从而...

    poi生成Excel及合并单元格示例

    通过这个简单的例子,我们可以了解到如何使用 Apache POI 来生成 Excel 文件,并实现单元格的合并。在实际开发中,你可以根据需求调整单元格的样式、数据格式,甚至可以设置公式和图表等更复杂的功能。Apache POI 是...

    Excel报表导出,复杂Excel模板导出(带单元格合并),jxls2

    本项目专注于解决这一问题,通过使用`jxls2`库,能够实现复杂Excel模板的导出,包括单元格的合并,满足多种报表导出需求。现在我们将详细探讨这个项目的核心技术和应用场景。 首先,`jxls2`是一个强大的Java库,它...

    利用easyExcel导出上万条数据,自定义策略合并单元格

    本文将深入探讨如何使用阿里云开发的开源库EasyExcel来处理大数据导出,并结合Apache POI库,以及SpringBoot框架,实现上万条数据的自定义策略合并单元格导出。我们将基于提供的技术栈——EasyExcel 2.1.7,Apache ...

    POI操作Excel合并单元格边框问题解决方法

    POI操作Excel 合并单元格 边框问题解决方法,这个方法是我亲自测试,并运用于项目中的,可以放心使用,还一并写出了很多注释,其中有写poi的bug的解决方法

    java excel tree

    "java excel tree"这个主题正是关于如何使用Java来创建一个基于Excel的组织架构报表,它利用了组合模式和一系列算法来实现自动计算合并单元格以及支持无限级树的导出功能。下面将详细阐述这一领域的知识。 首先,让...

    利用poi进行excel相同内容合并单元格并转成流输出

    利用poi进行excel相同内容合并单元格,只摘要了传入部分功能,请关注addMergedRegion方法

    使用XSSFWorkbook自由合并单元格并设置单元格样式

    `CellType.java`可能包含了枚举类型,用于表示Excel单元格的数据类型,如数值、字符串等,而`ExcelData.java`可能是用来封装数据的实体类,包含需要导出到Excel的数据。 通过这种方式,你可以根据需求灵活地创建带...

    合并单元格导出数据到excel.rar

    本案例中,"合并单元格导出数据到excel.rar"是一个压缩包,包含了一个Java代码示例,它实现了从数据库查询数据后,利用Apache POI库来生成包含合并单元格的Excel文件。以下是关于这个主题的详细知识点: 1. **Java...

    java 单元格合并

    首先,我们要区分两个主要场景:在GUI应用程序(如JavaFX或Swing)中合并单元格与在处理Excel文件(使用Apache POI)时合并单元格。这两种情况的方法略有不同。 1. **JavaFX或Swing中的单元格合并** 在JavaFX中,...

Global site tag (gtag.js) - Google Analytics