- 浏览: 46690 次
- 性别:
- 来自: 北京
最新评论
-
mazhi4562qq:
1811710573
cxf rest -
mazhi4562qq:
能不能把需要的jar包给我,谢谢啊。
cxf rest -
MEZboy:
这个删除方法真的不错,值得借鉴
jquery 添加删除 table tr -
jiangaction:
顶
楼主好人
Ibatis 入门经典 实例
pio 操作 Excel 文件 模版类
package util;
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.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
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.poifs.filesystem.POIFSFileSystem;
/**
*
* 功能描述: Excel操纵类,可以根据Excel模板来生成Excel对象<br>
*/
public class ExcelTemplate {
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 ExcelTemplate() {
}
/**
* 使用默认模板创建ExcelTemplate对象
* @return 根据模板已初始化完成的ExcelTemplate对象
*/
public ExcelTemplate newInstance(){
return newInstance("templates/default.xls");
}
/**
* 指定模板创建ExcelTemplate对象
* @param templates 模板名称
* @return 根据模板已初始化完成的ExcelTemplate对象
*/
public static ExcelTemplate newInstance(String templates){
try {
ExcelTemplate excel = new ExcelTemplate();
POIFSFileSystem fs = new POIFSFileSystem(
Thread.currentThread().getContextClassLoader()
.getResourceAsStream(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();
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);
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++);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
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.setEncoding(HSSFCell.ENCODING_UTF_16);
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
*/
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);
}
}
}
}
}
发表评论
-
cxf rest
2013-01-11 17:00 2085<?xml version="1.0" ... -
mysql 纵向 数据 显示横行字段
2012-05-15 14:12 2423CREATE TABLE `t_dictionary` ( ... -
jquery 添加删除 table tr
2011-01-26 17:04 10502<html> <script type= ... -
Spring2.5+Struts2.18+Hibernate3.2 集成开发
2010-03-15 15:50 1158spring 配置 文件 配置信息: <?xml ve ... -
Hibernate Search 注解实例
2010-02-21 16:49 2060pojo 对象 News import java.util. ... -
SSH集成(注解)
2010-01-12 12:48 4026SSH集成(注解)核心配置 可供参考 <?x ... -
mysql数据库备份
2009-12-15 11:12 1008MYSQL导入导出数据库命令 1,进入MySQL ... -
dom4j 解析 xml
2009-11-12 17:31 1150java dom4j 解析 xml 代码 import ... -
java 读取 属性文件
2009-10-26 09:41 1020import java.io.IOException;impo ... -
国家、省、市
2009-10-10 10:05 965级联 js的代码片段 业务 ... -
对象转换成JSON字符串
2009-10-10 09:51 3508package com.sy.test; ... -
jquery 表单验证
2009-10-10 09:41 1049<%@ page language="java ... -
hibernate ehcache 对象缓存
2009-08-31 15:17 1083EHCache的使用场合 1比较少更新表 ... -
oscache 简单使用
2009-08-31 10:25 915OSCache是现在最广泛缓存解决方案,采用的高性能的J2EE ... -
Java发送邮件之Apache Commons Email
2009-08-31 08:37 1335java Email 发送 Apache Commons E ... -
任务调度 Quartz
2009-08-26 14:55 738一个简单的任务调度实例 spring 配置 ... -
java 自定义分页标签
2009-08-20 13:21 1415java 分页代码 分页 ... -
java web 验证码
2009-08-19 10:32 1511java 色彩 验证码 代码 package com ... -
java date 操作
2009-08-17 14:20 979java date 的 常用 操作 impor ... -
伪静态
2009-08-16 12:28 1122URLRewrite 技术 URL 重写是截取传入 W ...
相关推荐
标题中的“PIO的EXCEL的写入和导出”指的是使用编程接口(PIO,Programmable Input/Output)来操作Excel文件,实现数据的写入和读取功能。在IT行业中,这通常涉及到使用特定的库或框架,如Apache POI、JExcelAPI等,...
java操作Excel jar包 pio java开发第三方工具包
在使用 PIO 读取 Excel 文件时,我们也可以使用 optRows 方法来对行级数据进行操作,这样可以避免将整个文件加载到内存中,从而避免了内存溢出问题。 另外,我们可以使用抽象类 HxlsAbstract 来读取 Excel 文件,...
总的来说,基于PIO和Digester的报表操作是一种灵活、高效的解决方案,它结合了XML的配置便利性和Excel的样式与计算能力,为企业级报表系统提供了强大的支持。通过深入理解这些技术,开发者可以构建出功能丰富、...
PIO对excel文件单元格合并等操作~
标题"poi导入导出excel所需jar"和描述"java 使用poi导入导出excel所需的最新jar包"都指向了使用Apache POI进行Excel操作的关键依赖——POI相关的JAR文件。 Apache POI项目始于2001年,旨在为开源社区提供一个API,...
使用注解操作的excel 很好用
标题中的“pio实现报表生成”指的是使用Java编程语言和Pentaho Data Integration(通常缩写为Kettle或PDI,其中PIO是Pentaho Interactive Reporting的简称)工具来创建动态的、自定义的报表并将其导出为Excel格式。...
对于Excel文件的操作主要通过两个核心API来完成:`HSSFWorkbook`和`XSSFWorkbook`,分别对应于旧版Excel(.xls)和新版Excel(.xlsx)文件格式。 #### 二、环境准备 为了能够在项目中使用Apache POI,首先需要添加...
标题中的“pio的jar包”实际上指的是Apache POI项目,这是一个用于处理Microsoft Office格式文档的Java库,特别是针对Excel(.xlsx, .xls)文件。Apache POI提供了一组API,使得开发人员能够轻松地在Java应用程序中...
PIO,全称为“Processing IO”,是一个用于处理各种文件格式,尤其是Microsoft Office格式(如Excel、Word和PowerPoint)的Java库。这个标题指出我们将探讨一个使用PIO的jar包的实际案例,该案例包含详尽的注释,...
它提供了API来操作Microsoft Office格式的文件,包括Excel(`.xls` 和 `.xlsx`)。本文档主要介绍如何使用Apache POI读取Excel中合并的单元格。 #### 二、合并单元格的基本概念 合并单元格是指将多个相邻的单元格...
Java导出Excel是Java开发中常见的需求,尤其是在数据处理和报表生成方面。Apache POI库是Java领域中广泛使用的工具,它允许开发者读写Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。本篇文章将深入讲解...
Apache POI提供了丰富的API,使得开发者能够使用Java处理Excel文件的各种操作,如读取、写入、修改等。描述中还提到,这个资源来自于CSDN(Chinese Software Developer Network)网上平台,一个中国程序员交流和学习...
它可以让我们在Java代码中直接操作Excel的工作表、单元格,进行数据的读取和写入。JXL则是另一个广泛使用的开源库,同样支持Excel文件的操作。两者都可以在Java环境中实现对Excel的增删改查功能,但它们的API和使用...
EasyUIPoI是一款基于Apache POI的Java工具库,专门用于简化Excel的导出操作,尤其在处理模板和合并单元格方面提供了便利。这个库主要适用于那些需要在Web应用中生成Excel报告或导出数据的场景,比如数据分析、报表...
* 这是一个通用的方法,利用了JAVA的反射机制,可以将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上 * * @param title * 表格标题名 * @param headers * 表格属性列名数组 ...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel。在这个"poi导入excel的demo"中,我们将深入探讨如何使用Apache POI库来读取和写入Excel文件,支持.xls(BIFF8格式)和.xlsx(OOXML...
Java中的Apache POI库是处理Microsoft Office格式文件(如Excel)的强大工具,尤其适用于在程序中进行读取、写入和操作Excel数据。本项目基于Java的MyEclipse集成开发环境,提供了完整的源代码示例,帮助开发者了解...
本篇将详细讲解如何使用POI库进行Excel的Sheet页复制,包括数据和样式的跨文件操作。 首先,我们需要在项目中引入Apache POI的依赖。对于Maven项目,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org....