package com.lanou.util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.poi.hpsf.SummaryInformation;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFComment;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
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.apache.poi.hssf.util.CellRangeAddress;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.lanou.bean.Student;
public class ExcelUtil{
public static String NO_DEFINE = "no_define";//未定义的字段
public static String DEFAULT_DATE_PATTERN="yyyy年MM月dd日";//默认日期格式
public static int DEFAULT_COLOUMN_WIDTH = 17;
/**
* 导出Excel 97(.xls)格式 ,少量数据
* @param title 标题行
* @param headMap 属性-列名
* @param jsonArray 数据集
* @param datePattern 日期格式,null则用默认日期格式
* @param colWidth 列宽 默认 至少17个字节
* @param out 输出流
*/
public static void exportExcel(String title,Map<String, String> headMap,JSONArray jsonArray,String datePattern,int colWidth, OutputStream out) {
if(datePattern==null) datePattern = DEFAULT_DATE_PATTERN;
// 声明一个工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
workbook.createInformationProperties();
workbook.getDocumentSummaryInformation().setCompany("*****公司");
SummaryInformation si = workbook.getSummaryInformation();
si.setAuthor("JACK"); //填加xls文件作者信息
si.setApplicationName("导出程序"); //填加xls文件创建程序信息
si.setLastAuthor("最后保存者信息"); //填加xls文件最后保存者信息
si.setComments("JACK is a programmer!"); //填加xls文件作者信息
si.setTitle("POI导出Excel"); //填加xls文件标题信息
si.setSubject("POI导出Excel");//填加文件主题信息
si.setCreateDateTime(new Date());
//表头样式
HSSFCellStyle titleStyle = workbook.createCellStyle();
titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
HSSFFont titleFont = workbook.createFont();
titleFont.setFontHeightInPoints((short) 20);
titleFont.setBoldweight((short) 700);
titleStyle.setFont(titleFont);
// 列头样式
HSSFCellStyle headerStyle = workbook.createCellStyle();
headerStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
HSSFFont headerFont = workbook.createFont();
headerFont.setFontHeightInPoints((short) 12);
headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
headerStyle.setFont(headerFont);
// 单元格样式
HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
HSSFFont cellFont = workbook.createFont();
cellFont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
cellStyle.setFont(cellFont);
// 生成一个(带标题)表格
HSSFSheet sheet = workbook.createSheet();
// 声明一个画图的顶级管理器
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
// 定义注释的大小和位置,详见文档
HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0,
0, 0, 0, (short) 4, 2, (short) 6, 5));
// 设置注释内容
comment.setString(new HSSFRichTextString("可以在POI中添加注释!"));
// 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容.
comment.setAuthor("JACK");
//设置列宽
int minBytes = colWidth<DEFAULT_COLOUMN_WIDTH?DEFAULT_COLOUMN_WIDTH:colWidth;//至少字节数
int[] arrColWidth = new int[headMap.size()];
// 产生表格标题行,以及设置列宽
String[] properties = new String[headMap.size()];
String[] headers = new String[headMap.size()];
int ii = 0;
for (Iterator<String> iter = headMap.keySet().iterator(); iter
.hasNext();) {
String fieldName = iter.next();
properties[ii] = fieldName;
headers[ii] = fieldName;
int bytes = fieldName.getBytes().length;
arrColWidth[ii] = bytes < minBytes ? minBytes : bytes;
sheet.setColumnWidth(ii,arrColWidth[ii]*256);
ii++;
}
// 遍历集合数据,产生数据行
int rowIndex = 0;
for (Object obj : jsonArray) {
if(rowIndex == 65535 || rowIndex == 0){
if ( rowIndex != 0 ) sheet = workbook.createSheet();//如果数据超过了,则在第二页显示
HSSFRow titleRow = sheet.createRow(0);//表头 rowIndex=0
titleRow.createCell(0).setCellValue(title);
titleRow.getCell(0).setCellStyle(titleStyle);
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, headMap.size() - 1));
HSSFRow headerRow = sheet.createRow(1); //列头 rowIndex =1
for(int i=0;i<headers.length;i++)
{
headerRow.createCell(i).setCellValue(headers[i]);
headerRow.getCell(i).setCellStyle(headerStyle);
}
rowIndex = 2;//数据内容从 rowIndex=2开始
}
JSONObject jo = (JSONObject) JSONObject.toJSON(obj);
HSSFRow dataRow = sheet.createRow(rowIndex);
for (int i = 0; i < properties.length; i++)
{
HSSFCell newCell = dataRow.createCell(i);
Object o = jo.get(properties[i]);
String cellValue = "";
if(o==null) cellValue = "";
else if(o instanceof Date) cellValue = new SimpleDateFormat(datePattern).format(o);
else cellValue = o.toString();
newCell.setCellValue(cellValue);
newCell.setCellStyle(cellStyle);
}
没有合适的资源?快使用搜索试试~ 我知道了~
北大青鸟OA办公自动化系统
共202个文件
class:63个
java:47个
jsp:27个
1星 需积分: 46 17 下载量 146 浏览量
2018-01-09
20:17:47
上传
评论
收藏 322KB ZIP 举报
温馨提示
此系统使用maven管理,框架使用了hibernate+struts2+spring框架搭建,适合初学者学习参考。
资源推荐
资源详情
资源评论
收起资源包目录
北大青鸟OA办公自动化系统 (202个子文件)
ExcelUtil.class 13KB
ClaimAction.class 9KB
VerifyCodeUtils.class 8KB
ClaimDaoImpl.class 7KB
StatisticsDaoImpl.class 6KB
SysEmployee.class 6KB
BizClaimVoucher.class 5KB
BizClaimVoucher.class 5KB
SysEmployee.class 5KB
ClaimServiceImpl.class 5KB
TestEmp.class 5KB
BizLeave.class 5KB
BizLeave.class 5KB
TestClaim.class 4KB
SysDepartment.class 4KB
SysDepartment.class 4KB
RandomNumUtil.class 3KB
BizCheckResult.class 3KB
BizClaimVoucherStatistics.class 3KB
BizClaimVoucherStatistics.class 3KB
BizCheckResult.class 3KB
StatisticsAction.class 3KB
StatisticsServiceImpl.class 3KB
BizClaimVouyearStatistics.class 3KB
BizClaimVouyearStatistics.class 3KB
Test2.class 3KB
SysPosition.class 3KB
SysPosition.class 3KB
BizClaimVoucherDetail.class 2KB
BizClaimVoucherDetail.class 2KB
UserAction.class 2KB
TRTCar.class 2KB
PageBean.class 2KB
ClaimResultDaoImpl.class 2KB
EmpDaoImpl.class 2KB
Student.class 2KB
TestEmp.class 1KB
ClaimDetailDaoImpl.class 1KB
EmpServiceImpl.class 1KB
StatisticsDao.class 1KB
StatisticsService.class 1KB
ClaimResultServiceImpl.class 1KB
EmpDaoImpl.class 1KB
BizClaimVoucherBean.class 1018B
ClaimDetailServiceImpl.class 984B
QueryStatistics.class 893B
B$2.class 876B
B$1.class 876B
ClaimService.class 847B
B.class 832B
EmpServiceImpl.class 828B
Emp.class 770B
ClaimDao.class 739B
Constant.class 545B
TestClaim$1.class 530B
EmpService.class 314B
ClaimResultService.class 308B
ClaimResultDao.class 296B
EmpDao.class 293B
ClaimVoucherDetailDao.class 278B
ClaimDetailService.class 276B
EmpService.class 233B
EmpDao.class 221B
.classpath 1KB
org.eclipse.wst.common.component 820B
org.eclipse.wst.jsdt.ui.superType.container 49B
datepicker.css 4KB
datepicker.css 4KB
style.css 4KB
WdatePicker.css 137B
login_01.gif 33KB
logo.gif 9KB
login_02.gif 7KB
right_bg.gif 4KB
login_sub.gif 3KB
copyright.gif 3KB
left_bg.gif 3KB
right.gif 2KB
img.gif 2KB
img.gif 2KB
bg.gif 1KB
submit.gif 1KB
datePicker.gif 1KB
ico.gif 1009B
Top_bg.gif 851B
sub.gif 660B
save.gif 649B
search.gif 600B
delete.gif 588B
edit.gif 588B
add.gif 67B
My97DatePicker.htm 1KB
demo.htm 465B
welcome.html 663B
ExcelUtil.java 15KB
VerifyCodeUtils.java 9KB
ClaimAction.java 8KB
ClaimDaoImpl.java 6KB
BizClaimVoucher.java 5KB
SysEmployee.java 5KB
共 202 条
- 1
- 2
- 3
资源评论
- Next码云2019-03-13垃圾玩意儿,连数据库都没有,你传上来干什么?骗积分吗
你是我天边最美的云菜
- 粉丝: 12
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功