package com.paic.pacz.core.salesmanage.util;

import java.util.List;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.util.CollectionUtils; import com.paic.icore.fa.logging.Log;
import com.paic.pacz.core.salesmanage.dto.ExportExcelDTO;
import com.paic.pacz.core.salesmanage.dto.ExportExcelPropertyDTO; public class ExportExcelUtil{
/** 日志服务 */
private Log log; /**
* 创建sheet
* @param xssfWorkbook 工作簿
* @return
*/
private XSSFSheet createSheet(XSSFWorkbook xssfWorkbook){
XSSFSheet sheet=xssfWorkbook.createSheet();
log.trace("XSSFSheet 创建成功");
return sheet;
} /**
* 设置表头值
* @param sheet
* @param haeders
* @throws Exception
*/
private void setHaeder(XSSFSheet sheet,List<String> haeders){
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
XSSFRow haederRow = sheet.createRow();
for(int i=;i<haeders.size();i++){
//创建表头的cell
XSSFCell xssfCell=haederRow.createCell(i);
//给表头的cell赋值
xssfCell.setCellValue(haeders.get(i));
}
log.trace("Excel 表头信息设置成功");
}
/**
* 给Excel添加数据
* @param datas 数据对象集合
* @param sheet
* @param cellSize 每row的cell数
* @throws Exception
*/
private void setExeclCellValue(List<ExportExcelPropertyDTO> datas,XSSFSheet sheet,Integer cellSize)throws Exception{
//没有数据时终止生成数据
if(CollectionUtils.isEmpty(datas))return;
int rowIndex=;//数据行从第1行开始,第0行为表头
//循环给 每row的每cell赋值
for(ExportExcelPropertyDTO exportExcelPropertyDTO:datas){
XSSFRow dataRow=sheet.createRow(rowIndex);
setCellVal(exportExcelPropertyDTO, dataRow, cellSize);
rowIndex++;
}
//赋值完成 清空数据对象集合
datas.clear();
log.trace("Excel 数据添加成功");
} /**
* 设置cell的值
* @param excelDTO 数据对象
* @param dataRow excel的行
* @param cellSize 每行的cell的数量
* @throws Exception
*/
private void setCellVal(ExportExcelPropertyDTO exportExcelPropertyDTO,XSSFRow dataRow,Integer cellSize)throws Exception{
for(int i=;i<cellSize;i++){
//创建 cell
XSSFCell cell=dataRow.createCell(i);
//生成数据对象的属性(property)
String property="porp"+i;
//获取数据对象中对应属性(property)的值
Object val=null;
try{
val=PropertyUtils.getProperty(exportExcelPropertyDTO, property);
}catch(Exception e){
log.error("获取属性::"+property+" 的值出错!Message:::"+e.getMessage(), e);
}
if(!CommonUtil.isNull(val)){//值不为空时,赋值
if(val instanceof Double){
cell.setCellValue(Double.parseDouble(val.toString()));//统一转成String的数据
}else{
cell.setCellValue(val.toString());//统一转成String的数据
} }else{//值为空时,赋值""
cell.setCellValue("");
}
}
log.trace("每行设置值成功");
} /**
* 导出Excel文件
* @param httpServletResponse
* @param exportExcelDTO
* @throws Exception
*/
public void exportExcel(XSSFWorkbook workbook,ExportExcelDTO exportExcelDTO) throws Exception{
//表头信息为空是终止导出数据
if(CollectionUtils.isEmpty(exportExcelDTO.getHeaders()))return;
//创建sheet
XSSFSheet sheet=createSheet(workbook);
//设置表头信息
setHaeder(sheet, exportExcelDTO.getHeaders());
//获取每一行row的cell的数量
Integer cellSize=exportExcelDTO.getHeaders().size();
//给row的cell赋值
setExeclCellValue(exportExcelDTO.getExcelPropertyDTOs(), sheet,cellSize);
} public Log getLog() {
return log;
}
public void setLog(Log log) {
this.log = log;
} }

工具类Util类的注释书写规范的更多相关文章

  1. C# T4 模板 数据库实体类生成模板(带注释,娱乐用)

     说明:..,有些工具生成实体类没注释,不能和SqlServer的MS_Description属性一起使用,然后照着网上的资源,随便写了个生成模板,自娱自乐向,其实卵用都没有参考教程    1.htt ...

  2. property_自己编写一个读取Property文件的Util类

    读取property文件的Util类: 所需jar包: 编写PropertiesUtil类: package com.west.util.property; import java.io.InputS ...

  3. JAVASE学习笔记:第八章 经常使用类Util工具包之日期类、数字类

    一.Date类   日期类 所在java.Util工具包     before(Date when)   測试此日期是否在指定日期之前. getDay()  获取星期的某一天     getDate( ...

  4. 开发工具、Object类(java基础知识十一)

    1.常见开发工具介绍 * A:操作系统自带的记事本软件 * B:高级记事本软件 * C:集成开发环境 IDE     * (Integrated Development Environment) *  ...

  5. 使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实

    2.使用工厂方法模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...

  6. 1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程

    1.使用简单工厂模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...

  7. [C#] 常用工具类——系统日志类

    using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; namespa ...

  8. idea live template高级知识, 进阶(给方法,类,js方法添加注释)

    为了解决用一个命令(宏)给方法,类,js方法添加注释,经过几天的研究.终于得到结果了. 实现的效果如下: 给Java中的method添加方法: /** * * @Method : addMenu * ...

  9. MyBatis别名与util类技能了解

    1.别名 在java中String类型就是String类型,但是在MyBatis中可不会识别java中的类型,在MyBatis中String类型的别名是'string',小写的String,或者也可以 ...

随机推荐

  1. 国内物联网平台初探(八):中移物联网开放平台OneNet

    平台定位 OneNET是中移物联网有限公司搭建的开放.共赢设备云平台,为各种跨平台物联网应用.行业解决方案,提供简便的云端接入.存储.计算和展现,快速打造物联网产品应用,降低开发成本. IoT Paa ...

  2. hdoj-1827-Summer Holiday(scc+缩点)

    Summer Holiday Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. 测试数据准备中用到到csv写文件知识点

    对于大数据测试中,有时需要自己去准备一些数据,用csvreader来写一个比较大的文件就比较方便,下面我就直接贴示例代码了: package com.acxm.amysu.test;import co ...

  4. html中DTD使用小结

    DTD 是一套关于标记符的语法规则.它是XML1.0版规格得一部分,是html文件的验证机制,属于html文件组成的一部分. DTD:三种文档类型:S(Strict).T(Transitional). ...

  5. NagiosQL安装

        NagiosQL和Nconf是比较好用的Nagios配置工具. 一.安装NagiosQL 1.在服务器终端运行以下命令: ##YUM安装PHP模块yum -y install --disabl ...

  6. 三维重建:Kinect几何映射-SDK景深数据处理

    此文大量使用XML,非C类的代码,看看图即可. 原文链接:Kinect for Windows SDK开发入门(五):景深数据处理 3. 对物体进行测量 像上篇文章中对深度值测量原理进行讨论的那样,像 ...

  7. codeforce 788 A. Funtions again

    链接 A. Functions again 题意 这是一道求最大连续子序列和变形题. 做法 先将abs(a[i+1]-a[i]算出来,然后用两个数组dp[i],cp[i],dp维护其最大值,cp维护其 ...

  8. python tips: is同一性运算符

    is用来判断两个对象是不是同一个对象,通过id()函数取对象地址进行判断.python会缓存一些小的整数,以及只包含字母数字以及下划线的字符串.所以在对于这些值的时候,is判断为True. >& ...

  9. mysql-创建用户报错ERROR 1396 (HY000): Operation CREATE USER failed for 'XXXX'@'XXXX'(转载)

    创建用户: create user ‘test’@’%’ identified by ‘test’; 显示ERROR 1396 (HY000): Operation CREATE USER faile ...

  10. 移动端开发-Day1

    什么是Node? 它是一个基于Chrome v8引擎的js运行环境,采用高效轻量级的事件驱动,非阻塞式的I/O模型. 非阻塞I/O? 例如,当程序运行到某一函数时,调用后立即返回,不需要等待函数执行完 ...