java合并单元格同时导出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();
- }
- }
- }
java合并单元格同时导出excel的更多相关文章
- poi合并单元格同时导出excel
poi合并单元格同时导出excel POI进行跨行需要用到对象HSSFSheet对象,现在就当我们程序已经定义了一个HSSFSheet对象sheet. 跨第1行第1个到第2个单元格的操作为 sheet ...
- php 数据导出到excel 2种带有合并单元格的导出
具体业务层面 可能会有所不同.以下两种方式涉及的合并单元格地方有所不同,不过基本思路是一致的. 第一种是非插件版本.可能更容易理解点,基本思路就是 组装table 然后 读取 输出到excel上.缺点 ...
- asp.net C#取Excel 合并单元格内容
asp教程.net c#取excel 合并单元格内容读取excel数据,填充dataset// 连接字符串 string xlspath = server.mappath("~/www.11 ...
- java导出标题多行且合并单元格的EXCEL
场景:项目中遇到有需要导出Excel的需求,并且是多行标题且有合并单元格的,参考网上的文章,加上自己的理解,封装成了可自由扩展的导出工具 先上效果,再贴代码: 调用工具类进行导出: public st ...
- java poi导出Excel合并单元格并设置边框
import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; i ...
- Java导出Excel表,POI 实现合并单元格以及列自适应宽度(转载)
POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress ...
- poi导出Excel报表多表头双层表头、合并单元格
效果图: controller层方法: /** * * 导出Excel报表 * @param request * @return * */ @ ...
- poi导出excel合并单元格(包括列合并、行合并)
1 工程所需jar包如下:commons-codec-1.5.jarcommons-logging-1.1.jarlog4j-1.2.13.jarjunit-3.8.1.jarpoi-3.9-2012 ...
- 在Asp.Net MVC中使用NPOI插件实现对Excel的操作(导入,导出,合并单元格,设置样式,输入公式)
前言 NPOI 是 POI 项目的.NET版本,它不使用 Office COM 组件,不需要安装 Microsoft Office,目前支持 Office 2003 和 2007 版本. 1.整个Ex ...
随机推荐
- I/O 接口及其编址方式
I/O 接口电路也简称接口电路.它是主机和外围设备之间交换信息的连接部件(电路).它在主机和外围设备之间的信息交换中起着桥梁和纽带作用.设置接口电路的必要性:a) 解决主机CPU 和外围设备之间的时序 ...
- HTML常用特殊字符
网页特殊符号HTML代码大全 HTML特殊字符编码大全:往网页中输入特殊字符,需在html代码中加入以&开头的字母组合或以&#开头的数字.下面就是以字母或数字表示的特殊符号大全. ...
- Jenkins构建次数设置
Build after other projects are built:在其他项目触发的时候触发,里面有分为三种情况,也就是其他项目构建成功.失败.或者不稳定的时候触发项目: Poll SCM:定时 ...
- K最近邻kNN-学习笔记
# -*- coding: utf-8 -*- """ Created on Thu Jan 24 09:34:32 2019 1. 翼尾花数据 2. 用 KNeighb ...
- Fragment的详细使用
一直在用Fragment,但是没有系统的整理过,Google了一下相关文章,看到了几篇,将几篇还不错的文章重点整理了下,很多是直接Copy的,只为做个笔记,以后翻来看比较方便,建议大家看一下下面几篇, ...
- MariaDB和mySQL到底区别在哪,实验说明问题!
先看图,插入数据和时间的对数图,实验条件一直且关闭了mysql默认事务保证不是单条事务而是批量事务 另外确保了mysql and mariaDB都是在支持事务存储引擎下测试的. MySQL之父Wide ...
- Z-index研究 opacity和z-index一起使用
Z-index研究 opacity和z-index一起使用 关于z-index的真正问题是,很少有人理解它到底是怎么用.其实它并不复杂,但是如果你从来没有花一定时间去看具体的z-index相关文档 ...
- 检查Rabbitmq中队列及消息个数,还有清空的方法
rabbitmqctl list_queues rabbitmqctl purge_queue kafka_queue (不推荐)使用reset方式重置rabbitmq即清空掉rabbitmq所有的队 ...
- PHP服务端支付宝支付及回调
支付宝支付 (由app端自行调起支付宝/微信) 1.下载PHP版SDK 1 <?php 2 3 define('IN_ECS', true); 4 5 /*App支付 PHP服务端*/ 6 /* ...
- POJ 2377 Bad Cowtractors (Kruskal)
题意:给出一个图,求出其中的最大生成树= =如果无法产生树,输出-1. 思路:将边权降序再Kruskal,再检查一下是否只有一棵树即可,即根节点只有一个 #include <cstdio> ...