POI HSS 合并重复的列
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.apache.poi.hssf.usermodel.HSSFCell;
- import org.apache.poi.hssf.usermodel.HSSFCellStyle;
- import org.apache.poi.hssf.usermodel.HSSFFont;
- 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;
- import org.apache.poi.ss.usermodel.Font;
- import org.apache.poi.ss.util.CellRangeAddress;
- import org.hibernate.SQLQuery;
- import org.hibernate.transform.Transformers;
- import org.jboss.seam.annotations.Name;
- import org.jboss.seam.annotations.remoting.WebRemote;
- import com.sunsheen.jfids.system.base.composite.data.query.QueryParameterImpl;
- import com.sunsheen.jfids.system.database.DBSession;
- import com.sunsheen.jfids.util.DataBaseUtil;
- public class SalaryPoi {
- @SuppressWarnings("deprecation")
- public String getToExcel(){
- ......省略数据源获取
- // 返回表单结果集
- List list = query.list();
- int size = list.size();
- System.out.println("+++++++++++++" + size);
- //初始化POI
- //创建工作簿---->XSSF代表10版的Excel(HSSF是07版前的Excel)
- HSSFWorkbook wb = new HSSFWorkbook();
- //工作表
- HSSFSheet sheet = wb.createSheet("淞幸科技");
- //标头行,代表第一行
- HSSFRow head=sheet.createRow(0);
- HSSFCell hssfCell=head.createCell(0);
- hssfCell.setCellValue("成都淞幸科技有限责任公司"+date.substring(0,4)+"年"+
- date.substring(date.length()-2,date.length())+"月工资表");
- head.setHeightInPoints(70);
- //合并第一行的单元格
- CellRangeAddress address=new CellRangeAddress(0,0,0,26);
- sheet.addMergedRegion(address);
- //创建字体与风格
- HSSFCellStyle cellStyle = wb.createCellStyle();//生成表头格样式
- HSSFFont hssfFont = wb.createFont();//创建字体
- hssfFont.setFontHeightInPoints((short)12);//字体大小
- hssfFont.setBoldweight(Font.BOLDWEIGHT_BOLD);//粗体
- cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
- cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
- cellStyle.setFont(hssfFont);
- hssfCell.setCellStyle(cellStyle);
- //修饰风格2
- HSSFCellStyle cellStyle2 = wb.createCellStyle();//生成表头格样式
- cellStyle2.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
- cellStyle2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
- HSSFRow header=sheet.createRow(1);
- //创建单元格,0代表第一行第一列
- String[] heards ={"序号","部门名称","工号","姓名","银行卡号","定级工资","岗位工资","基础
- ,"实发工资总额"......};
- for(int i =0;i<heards.length;i++){
- HSSFCell hssfCell1=header.createCell(i);
- hssfCell1.setCellStyle(cellStyle2);
- hssfCell1.setCellValue(heards[i]);
- }
- //设置列的宽度
- // getPhysicalNumberOfCells()代表这行有多少包含数据的列
- for(int i=0;i<header.getPhysicalNumberOfCells();i++){
- //POI设置列宽度时比较特殊,它的基本单位是1/255个字符大小,
- //因此我们要想让列能够盛的下20个字符的话,就需要用255*20
- sheet.setColumnWidth(i, 255*15);
- }
- //设置行高,行高的单位就是像素,因此30就是30像素的意思
- header.setHeightInPoints(30);
- int k =2;
- //
- for(int i=0;i<size;i++){
- // //创建多行数据
- HSSFRow headers=sheet.createRow(k++);
- // //拿出所有查询出的一条list(list(Map<>))信息
- Map<String, Object> map = (Map<String, Object>) list.get(i);
- System.out.println(map);
- String[] context ={你要写入的数据};
- for(int j=0;j<context.length;j++){
- HSSFCell hssfCell2=headers.createCell(j);
- hssfCell2.setCellStyle(cellStyle2);
- hssfCell2.setCellValue(context[j]);
- }
- }
- // 合并相同列中的数据
- // 处理相同的数据合并单元格
- if(sheet.getLastRowNum()>2){//获取最后一行行标,比行数小 满足合并的条件,2是数据行的开始,0 1 行为表头
- HSSFRow row_1 = sheet.getRow(2);
- HSSFCell cell_1 = row_1.getCell(1);
- String departname = cell_1.getStringCellValue();
- for(int i=3;i<=sheet.getLastRowNum();i++){
- //除第一个外,循环将内容相同的单元格设为"",这里体现出为什么原数据要有序!
- HSSFRow rows = sheet.getRow(i);
- //此处表示对单元格进行内容相同合并处理,我这里获取的是每行的第2列进行对比,要多列对比的,这里自行增加
- HSSFCell cells_1 = rows.getCell(1);
- //这里值相同则设置位空,方便之后的合并
- if(departname.equals(cells_1.getStringCellValue())){
- cells_1.setCellValue("");
- }else{
- departname = cells_1.getStringCellValue();
- }
- }
- }
- int sk;
- if(sheet.getLastRowNum()>2){//将为空的单元格与之前不为空的合并
- sk=2;
- for(int i=3;i<=sheet.getLastRowNum();i++){
- HSSFRow rows = sheet.getRow(i);
- HSSFCell cell_0 = rows.getCell(1);
- if(cell_0.getStringCellValue() == ""){//如果为空但还没对比到最后一行,继续循环
- if(i==sheet.getLastRowNum()){
- sheet.addMergedRegion(new CellRangeAddress(sk, i, 1, 1));//如果已经对比到最后一行,开始合并
- }
- }else{
- if(sk != i-1){//不为空且i-1不为sk则合并
- sheet.addMergedRegion(new CellRangeAddress(sk, i-1, 1, 1));//起始行号,终止行号, 起始列号,终止列号
- }
- sk =i;
- }
- }
- }
- //上面设置好了内容,我们当然是要输出到某个文件的,输出就需要有输出流
- FileOutputStream fos;
- try {
- fos = new FileOutputStream("d:/2010.xls");
- //向指定文件写入内容
- wb.write(fos);
- fos.close();
- return "导出Excel已完成!";
- } catch (FileNotFoundException e) {
- // TODO 自动生成的 catch 块
- e.printStackTrace();
- } catch (IOException e) {
- // TODO 自动生成的 catch 块
- e.printStackTrace();
- }
- return "导出Excel失败!";
- }
- }
POI HSS 合并重复的列的更多相关文章
- ASP.NET中重复表格列合并的实现方法(转自脚本之家)
这几天做一个项目有用到表格显示数据的地方,客户要求重复的数据列需要合并,就总结了一下.NET控件GridView 和 Repeater 关于重复数据合并的方法. 这是合并之前的效果: 合并之后的效果图 ...
- POI Excel 合并数据相同的行
import java.io.Serializable; /** * POI Excel报表导出,列合并实体<br> * * @author WQ * */ public class Po ...
- poi读取合并单元格
poi读取合并单元格 学习了:http://blog.csdn.net/ycb1689/article/details/9764191 进行了列合并单元格的修正:原来是我自己找错了地方: import ...
- POI 怎么设置Excel整列的CellStyle啊
POI 怎么设置Excel整列的CellStyle啊,而不是循环每个Cell.因为现在是生成Excel模板,不知道客户会输入多少行. 问题补充: 指尖言 写道 好像没有这个方法,CellStyle是C ...
- poi获取合并单元格内的第一行第一列的值
当读取如图所示的excel时,显示为第1行 第1列 的内容是:合并单元格 其它在合并单元格区域内的单元格不显示 示例代码如下: import java.io.FileInputStream; impo ...
- Java导出Excel表,POI 实现合并单元格以及列自适应宽度(转载)
POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress ...
- POI 实现合并单元格以及列自适应宽度
POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress ...
- POI 简单合并单元格
public class MergedCells { /** 测试使用的POI版本是3.1 * @param args */ public static void main(String[] args ...
- poi excel 合并单元格
结论:final CellRangeAddress cra = new CellRangeAddress(rowId, rowId + rowSkip, colId, colId + c ...
随机推荐
- Python实现读取json文件到excel表
一.需求 1.'score.json' 文件内容: { "1":["小花",99,100,98.5], "2":["小王" ...
- js中json对象取键和值
1.json中输出各个键值: var ohp = {"星期一":18,"星期二":16,"星期三":19,"星期四":1 ...
- UnitySendMessage
SendMessage查找的方法是在自身当中去查找 SendMessageUpwards查找的方法是在自身和父类中去查找,如果父类还有父类,继续查找,知道找到根节点为止. BroadcastMessa ...
- scala容器使用
花了两个小时左右,学习了一下scala语言, 由于scala运行在jvm之上, 可以使用java容器也可以使用scala自带的容器. import java.util import java.util ...
- mui的事件实现(持续更新)
长按事件: mui('.mui-scroll').on('longtap', '.index-tab-item', function(e) { alert("长按生效") }); ...
- Web前端几种常见的实现水平垂直居中的方法
第一种: 父容器不设置宽度,用定位实现水平垂直居中. <!DOCTYPE html> <html lang="en"> <head> <m ...
- 【vlan-hybird】
根据项目要求搭建号拓扑图如下: 分别配置pc1-5的ip地址: 配置交换机sw1: 配置交换机sw2
- PHP中对字符串的一些操作
php中判断字符串在另一个字符串中是否存在(strpos): if(strpos('www.baidu.com', 'www') !== false){ // 存在 }else{ // 不存在 } p ...
- Hive初识(四)
Hive本质上是一个数据仓库,但不存储数据(只存储元数据(metadata),Hive中的元数据包括表的名字,表的列和分区及分区及其属性,表的属性(是否为外部表等),表的数据所在目录等),用户可以借助 ...
- CPS---(Cyber-Physical Sytem,信息物理融合系统)
1.CPS定义 CPS是连接计算机虚拟世界与物理现实世界的系统.---We refer to systems that bridge the cyber-world of computing and ...