- 浏览: 137673 次
文章分类
最新评论
-
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 1293FileExportUtils import java.io ... -
Javaz统计中英文个数__解决技巧[20070924]
2009-02-22 21:04 1259import java.util.ArrayList; imp ... -
JAVA模式--看守者模式的小应用
2008-12-03 14:50 1147好久没写了,随便写点东西,不然脑袋都得大掉,还希望 ... -
JAXP解析XML+XSL转换过程
2007-11-21 19:36 15691. 在解析的过程中,此版本用dom4j解析 ... -
通用分页实现及其OO设计探讨——转载
2007-11-10 11:34 1522分页是一种常用的页面数据显示技术,分页能够通过减少页面数据处理 ... -
EJB入门
2007-10-29 18:50 1303java 代码 package com.test ... -
String与StringBuffer
2007-10-29 11:11 1500String的创建 String s = "he ... -
linux下安装jdk和eclipse之java环境
2007-10-18 10:34 41511、去http://java.sun.com/j2se/1.4 ... -
使用JAVA中的动态代理实现数据库连接池
2007-08-16 13:40 1404级别: 初级 刘冬 (winter.lau@163.com), ... -
利用Java动态编译计算数学表达式
2007-08-09 16:03 10247前几天要做一个计算数学表达式的题目,本来计划使用解析表达式的方 ... -
for循环的效率疑问
2007-07-18 13:29 2503编写代码的时候,突然想到 java 代码 java 代码 ...
相关推荐
以上介绍的两个工具类提供了基本的 Excel 操作功能,可以方便地创建、管理和保存 Excel 文件及其内容。对于实际项目开发而言,这些工具类可以极大地简化与 Excel 文件相关的开发工作。当然,在实际应用中可能还需要...
- `Excel.java`: 这可能是包含实际操作Excel文件的工具类。可能的方法包括创建工作簿,添加工作表,设置单元格值,读取单元格数据等。 - `User.java`: 可能是定义了一个用户对象,例如,用于存储要在Excel文件中...
在这个场景中,我们关注的是如何使用 POI 操作 Excel 工具类。这个工具类可以帮助开发者在 Java 环境下读写 Excel 文件,从而实现数据导入、导出等功能。下面将详细介绍 POI 操作 Excel 的关键知识点。 1. **工作簿...
Java POI 是一个用于处理Microsoft Office格式文件的开源库,尤其在处理Excel文件时非常有用。这个"java_poi导入excel通用工具类"是利用Java的POI库和一些额外的技术来实现对Excel数据的导入功能,使得开发人员能够...
String outputFile = "D:\\excel\\excel.xlsx"; OutputStream outputStream = new FileOutputStream(outputFile); UtilExcel utilExcel = new UtilExcel(); String titles = "所属区域,所属车间,当前处理人,描述...
总的来说,Apache POI提供了一套完整的API,可以帮助开发者灵活地处理Excel文件。通过学习和实践,你可以利用这些功能构建复杂的Excel处理程序,满足数据分析、报表生成等各种需求。在实际项目中,结合CSV、JDBC等...
概述:Java poi导入导出EXCEL工具类(兼容各版本) 一、功能说明 允许同时导入或导出多个sheet,同一sheet可同时存在多个数据块,按数据块划分处理数据。 二、配置文件示例及详细说明 1、导入xml配置示例如下(见...
"基于POI的Excel多Sheet页导出导入工具类"是一个实用的Java类库,专为处理Excel文件中的多个工作表(Sheet)而设计,提供了一种高效且灵活的方式来操作Excel数据。 该工具类的核心功能包括: 1. **多Sheet页操作**...
标题 "POI 生成EXCEL2007【含例子】" 涉及到的知识点主要集中在Apache POI库的使用上,这是一个强大的Java API,用于读取、写入和修改Microsoft Office格式的文件,特别是Excel文件。在这个场景中,重点是创建和操作...
在"使用POI进行Excel文件下载"的示例工程中,可能会包含一个控制器或服务类,它负责生成Excel文件,并将其转换为HTTP响应。这个示例工程可能还包含了展示如何使用模板来生成复杂格式的Excel文件,或者如何从数据库中...
本示例将深入讲解如何使用Apache POI来解析Excel文件。 Apache POI是Apache软件基金会的一个开源项目,它的主要功能是处理微软的Office Open XML (OOXML) 和早期的二进制文件格式,例如Excel的.BIFF8格式。在Java中...
有了这个工具类,我们可以方便地处理Excel文件中的不同类型的单元格数据。例如,当单元格存储的是日期时,我们可以将其转换为指定格式的字符串;对于数值型单元格,我们可以确保返回的字符串不使用科学计数法。 接...
总之,Apache POI为Java开发者提供了一套强大的工具,使得在没有实际安装PowerPoint的情况下也能进行PPT文件的操作。通过学习和实践这个示例程序,你可以掌握如何利用POI进行PPT的创建和编辑,进一步提升你在文档...
标题中的“poi操作excel案例”指的是使用Apache POI库来处理Excel文件的示例项目。Apache POI是一个开源的Java库,它允许开发者创建、修改和显示Microsoft Office格式的文件,包括Excel工作簿(XLS和XLSX)。在这个...
这个“excel poi工具类”是利用Apache POI库来实现对Excel文件进行导入、导出、合并单元格以及处理计算公式的功能。下面我们将深入探讨这些知识点。 **1. Apache POI库介绍** Apache POI是一个开源项目,它为Java...
总之,Apache POI为Java开发者提供了强大的工具,用于处理Excel文件,无论是读取现有数据、创建新文件还是进行复杂的格式化和计算。通过正确地使用和理解Apache POI,你可以编写出高效且功能丰富的Java应用来处理...
附带的`ExcelUtil.java`源码文件,通常是一个工具类,封装了使用Apache POI读取Excel文件的关键操作,比如打开文件、遍历工作表、读取单元格数据等。这样的工具类可以简化开发过程,避免重复编写基础代码。 使用...
综上所述,Apache POI为Java开发者提供了一个强大且灵活的工具,使得处理Excel文件变得简单易行。通过学习和实践上述教程,你可以熟练掌握使用POI进行Excel数据操作的各种技巧,包括读取、写入、格式化和计算。
标题 "poi导出excel并下载工具类(含有demo)" 提供了我们即将讨论的核心内容:使用Apache POI库来创建Excel文件,并提供一个下载功能。Apache POI是Java领域中广泛使用的库,用于处理Microsoft Office格式的文件,...
总的来说,Apache POI是Java开发者处理Excel文件的强大工具,通过熟练掌握其API和使用技巧,你可以轻松地实现各种Excel数据的读写和操作。无论是简单的数据读取,还是复杂的报表生成,POI都能提供足够的支持。