------------------------------------------------------初始化xls操纵类--------

import java.io.File;
import java.io.FileInputStream;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set; 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.HSSFDataFormat;
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.poifs.filesystem.POIFSFileSystem; /**
* 功能描述: Excel操纵类
* @author: andy.li
* @date: 2011-4-22
*/
public class StyleExcelTemplate {
private static Log logger = LogFactory.getLog(StyleExcelTemplate.class);
private static final String DATAS = "datas"; private HSSFWorkbook workbook;
private HSSFSheet sheet;
private HSSFRow currentRow;
private Map styles = new HashMap(); //数据行的默认样式配置
private Map confStyles = new HashMap(); //通过设置"#STYLE_XXX"来标识的样式配置
private int initrow; //数据输出起始行
private int initcol; //数据输出起始列
private int num; //index number
private int currentcol; //当前列
private int currentRowIndex; //当前行index
private int rowheight = 22; //行高
private int lastLowNum = 0;
private String cellStyle = null; private StyleExcelTemplate() {
} /**
* 使用默认模板创建ExcelTemplate对象
* @return 根据模板已初始化完成的ExcelTemplate对象
*/
public StyleExcelTemplate newInstance(){
return newInstance("templates/default.xls");
} /**
* 指定模板创建ExcelTemplate对象
* @param templates 模板名称
* @return 根据模板已初始化完成的ExcelTemplate对象
*/
public static StyleExcelTemplate newInstance(String templates){
try {
StyleExcelTemplate excel = new StyleExcelTemplate();
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(new File(templates)));
excel.workbook = new HSSFWorkbook(fs);
excel.sheet = excel.workbook.getSheetAt(0);
//查找配置
excel.initConfig();
//查找其它样式配置
excel.readCellStyles();
//删除配置行
excel.sheet.removeRow( excel.sheet.getRow(excel.initrow) );
return excel;
} catch (Exception e) {
e.printStackTrace();
logger.trace("创建Excel对象出现异常",e);
throw new RuntimeException("创建Excel对象出现异常");
}
} /**
* 设置特定的单元格样式,此样式可以通过在模板文件中定义"#STYLE_XX"来得到,如:
* #STYLE_1,传入的参数就是"STYLE_1"
* @param style
*/
public void setCellStyle(String style){
cellStyle = style;
} /**
* 取消特定的单元格格式,恢复默认的配置值,即DATAS所在行的值
*/
public void setCellDefaultStyle(){
cellStyle = null;
} /**
* 创建新行
* @param index 从0开始计数
*/
public void createRow(int index){
//如果在当前插入数据的区域有后续行,则将其后面的行往后移动
if(lastLowNum > initrow && index > 0){
sheet.shiftRows(index + initrow ,lastLowNum + index,1,true,true);
}
currentRow = sheet.createRow(index + initrow);
currentRow.setHeight((short)rowheight);
currentRowIndex = index;
currentcol = initcol;
} /**
* 根据传入的字符串值,在当前行上创建新列
* @param value 列的值(字符串)
*/
public void createCell(String value){
HSSFCell cell = createCell();
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
HSSFCellStyle cstyle = (HSSFCellStyle)confStyles.get(cellStyle);
if(null==cstyle){
cstyle=workbook.createCellStyle();
}
cell.setCellStyle(cstyle);
cstyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("@"));
cell.setCellValue(value);
}
public void createCell(float value){
HSSFCell cell = createCell();
HSSFCellStyle cstyle = (HSSFCellStyle)confStyles.get(cellStyle);
if(null==cstyle){
cstyle=workbook.createCellStyle();
}
cstyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
cell.setCellStyle(cstyle);
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
DecimalFormat df=new DecimalFormat("#0.00");
cell.setCellValue(Double.parseDouble(df.format(value)));
}
public void createCell(double value){
HSSFCell cell = createCell();
HSSFCellStyle cstyle = (HSSFCellStyle)confStyles.get(cellStyle);
if(null==cstyle){
cstyle=workbook.createCellStyle();
}
cstyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
cell.setCellStyle(cstyle);
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
DecimalFormat df=new DecimalFormat("#0.00");
cell.setCellValue(Double.parseDouble(df.format(value)));
}
public void createNumberCell(Integer value){
HSSFCell cell = createCell();
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellValue(value);
}
/**
* 根据传入的日期值,在当前行上创建新列
* 在这种情况下(传入日期),你可以在模板中定义对应列
* 的日期格式,这样可以灵活通过模板来控制输出的日期格式
* @param value 日期
*/
public void createCell(Date value){
HSSFCell cell = createCell();
cell.setCellValue(value);
} /**
* 创建当前行的序列号列,通常在一行的开头便会创建
* 注意要使用这个方法,你必需在创建行之前调用initPageNumber方法
*/
public void createSerialNumCell(){
HSSFCell cell = createCell();
cell.setCellValue(currentRowIndex + num);
} @SuppressWarnings("deprecation")
private HSSFCell createCell(){
HSSFCell cell = currentRow.createCell((short)currentcol++);
HSSFCellStyle style = (HSSFCellStyle)styles.get(new Integer(cell.getCellNum()));
if(style != null){
cell.setCellStyle(style);
} //设置了特定格式
if(cellStyle != null){
HSSFCellStyle ts = (HSSFCellStyle)confStyles.get(cellStyle);
if(ts != null){
cell.setCellStyle(ts);
}
}
return cell;
} /**
* 获取当前HSSFWorkbook的实例
* @return
*/
public HSSFWorkbook getWorkbook(){
return workbook;
} /**
* 获取模板中定义的单元格样式,如果没有定义,则返回空
* @param style 模板定义的样式名称
* @return 模板定义的单元格的样式,如果没有定义则返回空
*/
public HSSFCellStyle getTemplateStyle(String style){
return (HSSFCellStyle)confStyles.get(style);
} /**
* 替换模板中的文本参数
* 参数以“#”开始
* @param props
*/
public void replaceParameters(Properties props){
if(props == null || props.size() == 0){
return;
}
Set propsets = props.entrySet();
Iterator rowit = sheet.rowIterator();
while(rowit.hasNext()){
HSSFRow row = (HSSFRow)rowit.next();
if(row == null) continue;
int cellLength = row.getLastCellNum();
for(int i=0; i<cellLength; i++){
HSSFCell cell = (HSSFCell)row.getCell((short)i);
if(cell == null) continue;
String value = cell.getStringCellValue();
if(value != null && value.indexOf("#") != -1){
for (Iterator iter = propsets.iterator(); iter.hasNext();) {
Map.Entry entry = (Map.Entry) iter.next();
value = value.replaceAll("#"+entry.getKey(),(String)entry.getValue());
}
}
cell.setCellValue(value);
}
}
} /**
* 初始化Excel配置
*/
private void initConfig(){
lastLowNum = sheet.getLastRowNum();
Iterator rowit = sheet.rowIterator();
boolean configFinish = false;
while(rowit.hasNext()){
if(configFinish){
break;
}
HSSFRow row = (HSSFRow)rowit.next();
if(row == null) continue;
int cellLength = row.getLastCellNum();
int rownum = row.getRowNum();
for(int i=0; i<cellLength; i++){
HSSFCell cell = (HSSFCell)row.getCell((short)i);
if(cell == null) continue;
String config = cell.getStringCellValue();
if(DATAS.equalsIgnoreCase(config)){
//本行是数据开始行和样式配置行,需要读取相应的配置信息
initrow = row.getRowNum();
rowheight = row.getHeight();
initcol = cell.getCellNum();
configFinish = true;
}
if(configFinish){
readCellStyle(cell);
}
}
}
} /**
* 读取cell的样式
* @param cell
*/
@SuppressWarnings("unchecked")
private void readCellStyle(HSSFCell cell){
HSSFCellStyle style = cell.getCellStyle();
if(style == null) return;
styles.put(new Integer(cell.getCellNum()),style);
} /**
* 读取模板中其它单元格的样式配置
*/
private void readCellStyles(){
Iterator rowit = sheet.rowIterator();
while(rowit.hasNext()){
HSSFRow row = (HSSFRow)rowit.next();
if(row == null) continue;
int cellLength = row.getLastCellNum();
for(int i=0; i<cellLength; i++){
HSSFCell cell = (HSSFCell)row.getCell((short)i);
if(cell == null) continue;
String value = cell.getStringCellValue();
if(value != null && value.indexOf("#STYLE_") != -1){
HSSFCellStyle style = cell.getCellStyle();
if(style == null) continue;
confStyles.put(value.substring(1),style);
//remove it
row.removeCell(cell);
}
}
}
}
public void setValue(int rowNum,int colNum,String value){
HSSFRow row=this.sheet.getRow(rowNum);
HSSFCell cell=row.getCell((short)colNum);
if (cell==null){
cell = row.createCell((short) colNum);
}
cell.setCellValue(value);
}
public void mergedRegion(int rowNum,int colNum,int cols,int rows){
sheet.addMergedRegion(new Region(rowNum,(short)colNum,cols,(short)rows));
}
} ----------------------------------------------------生成xls-------------------------------------------------------------------------- public static void main(String[] args) throws Exception {
String realpath = "E://expFuyou.xls";
StyleExcelTemplate template = StyleExcelTemplate.newInstance(realpath);
String offerName = "AC01_"+DateUtils.formatDate(new Date())+"";
String path = System.getProperty("java.io.tmpdir");
//String ff=path+File.separator+offerName+".xls"; 在项目当中用 需加 File.separator 这个 main 慢方法不需要
String ff=path+offerName+".xls";
int count=0;
template.createRow(count);
template.createCell("序号");
template.createCell("开户行");
template.createCell("扣款人银行账号");
template.createCell("户名");
template.createCell("金额(单位:元)");
template.createCell("企业流水账号");
template.createCell("备注");
template.createCell("手机号");
template.createCell("证件类型");
template.createCell("证件号");
List<Object> l = new ArrayList<Object>();
for (int i = 0; i < 20; i++) {
l.add(i);
}
List<Object> ul = new ArrayList<Object>();
for (int i = 0; i < 20; i++) {
ul.add(i);
}
List<Object> list = new ArrayList<Object>();
list.add(l);
list.add(ul); for (int i = 0; i < list .size(); i++) {
count++;
template.createRow(count);//创建新行
List<Object> arr=(List<Object>) list .get(i);
template.createNumberCell(count);//序号
template.createCell(arr.get(1).toString());
template.createCell(arr.get(2).toString());
template.createCell(arr.get(3).toString());
template.createCell(arr.get(4).toString());
template.createCell(arr.get(5).toString());
template.createCell(arr.get(6).toString());
template.createCell(arr.get(7).toString());
template.createCell(arr.get(8).toString());
template.createCell(arr.get(9).toString());
template.createCell(arr.get(10).toString());
}
FileOutputStream fos=new FileOutputStream(ff);
template.getWorkbook().write(fos);//写入文件
fos.close();
}

java生成xls的更多相关文章

  1. Java生成和操作Excel文件(转载)

    Java生成和操作Excel文件   JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...

  2. java生成简单Excel工作薄

    前言: 代码都是建立在实际需求上的,上周做完一个调外部电影券接口的项目,这周产品又要excel表格,大致内容为:券所属影院.图片URL.等信息制作为excel表格,把每次同步过来的数据给他分析. jx ...

  3. java 生成Excel开门篇

    本随笔的Excel所用的poi jar包(3.17版本)链接: https://pan.baidu.com/s/1gaa3dJueja8IraUDYCSLIQ 提取密码: 9xr7 简单实现:两个类: ...

  4. oracle PL/SQL调用Java生成Excel

    现在有个需求,  要求编写oracle存储过程生成Excel文件到指定目录,  但是oracle自己的API貌似不太给力,  所以只能通过另一种更强大的语言来实现了  ——Java.有一个Java框架 ...

  5. java 生成简单word(利用Itext工具),生成简单Excel,以及下载笔记

    1.java 生成简单word(包含图片表格) pom中加入itext 相关依赖 <dependency> <groupId>com.lowagie</groupId&g ...

  6. java导出xls

    package com.spring.mvc.xls; import java.io.File;import java.io.FileInputStream;import java.text.Deci ...

  7. 利用JAVA生成二维码

    本文章整理于慕课网的学习视频<JAVA生成二维码>,如果想看视频内容请移步慕课网. 维基百科上对于二维码的解释. 二维条码是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图 ...

  8. Java生成验证码原理(jsp)

     验证码的作用: 验证码是Completely Automated Public Turing test to tell Computers and Humans Apart(全自动区分计算机和人类的 ...

  9. JAVA生成条形码

    1.下载生成条形码所需要的jar包barcode4j.jar: 2.java生成条形码代码 import java.awt.image.BufferedImage;import java.io.Fil ...

随机推荐

  1. springboot 不同环境读取不同配置

    1. 3个配置文件(更多环境可以建多个): application.properties  (公共配置文件) application-dev.properties  (开发环境) applicatio ...

  2. vue中Echarts的使用-自选效果

    由于项目要求使用数据图,于是我选择了我们的Echarts用来实现效果 一:全局安装Echarts npm install echarts --save(这个安装的是最新的版本有时候回报init未定义) ...

  3. [Skill] git下载助手

    缘由 某些时候需要下载git项目中的某个独立的文件或者文件夹下的内容,克隆全部速度过于慢 搜索下发现有开源的实现,特此记录下 方案 国内不便于fq 源码 服务地址 国外原作者 源码 服务地址 使用方法 ...

  4. Scrapy使用RabbitMQ做任务队列

    前言 一个月没更博客了,这个月也搞了不少东西,但是公司对保密性要求挺高,很多东西都没有办法写出来 想来想去,还是写一篇最近写Scrapy中遇到的跳转问题 如果你的业务需求是遇到301/302/303跳 ...

  5. Laya 断点调试

    Laya 打断点调试并查看堆栈的方法 发现直接加断点不行没办法调试,直接使用这中方法好像可以,选择F5调试 var camera =this.GameScene.getChildByName(&quo ...

  6. node中 path.join 和 path.resovle 区别

    console.log(__dirname) console.log('----') console.log(path.resolve(__dirname, '/a/b', '../')) conso ...

  7. APPIUM-Android自动化元素定位方式

    一.常用元素定位方法 appium从selenium中继承了所有的元素定位方法, 并且增加了一些自己的元素定位方式,下方截图分别为selenium和MobileBy包源码: 但是从继承selenium ...

  8. Java开发手册之安全规约

    1.用户敏感数据禁止直接展示,必须对展示数据进行脱敏.例如手机号.银行卡号等,中间要用*隐藏. 2.发贴.评论.发送即时消息等用户生成内容的场景必须实现防刷.文本内容违禁词过滤等风控策略,一般是用验证 ...

  9. ORA-00245 control file backup operation failed 分析和解决

    一.问题说明 操作系统: RedHat 5.8 数据库: 11.2.0.3 2节点RAC. 使用RMAN 备份的时候,报如下错误: ORA-00245: control file backup fai ...

  10. C# url的编码解码,xml和json的序列化和反序列化

    参考中国慕课网dot net web编程应用程序实践 using System; using System.Collections.Generic; using System.IO; using Sy ...