导出Excel offer2007以上
package cn.knet.data.untils; import java.awt.Color;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExportExcelUtil2<T> { public void exportExcel(Collection<T> dataset,String[] headers,String path,String excelName,String sheetName,String title) throws IOException
{
// 声明一个工作薄
XSSFWorkbook workbook = new XSSFWorkbook();
// 生成一个表格
XSSFSheet sheet=workbook.createSheet(); // 设置表格默认列宽度为15个字节
//要是提供的sheetName就给第一个表格设置名字
if(StringUtils.isNotBlank(sheetName))
{
workbook.setSheetName(0,sheetName);
}
//设置行的默认值
int row_num=0;
if(StringUtils.isNotBlank(title)){
XSSFRow rowtitle = sheet.createRow(row_num);
rowtitle.setHeightInPoints(23);
XSSFCell cellHead = rowtitle.createCell(0);
cellHead.setCellValue(title);
//合并标题的单元格
sheet.addMergedRegion(new CellRangeAddress(row_num,row_num,0,headers.length-1));//startRow,endRow,startColumn,endColumn
//设置总标题样式==============================
//设置字体
XSSFFont font_title = workbook.createFont();
font_title.setColor(new XSSFColor(Color.black).getIndexed());
font_title.setFontHeightInPoints((short) 16);
font_title.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
//设置title样式
XSSFCellStyle style_title = workbook.createCellStyle();
style_title.setAlignment(XSSFCellStyle.ALIGN_CENTER);
style_title.setBorderBottom(XSSFCellStyle.BORDER_THIN);
style_title.setBorderLeft(XSSFCellStyle.BORDER_THIN);
style_title.setBorderRight(XSSFCellStyle.BORDER_THIN);
style_title.setBorderTop(XSSFCellStyle.BORDER_THIN);
style_title.setFont(font_title);
//设置cell样式
cellHead.setCellStyle(style_title);
//解决合并单元格后加边框问题
for(int i=1;i<headers.length;i++){
cellHead = rowtitle.createCell(i);
cellHead.setCellValue("");
cellHead.setCellStyle(style_title);
} //行数加1行
row_num=row_num+1;
} //设置head样式============================================
// 生成一个字体
XSSFFont font_head = workbook.createFont();
font_head.setColor(new XSSFColor(Color.BLACK).getIndexed());
font_head.setFontHeightInPoints((short) 12);
font_head.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
// 生成head样式
XSSFCellStyle style_head = workbook.createCellStyle();
// 把字体应用到当前的样式
style_head.setFont(font_head);
// 设置这些样式
// style_head.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
//style_head.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style_head.setBorderBottom(XSSFCellStyle.BORDER_THIN);
style_head.setBorderLeft(XSSFCellStyle.BORDER_THIN);
style_head.setBorderRight(XSSFCellStyle.BORDER_THIN);
style_head.setBorderTop(XSSFCellStyle.BORDER_THIN);
style_head.setAlignment(XSSFCellStyle.ALIGN_CENTER);
//设置head样式======End==================================
//设置body样式==================================================
// 生成另一个字体
XSSFFont font_body = workbook.createFont();
font_body.setBoldweight(XSSFFont.BOLDWEIGHT_NORMAL);
//生成body样式
XSSFCellStyle style_body = workbook.createCellStyle();
// 把字体应用到当前的样式
style_body.setFont(font_body);
// style_body.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
//style_body.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style_body.setBorderBottom(XSSFCellStyle.BORDER_THIN);
style_body.setBorderLeft(XSSFCellStyle.BORDER_THIN);
style_body.setBorderRight(XSSFCellStyle.BORDER_THIN);
style_body.setBorderTop(XSSFCellStyle.BORDER_THIN);
style_body.setAlignment(XSSFCellStyle.ALIGN_CENTER);
style_body.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); // 添加表格标题行
XSSFRow row_head = sheet.createRow(row_num);
row_head.setHeightInPoints(25);
for (int i = 0; i < headers.length; i++) {
XSSFCell cell = row_head.createCell(i);
cell.setCellStyle(style_head);
XSSFRichTextString text = new XSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
//添加标题行后行号加1
row_num=row_num+1;
//添加body
// 遍历集合数据,产生数据行
//Field[] fields = types.getDeclaredFields();
Iterator<T> it = dataset.iterator();
while (it.hasNext()) {
System.err.println(row_num);
XSSFRow row_body = sheet.createRow(row_num);
row_body.setHeightInPoints(20); T t = (T) it.next();
// 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
Field[] fields = t.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) { //设置列宽度自适应
sheet.autoSizeColumn(i,true); XSSFCell cell = row_body.createCell(i);
cell.setCellStyle(style_body);
Field field = fields[i];
String fieldName = field.getName();
String getMethodName = "get"+ fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);
try {
Class<? extends Object> tCls = t.getClass();
Method getMethod = tCls.getMethod(getMethodName,new Class[] {});
Object value = getMethod.invoke(t, new Object[] {});
// 判断值的类型后进行强制类型转换
String textValue = null;
if (value instanceof Integer) {
int intValue = (Integer) value;
cell.setCellValue(intValue);
}
else if (value instanceof Float) {
float fValue = (Float) value;
textValue = String.valueOf(fValue);
cell.setCellValue(textValue);
}
else if (value instanceof Double) {
double dValue = (Double) value;
textValue = String.valueOf(dValue);
cell.setCellValue(textValue);
}
else if (value instanceof Long) {
long longValue = (Long) value;
cell.setCellValue(longValue);
}
else if (value instanceof Date) {
Date date = (Date) value;
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
textValue = sdf.format(date);
}else {
// 其它数据类型都当作字符串简单处理
textValue = value.toString();
} if (textValue != null) {
Pattern p = Pattern.compile("^//d+(//.//d+)?{1}");
Matcher matcher = p.matcher(textValue);
if (matcher.matches()) {
// 是数字当作double处理
cell.setCellValue(Double.parseDouble(textValue));
} else {
XSSFRichTextString richString = new XSSFRichTextString(textValue);
XSSFFont font3 = workbook.createFont();
font3.setColor(new XSSFColor(Color.BLACK).getIndexed());
richString.applyFont(font3);
cell.setCellValue(richString);
}
} } catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} finally {
// 清理资源
}
}
row_num=row_num+1;
}
OutputStream os = new FileOutputStream(new File(path+"/"+excelName+".xlsx"));
try{
workbook.write(os);
}
catch(Exception ex){
ex.printStackTrace();
}
finally{
os.flush();
os.close();
} } public void exportExcelFast(Collection<T> dataset,String[] headers,Class<T> t,String path,String excelName,String sheetName) throws IOException
{
FileOutputStream output = new FileOutputStream(new File(path+"/"+excelName+".xlsx")); //读取的文件路径
// 声明一个工作薄
XSSFWorkbook workbook = new XSSFWorkbook();
// 生成一个表格
XSSFSheet sheet=workbook.createSheet(sheetName);
XSSFRow row_head = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
XSSFCell cell = row_head.createCell(i);
XSSFRichTextString text = new XSSFRichTextString(headers[i]);
cell.setCellValue(text);
} Field[] fields = t.getDeclaredFields();
int row_num=1;
for (T tt : dataset) { XSSFRow row_body = sheet.createRow(row_num);
for(int i=0;i<fields.length;i++){
XSSFCell cell = row_body.createCell(i);
Object v;
try {
v = BeanUtils.getProperty(tt, fields[i].getName());
String value =v==null?"":v.toString();
cell.setCellType(XSSFCell.CELL_TYPE_STRING);//文本格式
cell.setCellValue(value);//写入内容
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//.getBeanProperty(tt, fields[i].getName()); }
row_num++;
} workbook.write(output);
output.flush();
output.close();
}
public static void main(String[] args){
/* List<Flow> list = new ArrayList<Flow>();
for(int i=0;i<50000;i++)
{
Flow f = new Flow();
f.setCurkey("枯萎奇才霏霏夺标需要奇怪棒棒酩酊大醉大模大样大模大样"+i);
f.setFlow(i);
list.add(f);
}
ExportExcelUtil2<Flow> ex = new ExportExcelUtil2<Flow>();
String[] headers= {"KEY","流水"};
try {
//ex.exportExcelFast(list, headers,Flow.class, "D:\\", "MYExcel", "MySheet");
ex.exportExcel(list, headers, "D:\\", "MYExcel", "MySheet","");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
} }
导出Excel offer2007以上的更多相关文章
- C#使用Aspose.Cells导出Excel简单实现
首先,需要添加引用Aspose.Cells.dll,官网下载地址:http://downloads.aspose.com/cells/net 将DataTable导出Xlsx格式的文件下载(网页输出) ...
- 利用poi导出Excel
import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ...
- [django]数据导出excel升级强化版(很强大!)
不多说了,原理采用xlwt导出excel文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条 ...
- NPOI导出Excel
using System;using System.Collections.Generic;using System.Linq;using System.Text;#region NPOIusing ...
- ASP.NET Core 导入导出Excel xlsx 文件
ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...
- asp.net DataTable导出Excel 自定义列名
1.添加引用NPOI.dll 2.cs文件头部添加 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.IO; 3.代码如 ...
- Aspose.Cells导出Excel(1)
利用Aspose.Cells导出excel 注意的问题 1.DataTable的处理 2.进行编码,便于中文名文件下载 3.别忘了Aspose.Cells.dll(可以自己在网上搜索) public ...
- 前端导出Excel兼容写法
今天整理出在Web前端导出Excel的写法,写了一个工具类,对各个浏览器进行了兼容. 首先,导出的数据来源可能有两种: 1. 页面的HTML内容(一般是table) 2. 纯数据 PS:不同的数据源, ...
- JS导出excel 兼容ie、chrome、firefox
运用js实现将页面中的table导出为excel文件,页面显示如下: 导出的excel文件显示如下: 实现代码: <!DOCTYPE html> <html> <head ...
随机推荐
- ArcGIS Engine开发之旅08--和查询相关的对象和接口
原文:ArcGIS Engine开发之旅08--和查询相关的对象和接口 查询在GIS领域应该是一个很频繁的操作,在GIS中除了具有属性查询(和其他关系型数据库的查询类似),还提供了空间查询.在介绍查询 ...
- TCP 协议中MSS的理解
在介绍MSS之前我们必须要理解下面的几个重要的概念.MTU: Maxitum Transmission Unit 最大传输单元MSS: Maxitum Segment Size 最大分段大小PPPoE ...
- 拷贝数据库和VS项目
2个项目的相似度比较大,在另一个的基础上做修改,不想从头再来,把数据库和项目如何克隆一份呢? 数据库复制:(SQLSERVER2008) 任务-备份数据库 然后还原到新建的数据库名下即可 VS项目复制 ...
- 实现 UISegmentControl 与 UIScrollView的上下级联(分别在相应的方法中加入级联代码)
实现 UISegmentControl 与 UIScrollView的上下级联,需要在 [segmentCtr addTarget:self action:@selector(segmentedCon ...
- JS-003-innerText 与 innerHTML 区别
此文主要讲述在使用 innerText 和 innerHTML 获取元素中间值时的差别,我个人将二者的区别简单的理解为: webelement.innerText : 获取的是页面元素显示的文本 we ...
- Java学习-011-创建文件实例及源代码
此文源码主要为应用 Java 创建文件的源代码.若有不足之处,敬请大神指正,不胜感激! 创建文件的源代码如下所示: /** * @function 文件操作:创建文件.若文件不存在,则直接创建文件:若 ...
- 《JAVA NIO》第一章 简介
1.2 CPU已不再是束缚 相反,是JVM 自身在I/O 方面效率欠佳.操作系统与Java 基于流的I/O模型有些不匹配. 操作系统要移动的是大块数据(缓冲区),这往往是在硬件直接存储器存取(DMA) ...
- 网站启动SSL, http变为https后,session验证码错误解决方法
网站启动SSL, http变为https后,session验证码错误解决方法 最近公司需要后台启动安全证书,证书安装完毕后,后台老提示 验证码错误,经过几天的研究,此问题已经得到有效解决,现把方法 ...
- http://blog.sina.com.cn/s/blog_705cc5dd01012ehb.html
http://blog.sina.com.cn/s/blog_705cc5dd01012ehb.html
- Docker镜像的获取与删除
Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Dicker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库 ...