`

Apache Poi Excel导出

阅读更多
引用
引用
字体颜色: [color=red]文字  提示:您可以使用 color=#FF0000[/color]package com.ths.util;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

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.CellRangeAddress;
import org.apache.poi.hssf.util.HSSFColor;

import cn.com.chx.bo.AppBo;

/*
* Copyright(C) 2000-2011 THS Technology Limited Company, http://www.ths.com.cn
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/



/**
*
*@Title 瀵煎嚭娓呭崟鏄庣粏
* @author sunzm
* @since 2013-6-3
*/
@SuppressWarnings("unchecked")
public class ExportOrderListUtil{
private ExportOrderListUtil(){}
private static ExportOrderListUtil util = new ExportOrderListUtil();
public static ExportOrderListUtil getInstance(){
return util;
}

/**
* @param response
* @param type                     污染源类型:1:污染源,2:污水处理厂
* @param emissid 排放清单ID
* @param fileName             文件名称
* @param index                    动态参数的起始位置
*/
@SuppressWarnings("deprecation")
public void createExcel(HttpServletResponse response,String type,String emissid,String fileName,int index){
//声明一个工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//生成一个表格 
HSSFSheet sheet = workbook.createSheet("排放清单导出"); 

//*******************************************表头样式***************************************
//生成一个样式(用于单元格)
HSSFCellStyle titleStyle = workbook.createCellStyle();
titleStyle.setFillBackgroundColor(HSSFColor.BLUE.index);
titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
titleStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
titleStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
titleStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
titleStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
titleStyle.setFillForegroundColor((short) 44);// 设置背景色44
titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        //设置表头字体
HSSFFont titleFont = workbook.createFont();
titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
titleStyle.setFont(titleFont);
// HSSFColor
//****************************************表体样式**********************************************
HSSFCellStyle contextStyle = workbook.createCellStyle();
contextStyle.setFillBackgroundColor(HSSFColor.BLUE.index);
contextStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
contextStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
contextStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
contextStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
contextStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
contextStyle.setFillForegroundColor((short) 41);
contextStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
//设置表头字体
HSSFFont contextFont = workbook.createFont();
contextFont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
contextStyle.setFont(contextFont);

HSSFCellStyle companyStyle = workbook.createCellStyle();
companyStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
companyStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
companyStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
companyStyle.setFillForegroundColor((short) 41);
companyStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
// CELL_TYPE_NUMERIC 数值型 0
// CELL_TYPE_STRING 字符串型 1
// CELL_TYPE_FORMULA 公式型 2
// CELL_TYPE_BLANK 空值 3
// CELL_TYPE_BOOLEAN 布尔型 4
// CELL_TYPE_ERROR 错误 5
//Excel表中的第一行显示的数据
HSSFRow row = sheet.createRow(0);    //定义单元格行-表头
HSSFCell cell = row.createCell(0); 
cell.setCellStyle(titleStyle);
cell.setCellType(1);
cell.setCellValue("序号");

cell = row.createCell(1);
cell.setCellStyle(titleStyle);
cell.setCellType(1);
cell.setCellValue("污染源名称");

cell = row.createCell(2);
cell.setCellStyle(titleStyle);
cell.setCellType(1);
cell.setCellValue("流域");

/**
* 获取数据库中的数据
*/
Map<String, Object> dataBase = getDataBase(type, emissid);  
int count = (Integer) dataBase.get("count");   // 污染物的个数
int colcount = (Integer) dataBase.get("colcount");                                //  显示行的个数
ArrayList<HashMap<String, String>> listValue = (ArrayList<HashMap<String, String>>) dataBase.get("listValue");      //得到符合标准的数据列
ArrayList<String> arrColShowzh_cn = (ArrayList<String>) dataBase.get("arrColShowzh_cn");      //显示列对应的中文名称
ArrayList<String> popuList = (ArrayList<String>) dataBase.get("popuList");     //显示列对应的中文名称
    int strindex =index;
for(int i=0; i<count; i++){
     for(int z=0; z<colcount; z++){
    cell = row.createCell(index + i*colcount+z);
    cell.setCellStyle(titleStyle);
cell.setCellType(1);
    cell.setCellValue(popuList.get(i));
     }
     sheet.addMergedRegion(new CellRangeAddress(0, 0,(short)strindex, (short) strindex+colcount-1));
     strindex += colcount;
}


//Excel表中的第二行显示的数据
row = sheet.createRow(1);
cell = row.createCell(0);
cell.setCellStyle(titleStyle);

cell = row.createCell(1);
cell.setCellStyle(titleStyle);

cell = row.createCell(2);
cell.setCellStyle(titleStyle);
//统计循环次数如果是最后一次循环,则将清单值添加到该表格之中
int end=0;
for(int i = 0;  i<count ; i++){
for(int j=0; j<=colcount ; j++){    //i==1时,3+3
end++;
cell = row.createCell(index + i*colcount+j);
cell.setCellType(1);
cell.setCellStyle(titleStyle);
if(end==colcount){
cell.setCellValue("清单值");                    //清单值
end = 0;
break;
}else{
cell.setCellValue(arrColShowzh_cn.get(j));          //显示排放
}
}
}

//Excel表中的第三行显示的数据

for(int i=0; i<listValue.size(); i++){
sheet.autoSizeColumn(1, true);
HashMap<String, String> colValue = listValue.get(i);
if(i==0){
row = sheet.createRow(2);
cell = row.createCell(0);
cell.setCellStyle(contextStyle);
cell.setCellType(0);
cell.setCellValue(1);

cell = row.createCell(1);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue("合计");

cell = row.createCell(2);
cell.setCellStyle(contextStyle);

for(int k = 0;  k<count ; k++){
for(int j=0; j<colcount ; j++){
cell = row.createCell(index + k*colcount+j);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue(colValue.get("CENTRALVALUES"+k));

cell = row.createCell(index + k*colcount+j+1);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue(colValue.get("ONLINEMONIT"+k));

cell = row.createCell(index + k*colcount+j+2);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue(colValue.get("OTHER"+k));

cell = row.createCell(index + k*colcount+j+3);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue(colValue.get("POLLCENS"+k));

cell = row.createCell(index + k*colcount+j+4);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue(colValue.get("SEWDISS"+k));

cell = row.createCell(index + k*colcount+j+5);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue(colValue.get("SUPERVISORYMONVALUES"+k));

cell = row.createCell(index + k*colcount+j+6);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue(colValue.get("LISTVALUES"+k));
break;
}
}
}else{
row = sheet.createRow(i+2);
cell = row.createCell(0);
cell.setCellStyle(contextStyle);
cell.setCellType(0);
cell.setCellValue(i+1);

cell = row.createCell(1);
cell.setCellType(1);
cell.setCellStyle(companyStyle);
cell.setCellValue(colValue.get("COMPNAME"));

cell = row.createCell(2);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue(colValue.get("RIVERBASIN"));

for(int k = 0;  k<count ; k++){
for(int j=0; j<colcount ; j++){
cell = row.createCell(index + k*colcount+j);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue(colValue.get("CENTRALVALUES"+k));

cell = row.createCell(index + k*colcount+j+1);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue(colValue.get("ONLINEMONIT"+k));

cell = row.createCell(index + k*colcount+j+2);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue(colValue.get("OTHER"+k));

cell = row.createCell(index + k*colcount+j+3);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue(colValue.get("POLLCENS"+k));

cell = row.createCell(index + k*colcount+j+4);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue(colValue.get("SEWDISS"+k));

cell = row.createCell(index + k*colcount+j+5);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue(colValue.get("SUPERVISORYMONVALUES"+k));

cell = row.createCell(index + k*colcount+j+6);
cell.setCellStyle(contextStyle);
cell.setCellType(1);
cell.setCellValue(colValue.get("LISTVALUES"+k));
break;

}

}

}
}
try {
String encodedfileName = new String(fileName.getBytes(), "ISO8859-1");
response.setHeader("Content-Disposition", "attachment; filename=\""+ encodedfileName + "\"");
response.setContentType("application/vnd.ms-excel");
workbook.write(response.getOutputStream());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* @param type          污染源类型
* @param emissid    排放清单ID
* @return   生成Excel表中的数据
*/
private Map<String,Object>  getDataBase(String type,String emissid){
AppBo appBo = new AppBo();
appBo.setDefaultDSN("java:comp/env/jdbc/mydsAir");
String sqlshow = "select COL,COLNAME from T_BAS_VALUE_COL where ISHOW='"+Constant.EXCEL_SHOW_COL+"' and TYPE='"+type+"'"+" order by COL  ASC";   //得到显示的列
ArrayList<HashMap<String, String>> allCollist = null;
try {
allCollist = appBo.query(sqlshow);
} catch (Exception e) {
e.printStackTrace();
}

ArrayList<String> arrColShow = new ArrayList<String>(); //名称
ArrayList<String> arrColShowzh_cn = new ArrayList<String>(); //名称
for(HashMap<String, String> maps : allCollist){
for(Map.Entry<String, String> map : maps.entrySet()){
if("COL".equals(map.getKey())){
arrColShow.add(map.getValue());
}else{
arrColShowzh_cn.add(map.getValue());
}
}
}

/*
* 污染物的名称
*/
String popultName = "select POLLUTANTSNAME from T_BAS_POLLUTANTS where ISHOW='1' and POLLUTANTSTYPE='"+type+"' order by POLLUTANTSID ASC";
ArrayList<HashMap<String, String>> popultLists = null;
try {
popultLists = appBo.query(popultName);
} catch (Exception e) {
e.printStackTrace();
}
//得到污染物的集体名称
List<String> popuList = new ArrayList<String>();
for(HashMap<String, String> popName : popultLists){
for(Map.Entry<String, String> mp : popName.entrySet()){
popuList.add(mp.getValue());
}
}

StringBuilder sqlbuid = new StringBuilder();
StringBuilder sum = new StringBuilder();
int i = 0;
for(String str :popuList){
//for循环列明
for(String strName : arrColShow){
sqlbuid.append(" sum(case when NAMEPOLLUTANTS = '"+str+"' then "+strName+" else 0 end) as "+strName+i+",");
sum.append("sum("+strName+i+") as "+strName+i+",");
}
sqlbuid.append(" sum(case when NAMEPOLLUTANTS = '"+str+"' then LISTVALUES else 0 end) as "+"LISTVALUES"+i+",");
sum.append("sum(LISTVALUES"+i+") as "+"LISTVALUES"+i+",");
i++;
}
sqlbuid.delete(sqlbuid.length()-1, sqlbuid.length());
sum.delete(sum.length()-1, sum.length());
// select * from (
//
// select null as compname,null as RIVERBASIN,null as SOURPOLLCOMPID,null as SOUR_POLLCOMPID,sum(tx),sum(tes),sum(tts) from(
// (select compname,RIVERBASIN,SOURPOLLCOMPID from T_BAS_SOURPOLLCOMPANY where COMPTYPE='1' and EMISSID='1234567890') s
//
// left join(
//
// select SOUR_POLLCOMPID, sum(case when NAMEPOLLUTANTS = '化学需氧量' then CENTRALVALUES else 0 end) as tx
// , sum(case when NAMEPOLLUTANTS = '氨氮' then CENTRALVALUES else 0 end) as tes
// , sum(case when NAMEPOLLUTANTS = '石油类' then CENTRALVALUES else 0 end) as tts
// from T_BAS_EMISSIONSINVEVALUE group by SOUR_POLLCOMPID) t on s.SOURPOLLCOMPID = t.SOUR_POLLCOMPID)
//
// union all(
// select * from
// (select compname,RIVERBASIN,SOURPOLLCOMPID from T_BAS_SOURPOLLCOMPANY where COMPTYPE='1' and EMISSID='1234567890') s
// left join(
// select SOUR_POLLCOMPID, sum(case when NAMEPOLLUTANTS = '化学需氧量' then CENTRALVALUES else 0 end) as tx
// , sum(case when NAMEPOLLUTANTS = '氨氮' then CENTRALVALUES else 0 end) as tes
// , sum(case when NAMEPOLLUTANTS = '石油类' then CENTRALVALUES else 0 end) as tts
// from T_BAS_EMISSIONSINVEVALUE group by SOUR_POLLCOMPID) t on s.SOURPOLLCOMPID = t.SOUR_POLLCOMPID
// )
// )

String allCol = "select * from ( select null as compname,null as RIVERBASIN,null as SOURPOLLCOMPID,null as SOUR_POLLCOMPID,"+sum+" from(" +
"(select compname,RIVERBASIN,SOURPOLLCOMPID from T_BAS_SOURPOLLCOMPANY where COMPTYPE='"+type+"' and EMISSID='"+emissid+"') s "+
"left join(select SOUR_POLLCOMPID, " +sqlbuid+
" from T_BAS_EMISSIONSINVEVALUE group by SOUR_POLLCOMPID) t on s.SOURPOLLCOMPID = t.SOUR_POLLCOMPID)" +
"union all( select * from" +
"(select compname,RIVERBASIN,SOURPOLLCOMPID from T_BAS_SOURPOLLCOMPANY where COMPTYPE='"+type+"' and EMISSID='"+emissid+"') s " +
"left join( select SOUR_POLLCOMPID, " +sqlbuid+
" from T_BAS_EMISSIONSINVEVALUE group by SOUR_POLLCOMPID) t on s.SOURPOLLCOMPID = t.SOUR_POLLCOMPID))";

ArrayList<HashMap<String, String>> arraylist = null;  //查询得到的污染物名称、公司名称
try {
arraylist = appBo.query(allCol);
} catch (Exception e) {
e.printStackTrace();
}

Map<String, Object> dateMap = new HashMap<String, Object>();  //组织返回参数
dateMap.put("listValue", arraylist);          //得到符合标准的数据列
dateMap.put("popuList", popuList);          //污染源的中文名称
dateMap.put("count", popuList.size());   // 污染物的名称
dateMap.put("colcount", allCollist.size()+1);   // 显示行的个数
dateMap.put("arrColShowzh_cn", arrColShowzh_cn);   // 显示行的个数
return dateMap;
}



}
分享到:
评论

相关推荐

    基于Apache POI导出大数据量(百万级)Excel的实现

    项目分别模拟了10W,100W,1048576(xlsx最大支持行数)条数据,进行一次性Excel导出。 测试: 模拟10W条数据,一次性导出用时3秒左右(3736ms); 模拟100W条数据,一次性导出用时26秒左右(26381ms); 模拟...

    Apache POI 模板导出excel.rar

    在"Apache POI 模板导出excel.rar"这个压缩包中,我们聚焦于使用Apache POI 3.16版本来生成基于Excel模板的数据导出功能。这个过程涉及到多个关键知识点,下面将详细阐述。 1. **Apache POI库**:Apache POI是一个...

    使用ITEXT导出PDF、WORD,APACHE POI导出EXCEL报表文件

    本文将深入探讨如何使用ITEXT库导出PDF和Word,以及利用Apache POI库导出Excel报表文件。 首先,让我们来了解ITEXT库。ITEXT是一个开源Java库,专门用于创建和修改PDF文档。使用ITEXT,你可以方便地生成包含文本、...

    Apache poi 导出excel实例

    这篇博客文章“Apache POI 导出excel实例”将深入探讨如何使用Apache POI库来生成Excel文件,这对于在Java环境中处理大量数据并需要导出为Excel格式的应用非常有用。 首先,我们需要导入Apache POI库到我们的项目中...

    java_poi实现excel导入导出

    Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...

    POI的EXCEL导出,自动换行

    ### POI的EXCEL导出,自动换行 在日常工作中,经常需要处理大量的数据导入导出任务,尤其是在企业级应用开发中,Excel文件的处理成为了一项必不可少的能力。Apache POI项目提供了一系列用于读写Microsoft Office...

    POI导出Excel文件

    Apache POI是一个流行的Java库,用于读取和写入Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。这个实例提供了两种方法来导出Excel文件:通过Servlet和通过main方法。这两种方法都是在Java环境中操作...

    Apache POI导入和导出Excel文件.

    Apache POI导入和导出Excel文件

    apache poi 导出excel、word

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel和Word。它提供了Java API,使得开发者能够方便地在Java应用程序中创建、修改和读取这些文件。以下是对Apache POI的一些关键知识点的...

    POI使用Excel模板文件循环输出行并导出Excel

    在这个特定的例子中,我们将讨论如何使用POI库基于一个Excel模板文件循环输出数据行,并将结果导出为新的Excel文件。 首先,我们需要理解POI库的基本概念。POI提供了HSSF(Horizontally SpreadSheet Format)和XSSF...

    apache POI 导出Excel 设置打印

    当我们需要导出Excel并设置打印参数时,Apache POI 提供了丰富的功能。 1. **创建Excel工作簿和工作表** 在使用Apache POI导出Excel时,首先需要创建一个`XSSFWorkbook`对象作为工作簿,然后通过工作簿创建`...

    poiexcel导出html格式

    Apache POI 是一个开源项目,专门用于处理 Microsoft Office 格式的文件,包括 Excel。在 POI 3.10 及以后的版本中,引入了对将 Excel 工作簿转换为 HTML 格式的支持,这极大地扩展了其在数据导出和网页展示中的应用...

    poi导出根据模板导出excel和简单列表导出excel源码

    在本案例中,我们关注的是如何使用 Apache POI 库来导出 Excel 文件,特别是根据模板导出和简单列表导出。下面将详细介绍这个过程。 1. **Apache POI 概述** Apache POI 提供了 Java API 来读写 Microsoft Office ...

    Apache poi 操作 excel 文件压缩包

    在实际应用中,Apache POI 往往用于数据分析、报表生成、数据导入导出等场景,尤其在需要在服务器端生成或处理Excel文件时,它是Java开发者的重要工具。通过熟练掌握Apache POI,你可以提高Java应用程序与Excel交互...

    POI操作Excel完美生成水印

    在Java编程领域,Apache POI 是一个非常流行的库,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Excel(XLS和XLSX)。本教程将深入探讨如何利用Apache POI来在Excel文件中完美地生成水印。水印通常...

    使用poi方式导出excel(分多个sheet导出)

    本教程将详细介绍如何利用Apache POI库来实现使用多个Sheet(工作簿)导出一个Excel文件的功能。 一、Apache POI简介 Apache POI 是一个开源项目,提供API来读取、写入和修改Microsoft Office文件格式,如Word(DOC...

    APACHE POI EXCEL 2007导出报表

    ### Apache POI Excel 2007 导出报表知识点详解 #### 一、Apache POI 概述 Apache POI 是一个流行的 Java API,用于处理 Microsoft Office 格式的文件,包括 Excel 和 Word。其中,处理 Excel 文件的功能主要通过...

    poi导出excel demo

    在本示例中,"poi导出excel demo"指的是使用Apache POI库创建和导出Excel文件的演示。这个项目可能包含了一个或多个Java源代码文件,展示了如何使用POI API来生成Excel工作簿、工作表、单元格等内容。 Apache POI ...

Global site tag (gtag.js) - Google Analytics