- 浏览: 135740 次
文章分类
最新评论
-
qiaolevip:
求源码:qiaole@vip.qq.com
使用JAVA中的动态代理实现数据库连接池 -
qiaolevip:
使用JAVA中的动态代理实现数据库连接池 -
qiaolevip:
:ro ll:
使用JAVA中的动态代理实现数据库连接池 -
qp7711:
那这里是在哪里传参的?
通用分页实现及其OO设计探讨——转载 -
yaoaijia:
源码怎么都没有啊?
使用JAVA中的动态代理实现数据库连接池
由于近期项目要用到excel来转存页面中的表单数据,对poi操作excel进行了一番了解,写了以下,但总觉的不是很好
特此:发布在此供大家评论,广义集思,还望多多指教
1. workBook处理类
/** * Excel WorkBook工具类 * @author dsy * @version 1.0 */ public class ExcelWorkBook { public HSSFWorkbook workbook = null; public static HSSFWorkbook workbookTemp = null; //设置当前workbookName private String workbookName = null; private HSSFSheet sheet = null; private FileOutputStream fileOut; public ExcelWorkBook() { if(workbook != null) { workbook = null; } workbook = workbookTemp; } public ExcelWorkBook(String workbookName) { workbook = workbookTemp; setWorkbookName(workbookName); } public String getWorkbookName() { return workbookName; } public void setWorkbookName(String workbookName) { workbookName = workbookName; } public HSSFSheet getSheet() { sheet = workbook.createSheet(getWorkbookName()); return sheet; } /** * 用于stylUtils的所需要的workbook必须项所做的处理 * @return */ public static HSSFWorkbook getWorkbook() { return workbookTemp; } public static void setWorkbook(HSSFWorkbook workbook) { workbookTemp = workbook; } /** * 输入当前WorkBook为下载临时文件记录 * @param excelName */ public void writerFileStream(String excelName) { try { fileOut = new FileOutputStream(excelName); workbook.write(fileOut); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { fileOut.flush(); fileOut.close(); if(workbook != null) { workbook = null; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
2. Excel Row工具类
/** * Excel Row工具类 * @author dsy * @version 1.0 */ public class ExcelSheetRow { public ExcelSheetRow() { // TODO Auto-generated constructor stub } public static HSSFSheet sheet = null; /** * 设置当前Sheet名字 */ private static String sheetName = null; private static HSSFRow row = null; /** * 创建当前标题行 * @param sheet * @return */ public static HSSFRow createCurrSheetTitle(ExcelWorkBook work) { HSSFSheet sheet = work.getSheet(); row = sheet.createRow(0); return row; } /** * 创建当前excel记录内容 * @param sheet * @param i * @return */ public static HSSFRow createCurrSheetRecord(ExcelWorkBook work,int i) { HSSFSheet sheet = work.getSheet(); row = sheet.createRow(i+1); return row; } public static String getSheetName() { return sheetName; } public static void setSheetName(String sheetName) { ExcelSheetRow.sheetName = sheetName; } }
3. Excel Cell工具类
/** * Excel Cell工具类 * @author dsy * @version 1.0 */ public class ExcelSheetCell { private static HSSFRow row = null; private static HSSFCell cell = null; /** * 用于产生当前excel标题 * @param sheet [当前工作表单] * @param firstRowValue [标题数组] * @param style [当前单元格风格] */ public static void createCurrRowTitle(ExcelSheetRow sheetRow,ExcelWorkBook work ,String[] firstRowValue,HSSFCellStyle style) { row = sheetRow.createCurrSheetTitle(work); for (int i = 0; i < firstRowValue.length; i++) { cell = row.createCell((short) i); cell.setCellStyle(style); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(firstRowValue[i]); } } /** * 用于生成excel当前记录内容,标题除外 * @param sheet [当前工作表单] * @param beanList [当前数据列表,i=Object[]] * @param style [当前单元格风格] */ public static void createCurrRowRecord(ExcelSheetRow sheetRow,ExcelWorkBook work,List beanList,HSSFCellStyle style) { Object[] obj = null; for (int i = 0; i < beanList.size(); i++) { row = sheetRow.createCurrSheetRecord(work,i); obj = (Object[]) beanList.get(i); if (obj != null) { createExcelCell(row, obj,style); } } } /** * 需要以数组的方式提供当前每条记录 * 通过数组自动判断有多少列,生成当前行 */ private static void createExcelCell(HSSFRow row, Object[] obj,HSSFCellStyle style) { try { for (int i = 0; i < obj.length; i++) { try { if (obj[i].toString() != null) { cell = row.createCell((short) i); cell.setCellStyle(style); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(obj[i].toString()); } } catch (NullPointerException e) { continue; } } } catch (Exception ex) { System.out.print(ex); } } }
4. Excel Style风格工具类
/** * Excel Style风格工具类 * @author dsy * @version 1.0 */ public class ExcelCellStyleUtils{ //标题样式 public static HSSFCellStyle titleStyle; //时间样式 public static HSSFCellStyle dataStyle; //单元格样式 public static HSSFCellStyle nameStyle; //超链接样式 public static HSSFCellStyle linkStyle; public static HSSFFont font; public ExcelCellStyleUtils(ExcelWorkBook work) { titleStyle = linkStyle(work.getWorkbook()); dataStyle = dataStyle(work.getWorkbook()); nameStyle = nameStyle(work.getWorkbook()); linkStyle = linkStyle(work.getWorkbook()); } /** * 超链接样式 * @return HSSFCellStyle */ private static HSSFCellStyle linkStyle(HSSFWorkbook work) { HSSFCellStyle linkStyle = work.createCellStyle(); linkStyle.setBorderBottom((short)1); linkStyle.setBorderLeft((short)1); linkStyle.setBorderRight((short)1); linkStyle.setBorderTop((short)1); linkStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index); linkStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); HSSFFont font = work.createFont(); font.setFontName(HSSFFont.FONT_ARIAL); font.setUnderline((byte)1); font.setColor(HSSFColor.BLUE.index); linkStyle.setFont(font); return linkStyle; } /**s * 单元格样式 * @return HSSFCellStyle */ private static HSSFCellStyle nameStyle(HSSFWorkbook work) { HSSFCellStyle nameStyle = work.createCellStyle(); nameStyle.setBorderBottom((short)1); nameStyle.setBorderLeft((short)1); nameStyle.setBorderRight((short)1); nameStyle.setBorderTop((short)1); nameStyle.setFillForegroundColor(HSSFColor.LIGHT_CORNFLOWER_BLUE.index); nameStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); return nameStyle; } /** * 时间样式 * @return HSSFCellStyle */ private static HSSFCellStyle dataStyle(HSSFWorkbook work) { HSSFCellStyle dataStyle = work.createCellStyle(); dataStyle.setBorderBottom((short)1); dataStyle.setBorderLeft((short)1); dataStyle.setBorderRight((short)1); dataStyle.setBorderTop((short)1); dataStyle.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index); dataStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); dataStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); return dataStyle; } /** * 标题样式 * @return HSSFCellStyle */ private static HSSFCellStyle titleStyle(HSSFWorkbook work) { HSSFCellStyle titleStyle = work.createCellStyle(); font = work.createFont(); font.setItalic(true); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); font.setColor(HSSFColor.BLUE.index); titleStyle.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE); titleStyle.setBorderLeft((short)1); titleStyle.setBorderRight((short)1); titleStyle.setBorderTop(HSSFCellStyle.BORDER_DOUBLE); titleStyle.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index); titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); return titleStyle; } }
5. 创建Excel工厂类
/** * 创建Excel工具类 * @author Administrator * */ public class ExcelUtilFactory { private static ExcelUtilFactory instance = null; private static HttpServletRequest excelRequest = null; private static HttpServletResponse excelResponse = null; public static ExcelUtilFactory getInstance(HttpServletRequest request, HttpServletResponse response) { if(instance == null) { instance = new ExcelUtilFactory(); } excelRequest = request; excelResponse = response; return instance; } public static void outputExcel(String excelName, List list, String[] firstRowValue) { ExcelWorkBook work = new ExcelWorkBook(); work.setWorkbookName(excelName); ExcelSheetRow sheetRow = new ExcelSheetRow(); ExcelSheetCell sheetCell = new ExcelSheetCell(); ExcelCellStyleUtils util = new ExcelCellStyleUtils(work); sheetCell.createCurrRowTitle(sheetRow, work, firstRowValue, util.titleStyle); sheetCell.createCurrRowRecord(sheetRow, work, list, util.nameStyle); String realPath = getExcelRealPath(excelName); // String realPath = "e:/temp/testRealPath_2.xls"; work.writerFileStream(realPath); downloadFile(realPath); } private static String getExcelRealPath(String excelName) { String realPath = excelRequest.getRealPath("/UploadFile"); File excelFile = new File(realPath); if(!excelFile.exists()) { excelFile.mkdirs(); } excelName = realPath+ "\\" + excelName+".xls"; return excelName; } private static void downloadFile(String strfileName) { try { // 获得ServletContext对象 if(excelFileNotFund(strfileName)) { throw new IllegalArgumentException("File=["+strfileName+"] not fund file path"); } // 取得文件的绝对路径 File excelFile = getExcelDownloadPath(strfileName); putResponseStream(strfileName, excelFile); } catch (IOException e) { e.printStackTrace(); } } private static File getExcelDownloadPath(String excelName) { // String realPath = excelRequest.getRealPath("/UploadFile"); // excelName = realPath+ "\\" + excelName; // excelName = replaceRNAll(excelName); File excelFile = new File(excelName); return excelFile; } //用传入参数的判断 private static boolean excelFileNotFund(String strfileName) { return strfileName == null|| strfileName.equals(""); } /** * * @param strfileName : 文件名称 * @param excelName : 文件的相对路径或绝对路径 * @throws UnsupportedEncodingException * @throws FileNotFoundException * @throws IOException */ private static void putResponseStream(String strfileName, File excelName) throws UnsupportedEncodingException, FileNotFoundException, IOException { strfileName = URLEncoder.encode(strfileName, "UTF-8"); excelResponse.setHeader("Content-disposition","attachment; filename=" + strfileName); excelResponse.setContentLength((int) excelName.length()); excelResponse.setContentType("application/x-download"); byte[] buffer = new byte[1024]; int i = 0; FileInputStream fis = new FileInputStream(excelName); while ((i = fis.read(buffer)) > 0) { JspWriter out = null; excelResponse.getOutputStream().write(buffer, 0, i); } } public static void main(String[] args) { long beginTime = System.currentTimeMillis(); System.out.println("开始时间:"+beginTime/1000); List beanList = new ArrayList(); String[] excelTitle = new String[10]; excelTitle[0] = "编号"; excelTitle[1] = "基金名称"; excelTitle[2] = "单位净值(NAV)"; excelTitle[3] = "日增长率(%)"; excelTitle[4] = "累积净值"; excelTitle[5] = "编号"; excelTitle[6] = "基金名称"; excelTitle[7] = "单位净值(NAV)"; excelTitle[8] = "日增长率(%)"; excelTitle[9] = "累积净值"; String[] beanArr = new String[10]; for (int i = 0; i < 55000; i++) { beanArr[0] = String.valueOf(i+1); beanArr[1] = "基金A"+i; beanArr[2] = "1.0427"; beanArr[3] = "-2.7514%"; beanArr[4] = "1.1558"; beanArr[5] = String.valueOf(i+1); beanArr[6] = "基金A"+i; beanArr[7] = "1.0427"; beanArr[8] = "-2.7514%"; beanArr[9] = "1.1558"; beanList.add(beanArr); } outputExcel("今天测试_factory", beanList, excelTitle); long endTime = System.currentTimeMillis(); System.out.println("测试55000,总计"+(endTime-beginTime)/1000+"秒,用时"); } }
以上是创建Excel所有工具类,还望大家指教!!!!!!
本人msn:wdmcln@hotmail.com
评论
7 楼
xiaoqiangcn
2009-02-02
Exception in thread "main" java.lang.IllegalArgumentException: Sheet name cannot be blank, greater than 31 chars, or contain any of /\*?[]
楼主,我拷贝下来这么报这个错误呢?
楼主,我拷贝下来这么报这个错误呢?
6 楼
gledeyes
2008-10-13
真是太好了,学习一下
5 楼
jmd
2008-09-21
最近项目中用到这个,拿你的代码学习下!
4 楼
kevindurant
2008-09-12
有这么多东西?学习学习。。
我写的才几行代码。。感觉很丑陋
我写的才几行代码。。感觉很丑陋
3 楼
wdmcln
2008-07-07
@sylinx_yqg
呵,首先谢谢你的发言!对你的答复,很有建议性,确实应该这样!
但这里有几个问题:
1.ExcelWorkBook与每个sheet的对应情况,之前我也试过几种,但总会有异常?
也就改成了现在的情况
2. 你提出的这个SheetModel类,是用于生产数据,还是组装row和cell?这个还需要和你
多交流一下?
呵,首先谢谢你的发言!对你的答复,很有建议性,确实应该这样!
但这里有几个问题:
1.ExcelWorkBook与每个sheet的对应情况,之前我也试过几种,但总会有异常?
也就改成了现在的情况
2. 你提出的这个SheetModel类,是用于生产数据,还是组装row和cell?这个还需要和你
多交流一下?
2 楼
sylinx_yqg
2008-07-06
ExcelWorkBook应该能够放多张sheet,增加个addSheet(SheetModel s)方法更好,有多张sheet情况,另外每张sheet能够提起一个公共数据接口(SheetModel),象TableModel那样,这样每次生成一个excel会更方便。
另外sheet里面单元格格式设置更通用点就好了。
另外sheet里面单元格格式设置更通用点就好了。
1 楼
wdmcln
2008-07-04
过人,留点声音啊!
难道是写的太烂了??????
好就留下宝贵的意见,我好改尽
难道是写的太烂了??????
好就留下宝贵的意见,我好改尽
发表评论
-
FileUtils_下载小应用
2009-06-15 13:09 1254FileExportUtils import java.io ... -
Javaz统计中英文个数__解决技巧[20070924]
2009-02-22 21:04 1219import java.util.ArrayList; imp ... -
JAVA模式--看守者模式的小应用
2008-12-03 14:50 1084好久没写了,随便写点东西,不然脑袋都得大掉,还希望 ... -
JAXP解析XML+XSL转换过程
2007-11-21 19:36 15291. 在解析的过程中,此版本用dom4j解析 ... -
通用分页实现及其OO设计探讨——转载
2007-11-10 11:34 1467分页是一种常用的页面数据显示技术,分页能够通过减少页面数据处理 ... -
EJB入门
2007-10-29 18:50 1258java 代码 package com.test ... -
String与StringBuffer
2007-10-29 11:11 1460String的创建 String s = "he ... -
linux下安装jdk和eclipse之java环境
2007-10-18 10:34 41181、去http://java.sun.com/j2se/1.4 ... -
使用JAVA中的动态代理实现数据库连接池
2007-08-16 13:40 1371级别: 初级 刘冬 (winter.lau@163.com), ... -
利用Java动态编译计算数学表达式
2007-08-09 16:03 10152前几天要做一个计算数学表达式的题目,本来计划使用解析表达式的方 ... -
for循环的效率疑问
2007-07-18 13:29 2469编写代码的时候,突然想到 java 代码 java 代码 ...
相关推荐
由于项目要用到excel来转存页面中的表单数据,对poi操作excel进行了一番了解,写了几个工具,分享给大家,谢谢,赠人玫瑰,手留余香
使用poi操作Excel2007工具类及示例(包括完整Jar包)
String outputFile = "D:\\excel\\excel.xlsx"; OutputStream outputStream = new FileOutputStream(outputFile); UtilExcel utilExcel = new UtilExcel(); String titles = "所属区域,所属车间,当前处理人,描述...
概述:Java poi导入导出EXCEL工具类(兼容各版本) 一、功能说明 允许同时导入或导出多个sheet,同一sheet可同时存在多个数据块,按数据块划分处理数据。 二、配置文件示例及详细说明 1、导入xml配置示例如下(见...
java技术,利用工具类poi解析Excel文档示例
主要给大家介绍了关于在java poi导入Excel通用工具类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
使用poi导出excel支持xls、xlsx格式大数据导出java工具类,支持同一个单元格不同文本格式。找了好久,加上自己修改后,调试通过,发布出来分享,(调整student类位置)包含所需jar包,工具类,使用示例
Excel Java导入导出,示例代码,修改下就可以作为自己的工具类。使用的是POI Jar包,压缩包里包含有用到的 POI Jar包。
Apache POI 导出EXCEL的封装实现工具类,超简单的调用方式,有说明文档示例参考,一看便懂,将繁琐变为简单,是我们一直追求的脚步……
easyuiPoi 通过模板导出Excel、支持纵向合并单元格(合并重复内容)。压缩包包含公共工具类、示例模板、调用截图。
spring boot2快速导出excel的示例源码 操作系统:windows10 JAVA jdk:1.8 开发工具:IDEA java架构:spring boot 2.1.6 gitHub:https://github.com/cn-h-jar/exportexcel 作者:jar 运行提示: 启动项目...
本poi工具包不仅测试了现有excel类与word读取写入类,还引入的aspose破解版本示例,如果感觉示例好可以下载本人其他示例
boot2快速导出excel的示例源码 操作系统:windows10 JDK:1.8 开发工具:IDEA java框架:spring boot 2.1.6 源码官网:www.headyou.cn 作者:jar 运行提示: 启动项目 浏览器访问本地地址:...
java代码自动生成工具: 1.根据Mysql数据库的表生成java实体类,包括注释 2.将Excel表格数据生成...3.包括源文件和生成好的jar工具,和示例文件 技术: java、log4j、poi表格操作、jdbc数据库操作、freeMarker模板使用
Excel2Entity实现了Java POI对xls文件的读取功能的封装,实现了批量导入Excel中的数据时自动根据Excel中的数据行创建对应的Java POJO实体对象的功能。 该类库也实现了在创建实体对象时对字段类型进行校验,...
读取excel表格数据,实现批量插入数据的功能,资源包括:读取excel表格的工具类、导入excel表格的示例demo、pom文件的引用等,支持多级表头等多种excel表格形式,可拓展复用性强。欢迎大家评论下载~
实例135 读取Excel文件中的内容 198 实例136 生成PDF文件 199 实例137 读取PDF文件中的内容 203 实例138 用iText生成Word文件 205 实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 ...
(POI不可操作CSV文件) Spring Database mysql misc sql 隔离级别 join index 数据类型 触发器 事务 postgresql Data Structure & Algorithm cpp Linux misc ubuntu shell 监控工具 vim linux系统安装 软件工程 Git...
实例135 读取Excel文件中的内容 198 实例136 生成PDF文件 199 实例137 读取PDF文件中的内容 203 实例138 用iText生成Word文件 205 实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 ...
实例135 读取Excel文件中的内容 198 实例136 生成PDF文件 199 实例137 读取PDF文件中的内容 203 实例138 用iText生成Word文件 205 实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 ...