poi合并单元格同时导出excel

poi合并单元格同时导出excel

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();

}

}

}

时间: 2024-08-07 08:36:58

poi合并单元格同时导出excel的相关文章

apache poi 合并单元格 设置边框

HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); //创建一个样式 HSSFCellStyle styleBorderThin= wb.createCellStyle(); setBorder.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框 setBorder.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左

php 数据导出到excel 2种带有合并单元格的导出

具体业务层面 可能会有所不同.以下两种方式涉及的合并单元格地方有所不同,不过基本思路是一致的. 第一种是非插件版本.可能更容易理解点,基本思路就是 组装table 然后 读取 输出到excel上.缺点是要设置样式不太好设置. 第二种是利用插件  PHPExcel   有点是可以对输出格式做各种设置.缺点是初次接触这个插件的同学,并且对表格合并不熟悉的同学,可能要花点时间理解 另外注意excel对数字过长会处理成你不想要的数据,记得对该数据格式化成字符串 貌似就可以解决.以前遇到过 /** * *

JAVA poi 合并单元格

完整帮助代码:JAVA poi 帮助类 // 得到一个sheet中有多少个合并单元格 Integer sheetMergeCount = sheet.getNumMergedRegions(); for (Integer i = 0; i < sheetMergeCount; i++) { // 获取合并后的单元格 CellRangeAddress range = sheet.getMergedRegion(i); String cellValue = itemList.get(range.ge

poi 合并单元格 无边框问题

public void merge(int startrow,int endstartrow,int startColumn,int endColumn){ sht.addMergedRegion(new CellRangeAddress(startrow, endstartrow, startColumn, endColumn)); } 合并单元格时候  合并后的单元格部分边框会看不见.从而进行处理. 下面是处理样式的 方法. 单元格设置边框 public void setStyle(int

Apache POI 合并单元格--简单解释版带Demo

合并单元格所使用的方法: sheet.addMergedRegion( CellRangeAddress  cellRangeAddress  ); CellRangeAddress  对象的构造方法需要传入合并单元格的首行.最后一行.首列.最后一列. CellRangeAddress cra=new CellRangeAddress(0, 3, 3, 9); 怎样把数据写入合并后的单元格中 首先要查看你 CellRangeAddress 构造方法的firstcol index 创建firstc

poi导出Excel报表多表头双层表头、合并单元格

效果图: controller层方法: /**     *      * 导出Excel报表     * @param request     * @return     *      */    @RequestMapping("/export")    @ResponseBody    public void export(HttpServletRequest request,            HttpServletResponse response, String year

poi导出excel合并单元格(包括列合并、行合并)

1 工程所需jar包如下:commons-codec-1.5.jarcommons-logging-1.1.jarlog4j-1.2.13.jarjunit-3.8.1.jarpoi-3.9-20121203.jar 2 Code: /** * 导出设备信息Excel * @param form 和 HTTP 请求相关的表格对象 * @param resources 信息资源对象 * @param locale 本地化对象 * @param session HTTP 会话对象 * @param

Java导出Excel合并单元格

1.问题背景 利用POI导出Excel表格,在导出的过程中涉及到双表头,即需要合并单元格 2.实现源码 /** * * @Project:Report * @Title:MergeCell.java * @Package:com.you.excel * @Description: * @Author:YouHaiDong * @Date:2015年11月4日 下午2:36:46 * @Version: */ package com.you.excel; import java.io.FileOu

在Asp.Net MVC中使用NPOI插件实现对Excel的操作(导入,导出,合并单元格,设置样式,输入公式)

前言 NPOI 是 POI 项目的.NET版本,它不使用 Office COM 组件,不需要安装 Microsoft Office,目前支持 Office 2003 和 2007 版本. 1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 3.POI读取Excel有两种格式一个是HSSF,另一个是XSSF. HSSF和XSSF的区别如下: HSSF