`
chengyue2007
  • 浏览: 1493113 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

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

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 poi合并单元格

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

    POI合并单元格

    java POI导出Excel文件多表头文件

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

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

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

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

    POI读取Excel合并单元格并储存

    本文将深入探讨如何使用Java的Apache POI库来读取Excel文件,并处理其中合并单元格的数据,同时将这些数据存储到实体类中以供后续使用。 Apache POI是一个强大的库,允许程序员使用Java来创建、修改和显示Microsoft...

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

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

    poi读取合并单元格帮助类

    在探讨“poi读取合并单元格帮助类”的知识点时,我们首先需要理解Apache POI库在Java中的作用以及如何处理Excel文件中的合并单元格。Apache POI是一个开源的API,它允许程序创建、修改和显示Microsoft Office格式的...

    poi获取exccel有合并单元格的数据

    本文将详细介绍如何使用Apache POI库来读取含有合并单元格的Excel文件,并将读取到的数据存储为`List`。 #### Apache POI简介 Apache POI是一个用于处理Microsoft Office格式文件的开源Java库。它提供了对Excel、...

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

    这个“excel poi工具类”是利用Apache POI库来实现对Excel文件进行导入、导出、合并单元格以及处理计算公式的功能。下面我们将深入探讨这些知识点。 **1. Apache POI库介绍** Apache POI是一个开源项目,它为Java...

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

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

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

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

    NPOI读取模板导出Excel(合并单元格)

    在实际工作中,经常需要将数据导出到Excel文件中,并且在某些情况下还需要对单元格进行合并处理,以达到美观或者特定需求的目的。NPOI是.NET平台上一个强大的用于操作Office文档的开源库,它支持读写包括Excel在内的...

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

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

    关于java EXCEL poi 合并后无法显示或无法设置边框问题

    关于java EXCEL poi 合并后无法显示或无法设置边框问题 【本人亲测】 excel poi 新手! 坑了1.5天!

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

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

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

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

    POI合并多个相同的Excel或者合并Word文件

    当有多个相同格式的Excel文件需要合并时,我们可以遍历每个文件中的工作表,然后将所有数据合并到一个新的Excel文件中。这个过程涉及到的关键POI类包括`HSSFWorkbook`(用于处理.xls文件)和`XSSFWorkbook`(用于...

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

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

    excel合并单元格导入

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

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

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

Global site tag (gtag.js) - Google Analytics