`

报表导出ExcelUtil2

    博客分类:
  • java
 
阅读更多

 

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URLEncoder;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.*;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;

import com.sinovatech.shop.order.model.dto.TOrderDTO;


import java.awt.Font;
import java.beans.*;

 
abstract public class ExcelUtil2 {
private   Log log = LogFactory.getLog(ExcelUtil2.class);

private   String shtName = "";
//列属性名
private   String[] cNames = null;
//列显示名
private   String[] cLabels = null;
 
//每页显示行数
private   int rpp = 5000;

private   HSSFCellStyle style = null;
private HSSFWorkbook  wb;
public ExcelUtil2(){
}
public   void exportBySql(HttpServletResponse response,Session session, String querySql,String countSql,
String fileName, String sheetName, String[] colTitle, int rowPerPage)  {

if (rowPerPage <= 10000 && rowPerPage >= 1) {
rpp = rowPerPage;
}
if (!"".equals(sheetName) && null != sheetName) {
shtName = sheetName;
} else {
shtName = "sheet";
}
 
this.cLabels=colTitle;
 wb = new HSSFWorkbook();
style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//--
SQLQuery query=session.createSQLQuery(querySql);
int curPage=1;
int count =getCount(session,countSql);
int totalPage = ((count + rpp) - 1) / rpp;
for(int i=0;i<totalPage;i++){
curPage=i+1;
int firstResult=(curPage - 1) * rpp;
query.setFirstResult(firstResult);
query.setMaxResults(rpp);
List list= query.list();
HSSFSheet sheet = createSheet(wb, curPage,count);
setSheetColumnTitle(sheet);
for(int rowCnt=0;rowCnt<list.size();rowCnt++){
Object entity=list.get(rowCnt);
HSSFRow row = sheet.createRow(rowCnt + 1);
setCelValue(rowCnt + 1,entity,row,  wb,   sheet); 
}
}
 
try {
OutputStream os = response.getOutputStream();
response.reset();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment; filename="
+ getFileName(fileName));
wb.write(os);
 
} catch (IOException ex) {
log.info("Export Excel file error ! " + ex.getMessage());
}
}
public   void exportBySql(HttpServletResponse response,Session session,Class cls, String querySql,String countSql,
String fileName, String sheetName, String[] colTitle, int rowPerPage)  {

if (rowPerPage <= 10000 && rowPerPage >= 1) {
rpp = rowPerPage;
}
if (!"".equals(sheetName) && null != sheetName) {
shtName = sheetName;
} else {
shtName = "sheet";
}
 
this.cLabels=colTitle;
 wb = new HSSFWorkbook();
style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//--
SQLQuery query=session.createSQLQuery(querySql).addEntity("order1",cls);
int curPage=1;
int count =getCount(session,countSql);
int totalPage = ((count + rpp) - 1) / rpp;
for(int i=0;i<totalPage;i++){
curPage=i+1;
int firstResult=(curPage - 1) * rpp;
query.setFirstResult(firstResult);
query.setMaxResults(rpp);
List list= query.list();
HSSFSheet sheet = createSheet(wb, curPage,count);
setSheetColumnTitle(sheet);
for(int rowCnt=0;rowCnt<list.size();rowCnt++){
Object entity=list.get(rowCnt);
HSSFRow row = sheet.createRow(rowCnt + 1);
setCelValue(rowCnt + 1,entity,row,wb,sheet); 
}
}
 
try {
OutputStream os = response.getOutputStream();
response.reset();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment; filename="
+ getFileName(fileName));
wb.write(os);
 
} catch (IOException ex) {
log.info("Export Excel file error ! " + ex.getMessage());
}
}
public   List<HSSFRow> insertRow(HSSFWorkbook wb, HSSFSheet sheet,
   int starRow, int rows) {
List<HSSFRow> list=new ArrayList<HSSFRow>();
  sheet.shiftRows(starRow + 1, sheet.getLastRowNum(), rows);

  starRow = starRow - 1;
  
  for (int i = 0; i < rows; i++) {

   HSSFRow sourceRow = null;
   HSSFRow targetRow = null;
   HSSFCell sourceCell = null;
   HSSFCell targetCell = null;
   short m;
   
   starRow = starRow + 1;
   sourceRow = sheet.getRow(starRow);
   targetRow = sheet.createRow(starRow + 1);
   targetRow.setHeight(sourceRow.getHeight());

   for (m = sourceRow.getFirstCellNum(); m < sourceRow.getPhysicalNumberOfCells(); m++) {
    
    sourceCell = sourceRow.getCell(m);
    targetCell = targetRow.createCell(m);
    
    targetCell.setEncoding(sourceCell.getEncoding());
    targetCell.setCellStyle(sourceCell.getCellStyle());
    targetCell.setCellType(sourceCell.getCellType());

   }
   list.add(targetRow);
 }
return list;

}
public int getCount(Session session,String countSql){
 return      ((Long)session.createSQLQuery( countSql )
.addScalar( "count" , Hibernate.LONG)
.uniqueResult()).intValue(); 
}
public   void export(HttpServletResponse response,Session session, String hql,
String fileName, String sheetName, String[] colTitle, int rowPerPage)  {

if (rowPerPage <= 10000 && rowPerPage >= 1) {
rpp = rowPerPage;
}
if (!"".equals(sheetName) && null != sheetName) {
shtName = sheetName;
} else {
shtName = "sheet";
}
 
this.cLabels=colTitle;
 wb = new HSSFWorkbook();
style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//--
Query query = session.createQuery("select count(*) "
+ hql);
int curPage=1;
int count =Integer.parseInt(String.valueOf(query.uniqueResult()));
int totalPage = ((count + rpp) - 1) / rpp;
for(int i=0;i<totalPage;i++){
curPage=i+1;
int firstResult=(curPage - 1) * rpp;
query = session.createQuery(hql);
query.setFirstResult(firstResult);
query.setMaxResults(rpp);
List list= query.list();
HSSFSheet sheet = createSheet(wb, curPage,count);
setSheetColumnTitle(sheet);
for(int rowCnt=0;rowCnt<list.size();rowCnt++){
Object entity=list.get(rowCnt);
HSSFRow row = sheet.createRow(rowCnt + 1);
setCelValue(rowCnt + 1,entity,row, wb,   sheet); 
}
}
 
try {
OutputStream os = response.getOutputStream();
response.reset();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment; filename="
+ getFileName(fileName));
wb.write(os);
 
} catch (IOException ex) {
log.info("Export Excel file error ! " + ex.getMessage());
}
}
abstract public void setCelValue(int rowIndex,Object entity,HSSFRow row,HSSFWorkbook wb, HSSFSheet sheet);
 
 

/**
 * 创建一个Sheet页并返回该对象
 * 
 * @param wb
 *            HSSFWorkbook
 * @param seq
 *            int
 * @return HSSFSheet
 */
private   HSSFSheet createSheet(HSSFWorkbook wb, int seq) {
int sup = seq * rpp;
int sub = (seq - 1) * rpp + 1;
if (sub < 1) {
sub = 1;
}
HSSFSheet sheet=wb.createSheet( );
shtName=shtName + "(" + sub + "-" + sup + ")";
 
wb.setSheetName(seq-1,shtName,HSSFWorkbook.ENCODING_UTF_16);   
 
return sheet;
}
/**
 * 设置Sheet页的列属性 123. *
 * 
 * @param sht
 *            HSSFSheet 124.
 */
private   void setSheetColumnTitle(HSSFSheet sht) {
HSSFRow row = sht.createRow(0);
for (int i = 0; i < cLabels.length; i++) {
HSSFCell cell = row.createCell((short) (i));
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(cLabels[i]);
cell.setCellStyle(style);
//sht.autoSizeColumn(i,true);
}
}
private   HSSFSheet createSheet(HSSFWorkbook wb, int seq,int totalSize) {
int sup = seq * rpp < totalSize ? seq * rpp : totalSize;
int sub = (seq - 1) * rpp + 1;
if (sub < 1) {
sub = 1;
}
HSSFSheet sheet=wb.createSheet( );
 
wb.setSheetName(seq-1,shtName + "(" + sub + "-" + sup + ")",HSSFWorkbook.ENCODING_UTF_16);   
 
return sheet;
}
/**
 * 获得导出的文件全名
 * 
 * @param tableName
 *            String
 * @return String
 */
private static String getFileName(String fileName) {
 fileName+= new Date().getTime() + ".xls";
try {
return URLEncoder.encode(fileName, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
 
}
public void setCellValue(HSSFCell cell, Object value) {
setCellValue(cell, value, null, (short) -1);
}
public void setCellRichTextString(HSSFCell cell, Object valueObj,
Object specialValueObj, short fontColor) {
if (valueObj == null) {
return;
}
String value = String.valueOf(valueObj);
String specialValue = String.valueOf(specialValueObj);
HSSFRichTextString richString = new HSSFRichTextString(String
.valueOf(value));
if (specialValue != null && value.contains(specialValue)) {
HSSFCellStyle cellStyle = cell.getCellStyle();
HSSFFont font = wb.createFont();
font.setColor(fontColor);
richString.applyFont(value.indexOf(specialValue), value
.indexOf(specialValue)
+ specialValue.length(), font);
}

cell.setCellValue(richString.getString());
// System.out.println("我执行了---");
}
public void setCellRichTextString(HSSFCell cell, Object valueObj,short fontColor) {

if (valueObj != null) {
String value = String.valueOf(valueObj);
HSSFRichTextString richString = new HSSFRichTextString(String
.valueOf(value));
HSSFFont font = wb.createFont();
font.setColor(fontColor);
richString.applyFont(font);
cell.setCellValue(richString.getString());
}

}

public void setCellValue(HSSFCell cell, Object value, Object specialValue,
short fontColor) {
// 设置页编码格式,可选.
// targetCell.set(sourceCell.ENCODING_COMPRESSED_UNICODE);
// System.out.println("cell===="+cell);
int cType = cell.getCellType();

switch (cType) {
case HSSFCell.CELL_TYPE_BOOLEAN:
cell.setCellValue(Boolean.valueOf(String.valueOf(value)));
break;
case HSSFCell.CELL_TYPE_ERROR:
cell.setCellErrorValue(Byte.valueOf(value.toString()));

break;
case HSSFCell.CELL_TYPE_FORMULA:
cell.setCellFormula(parseFormula(String.valueOf(value.toString())));

// parseFormula这个函数的用途在后面说明
break;
case HSSFCell.CELL_TYPE_NUMERIC:
cell.setCellValue(Double.valueOf(value.toString()));

break;
case HSSFCell.CELL_TYPE_STRING:
setCellRichTextString(cell, value, specialValue, fontColor);
// cell.setCellValue(new HSSFRichTextString(String.valueOf(value)));
break;
case HSSFCell.CELL_TYPE_BLANK:
if (value != null)
cell.setCellValue(value.toString());
break;
default:
System.out.println("cType=" + cType + "  setCellValue 没有匹配项");
break;
}
}

public Object getCellValue(HSSFCell cell) {

int cType = cell.getCellType();

switch (cType) {
case HSSFCell.CELL_TYPE_BOOLEAN:

return cell.getBooleanCellValue();

case HSSFCell.CELL_TYPE_ERROR:

return cell.getErrorCellValue();

case HSSFCell.CELL_TYPE_FORMULA:
return parseFormula(cell.getCellFormula());
// parseFormula这个函数的用途在后面说明

case HSSFCell.CELL_TYPE_NUMERIC:

return cell.getNumericCellValue();

case HSSFCell.CELL_TYPE_STRING:

//return cell.getRichStringCellValue();
return cell.getStringCellValue();
case HSSFCell.CELL_TYPE_BLANK:
return cell.getStringCellValue();
default:
System.out.println("cType=" + cType + "  getCellValue 没有匹配项");
return null;

}

}

private String parseFormula(String pPOIFormula) {
final String cstReplaceString = "ATTR(semiVolatile)";
StringBuffer result = null;
int index;
result = new StringBuffer();
index = pPOIFormula.indexOf(cstReplaceString);
if (index >= 0) {
result.append(pPOIFormula.substring(0, index));
result.append(pPOIFormula.substring(index
+ cstReplaceString.length()));
} else {
result.append(pPOIFormula);
}
return result.toString();
}
}



---调用方式
//导出号码订单
public void exportExcelNum(HttpServletResponse response,  String querySql,String countSql,
String fileName, String sheetName, final String[] colTitle, int rowPerPage,final String AccMoney,final String ty){
ExcelUtil2 excelUtil=new ExcelUtil2(){
@Override
public void setCelValue(int rowIndex,Object entity,HSSFRow row,HSSFWorkbook wb, HSSFSheet sheet) {
// TODO Auto-generated method stub
TOrderDTO dto=(TOrderDTO) entity;
List<TItemDTO> items=dto.getItems();
int i=0;
for(TItemDTO item:items){
if(item==null)
continue;
if(!(item.getSubType()).equals(ty))
continue;
System.out.println("--------"+i);
if(i>0){
  row=this.insertRow(wb, sheet, rowIndex+i-1, 1).get(0);
}
for(int col=0;col<colTitle.length;col++){
HSSFCell cell = row.createCell((short) col);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
String title=colTitle[col].trim();
sheet.setColumnWidth((short) col,  (short )5000);
if(title.equals("下单日期")||title.equals("下单时间")){
cell.setCellValue(dto.getOrderTime()==null?"":DateUtil.getFormatDate(dto.getOrderTime(),"yyyy-MM-dd hh:mm:ss"));
continue;
}
else if(title.equals("持有人")){
cell.setCellValue(dto.getConsignee()==null?"":item.getItemInfo().getOwnerName());
continue;
}
else if(title.equals("支付状态") ){
cell.setCellValue(dto.getPayStateChar()  );
continue;
}
else if(title.equals("子订单")||title.equals("子订单编号")||title.equals("子订单号")){
cell.setCellValue(item.getId());
continue;
}
else if(title.equals("状态")||title.equals("物流状态")){
cell.setCellValue( item.getWlstatusChar() );
continue;
}
else if(title.equals("金额(/元)") ){
cell.setCellValue( item.getSubtotal()+"" );
continue;
}
else if(title.equals("订单状态") ){
if("0".equals(dto.getState())){
cell.setCellValue("生成订单");
}else if("1".equals(dto.getState())){
cell.setCellValue("已结单");
}else if("2".equals(dto.getState())){
cell.setCellValue("作废");
}else{
cell.setCellValue("");
}
continue;
}
else if(title.equals("商品名称") ){
cell.setCellValue( item.getProduct()==null?"":item.getProduct().getName()+"" );
continue;
}
else if(title.equals("所在地") ){
Map<String, String> cityMap = OrderUtil.putAreaToMap();
cell.setCellValue(cityMap.get(item.getProduct().getUndefine1())+"");
continue;
}
else if(title.equals("截止日期")||title.equals("截止时间")){
cell.setCellValue(dto.getOrderEndTime()==null?"":DateUtil.getFormatDate(dto.getOrderEndTime(),"yyyy-MM-dd hh:mm:ss"));
continue;
}
else if(title.equals("营业厅")){
cell.setCellValue(item.getItemInfo()==null?"":item.getItemInfo().getOFFICENAME()+"");
continue;
}
else{
cell.setCellValue( title+" ,没有对应的列" );
}
 
}
i++;
}
row=this.insertRow(wb, sheet, rowIndex+i-1, 1).get(0);
for(int col=0;col<colTitle.length;col++){
if(col==colTitle.length-1){
 HSSFCell cell = row.createCell((short) col);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
 sheet.setColumnWidth((short) col,  (short )5000);
 cell.setCellValue("已收金额:"+AccMoney);
}else{
HSSFCell cell = row.createCell((short) col);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
sheet.setColumnWidth((short) col,  (short )5000);
cell.setCellValue("");
}
}
 
}
};
 
excelUtil.exportBySql(    response,  this.getSession(),  TOrderDTO.class,   querySql,  countSql,fileName,   sheetName,   colTitle,   rowPerPage);
  
}

分享到:
评论

相关推荐

    导出 excelUtil

    在实际项目中,"导出excelUtil"常用于报表生成、数据导出功能,例如用户可以在Web应用中下载包含他们数据的定制报告。此外,它也常用于数据导入,允许用户上传Excel文件以批量插入或更新数据库中的数据。 总的来说...

    excelUtil导入导出

    3. **模板化导出**:ExcelUtil可能提供了一种模板机制,允许开发者定义一个Excel模板,然后填充数据生成报告或报表。这种方式在处理批量生成类似格式的Excel文件时非常高效。 4. **错误处理**:在导入数据时,...

    excelUtils公共导出支持xls与xlsx

    "ExcelUtil.java"很可能包含了`ExcelUtil`类的实现,这个类提供了导出和导入Excel文件的功能。它可能包含了一系列静态方法,如`exportExcel()`和`importExcel()`,分别用于创建新的Excel文件或将数据导入到现有文件...

    ExcelUtil便捷读取工具 v3.1.6.zip

    ExcelUtil便捷读取工具是一款高效且易用的Java库,专为处理Excel数据而设计,适用于各种开发场景,如数据分析、报表生成、数据导入导出等。在v3.1.6版本中,它提供了更稳定的功能和优化的性能,让开发者能够更便捷地...

    excelUtil.zip

    在Java编程领域,Excel处理是一项常见的任务,尤其在数据导入导出、报表生成等场景中。本压缩包"excelUtil.zip"提供了两个关键类:`ExcelUtils`和`ExcelData`,它们是针对Excel操作的工具类,方便我们进行Excel文件...

    Excel导出数据(根据Excel模板定义)

    "Excel导出数据(根据Excel模板定义)"这个主题涉及到的核心技术是如何根据预设的Excel模板生成和导出数据,通常用于批量生成报表或者进行复杂的数据呈现。下面将详细解释这一过程及其相关知识点。 1. **Excel模板...

    导出excel错误处理

    ### 导出Excel错误处理及解决方案 #### 异常详情解析 在进行Web请求处理过程中,遇到一个未处理的异常情况。根据提供的异常详细信息,我们可以了解到具体的异常类型及其原因。异常类型为`System....

    java 导入导出excel文件(工具类)

    在Java编程中,导入和导出Excel文件是一项常见的任务,特别是在数据处理、报表生成和数据分析等领域。本知识点将深入探讨如何使用Java实现这一功能,并提供一个集成工具类的示例。 首先,Java中处理Excel文件通常...

    操作Excel的工具ExcelUtil源码

    ExcelUtil常被用于数据导入导出、报表生成、数据分析等领域。例如,Web应用中,用户上传Excel文件后,系统可以利用ExcelUtil读取数据并进行处理,或者将处理结果导出为Excel。 8. **学习与实践** 通过阅读和理解...

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

    这个库主要适用于那些需要在Web应用中生成Excel报告或导出数据的场景,比如数据分析、报表生成等。EasyUIPoI的名字可能来源于流行的前端框架EasyUI,但其核心功能是后端的Excel处理。 Apache POI是Apache软件基金会...

    Excel导出工具类

    在IT行业中,Excel作为一种强大的电子表格工具,常用于数据分析、报表制作等场景。为了方便开发者将程序中的数据快速导出到Excel文件,自定义Excel导出工具类是常见的做法。本篇文章将深入探讨如何利用Java的Apache ...

    Excel工具类ExcelUtil

    在Java编程中,处理Excel数据是常见的需求,特别是在数据分析、报表生成或者数据导入导出场景下。ExcelUtil作为一个便捷的工具类,可以帮助开发者更高效地完成这些任务。 描述中提到的“NULL”表明没有提供具体的...

    Java根据模板导出Excel报表并复制模板生成多个Sheet页

    本文提供了一个工具类ExcelUtil,用于根据模板导出Excel报表并复制模板生成多个Sheet页。该工具类使用POI技术来读取模板文件,并将数据写入到Excel文件中。 知识点七:模板路径的使用 模板路径是指Excel模板文件的...

    excel通过配置实现导入导出和校验

    在IT行业中,Excel由于其强大的数据处理能力,常被用于数据交换、报表生成以及数据分析等场景。本主题聚焦于如何通过配置实现Excel的导入、导出及校验功能,这在许多业务系统中是非常常见的需求。这样的方法可以极大...

    ExcelUtil,Excel的应用程序列表.zip

    在实际应用中,ExcelUtil常用于报表生成、数据导入导出、批量处理数据等场景。例如,你可以用它来生成销售报告,从数据库中提取数据并格式化为Excel,或者将用户填写的Excel表格内容导入到系统中进行分析。 压缩包...

    poi导出数据到excel里

    这个功能在数据分析、报表生成或者数据导出等场景中非常常见。以下是对Apache POI导出数据到Excel的详细解释: 1. **Apache POI简介**: Apache POI 是一个强大的Java API,它允许开发者读取、创建、修改Microsoft...

    导入导出文件优化版.zip

    在IT行业中,数据的导入与导出是日常工作中不可或缺的一部分,尤其在数据分析、报表生成以及系统间的数据交换中。Excel由于其易用性和强大的数据处理能力,常常被用作数据交换的媒介。针对"导入导出文件优化版.zip...

    ssm+ maven+excel导入导出源码

    在这个“ssm+maven+excel导入导出源码”项目中,我们可以看到开发者提供了实现Excel数据导入导出功能的源代码,这在诸如数据处理、报表生成等场景中非常实用。 1. **Spring框架**:Spring是Java企业级应用的核心...

    ExcelUtil_java读取Excel_2007_

    在Java编程中,处理Excel文件是一项常见的任务,特别是在数据导入导出、数据分析或者报表生成等场景。本示例主要关注如何使用Java读取2007年及以后版本的Excel文件,即.xlsx格式,这是由Microsoft Office 2007引入的...

Global site tag (gtag.js) - Google Analytics