package com.tzdr.common.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; import java.math.BigDecimal; import java.math.BigInteger; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; /** * * @author LiuQing * @see excel 导出工具类 * 使用方法 * class EntityObjectClass { * * @AllowExcel(name="姓名") * private String name; * * @AllowExcel(name="生日") * private Date birthday * * } * * ExportExcel<EntityObjectClass> export = new ExportExcel<EntityObjectClass>(); * List<EntityObjectClass> data = new ArrayList<EntityObjectClass>(); * InputStream inputStream = export.createExcel(data); * * @version 1.0 * @datetime 2011-11-24 * */ public class ExportExcel<T extends Serializable> { /** * 定义Excel hander */ private Workbook excelHander = new HSSFWorkbook(); /** * 生成sheet 名称 */ private String sheetName = "sName"; private boolean showHeader = true; private Collection<T> tempData = new ArrayList<T>(); private boolean isFirst = true; /** * 缓存成员变量 */ private List<String> fieldNameCaches = new ArrayList<String>(); public ExportExcel() { } public ExportExcel(Collection<T> data) { this.tempData = data; } public ExportExcel(Collection<T> data,HttpServletRequest request,HttpServletResponse response,String filename) { String userAgent = request.getHeader("USER-AGENT"); this.filename = filename; String finalFileName = null; try { if(StringUtils.contains(userAgent, "MSIE")){//IE浏览器 finalFileName = URLEncoder.encode(this.filename,"UTF8"); } else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器 finalFileName = new String(this.filename.getBytes(), "ISO8859-1"); } else{ finalFileName = URLEncoder.encode(this.filename,"UTF8");//其他浏览器 } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } this.filename = finalFileName; response.resetBuffer(); this.tempData = data; this.execute(response); } /** * @see 生成Excel 文件 * @param data * @return * @throws IllegalAccessException */ public InputStream createExcel(Collection<T> data) throws Exception { this.tempData = data; this.createHeader(data); return this.getInputStream(); } public static String string2Unicode(String string) { StringBuffer unicode = new StringBuffer(); for (int i = 0; i < string.length(); i++) { // 取出每一个字符 char c = string.charAt(i); // 转换为unicode unicode.append("\\u" + Integer.toHexString(c)); } return unicode.toString(); } private String filename = "export.xls"; public void execute(HttpServletResponse response) { try { InputStream input = this.createExcel(); String contentType = "application/vnd.ms-excel"; response.setContentType(contentType); response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\""); OutputStream output = response.getOutputStream(); byte b[] = new byte[1024]; while (true) { int length = input.read(b); if (length == -1) { break; } output.write(b,0,length); } } catch (Exception e) { e.printStackTrace(); } } public void addDate(T t) throws Exception { this.tempData.add(t); } /** * * @return * @throws Exception */ public InputStream createExcel() throws Exception { this.createHeader(this.tempData); return this.getInputStream(); } /** * 创建器 * @param data * @throws IllegalAccessException */ private void createHeader(Collection<T> data) throws Exception { //Sheet 创建工作表 Sheet sheet = excelHander.createSheet(sheetName); int j = 0; for (T t:data) { Field[] fields = t.getClass().getDeclaredFields(); /** * 加入允许字段缓存数据 * if == 0时表示要添加缓存数据 */ if (j == 0) { Row headRow = null; if (this.showHeader) { headRow = sheet.createRow(0); } int i = 0; for (Field field:fields) { //判断Excel 安全允许注解 AllowExcel allowExcel = field.getAnnotation(AllowExcel.class); if (allowExcel != null && allowExcel.value()) { //显示关部信息 if (this.showHeader) { Cell cell = headRow.createCell(i); cell.setCellValue(allowExcel.name()); i++; } this.fieldNameCaches.add(field.getName()); } } j++; } //创建产生行数据 Row hssfRow = sheet.createRow(j); this.setCellValueToRow(t, hssfRow); j++; } } /** * 输出Excel Row 信息 * @param t T extends Serializable * @param hssfRow HSSFRow * @return HSSFRow * @throws IllegalAccessException * @throws NoSuchMethodException * @throws SecurityException */ public Row setCellValueToRow(T t,Row hssfRow) throws Exception { Class clazz = t.getClass(); Field fields[] = clazz.getDeclaredFields(); //定义Excel 输出行数 int i = 0; for (Field field:fields) { //缓存中是否存在允许字段 if (this.isCacheFiledName(field.getName())) { Cell cell = hssfRow.createCell(i); i++; field.setAccessible(true); Class clazzType = field.getType(); String methodName = ""; if (clazzType.getName().equals("boolean") || clazzType.getName().equals("java.lang.Boolean")) { methodName = "is" + this.toFirstToUp(field.getName()); } else { methodName = "get" + this.toFirstToUp(field.getName()); } Object obj = clazz.getMethod(methodName, null).invoke(t, null); //Object obj = clazz.getDeclaredMethod(methodName, null).invoke(t, null); //类型转换 if (obj instanceof Integer ) { cell.setCellValue((Integer)obj); } else if (obj instanceof String) { cell.setCellValue((String)obj); } else if (obj instanceof Date) { cell.setCellValue((Date)obj); } else if (obj instanceof Double) { cell.setCellValue((Double)obj); } else if (obj instanceof Boolean) { cell.setCellValue((Boolean)obj); } else if (obj instanceof Float) { cell.setCellValue((Float)obj); } else if (obj instanceof Long) { cell.setCellValue((Long)obj); } else if (obj instanceof BigDecimal) { cell.setCellValue(obj.toString()); } else if (obj instanceof BigInteger) { cell.setCellValue(obj.toString()); } else { try { cell.setCellValue(obj.toString()); } catch(Exception e){} //System.out.println(obj); //throw new TypeNotPresentException("类型不支持", null); } } } return hssfRow; } /** * 判断Cache 是否有对应的FiledName * @param fieldName String * @return boolean */ private boolean isCacheFiledName(String fieldName) { if (fieldName == null) { return false; } for (String fieldNameCache:this.fieldNameCaches) { if (fieldName.equals(fieldNameCache)) { return true; } } return false; } /** * 获得输入流 * @return InputStream */ private InputStream getInputStream() { ByteArrayOutputStream output = new ByteArrayOutputStream(); InputStream inputStream = null; try { this.excelHander.write(output); byte b[] = output.toByteArray(); inputStream = new ByteArrayInputStream(b); } catch (IOException e) { e.printStackTrace(); } finally { try { output.flush(); output.close(); } catch (IOException e) { e.printStackTrace(); } } return inputStream; } /** * 查找对应的类自定义方法 * @param methodName * @return boolean */ public boolean isClassMethodName(String methodName) { if (methodName != null) { if ("getClass".equals(methodName)) { return false; } if (methodName.startsWith("get") || methodName.startsWith("is") || methodName.startsWith("set")) { return true; } return false; } return false; } /** * * @param str * @return String */ public static String toFirstToLower(String str) { char chars[] = str.toCharArray(); if (chars != null && chars.length > 0) { if (chars[0] > 'A') { chars[0] = (char) (chars[0] + 32); } } return new String(chars); } /** * 首字母转为大写 * @param str String * @return String */ public static String toFirstToUp(String str) { char chars[] = str.toCharArray(); if (chars != null && chars.length > 0) { if (chars[0] >= 'a') { chars[0] = (char) (chars[0] - 32); } } return new String(chars); } public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } }
package com.tzdr.common.utils; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * * <p>根据条件VO对象</p> * @author QingLiu * @see * @version 2.0 * 2012年3月4日上午10:34:27 */ public class ConnditionVo implements Serializable { /** * */ private static final long serialVersionUID = -4054776286797309226L; /** * 条件数据 */ private Map<String,Object> connditionData = new HashMap<String,Object>(); /** * 添加参数数据 */ private List<String> params = new ArrayList<String>(); private HttpServletRequest request; public ConnditionVo() { } /** * * @param request HttpServletRequest */ public ConnditionVo(HttpServletRequest request) { this.request = request; Enumeration<String> enu = request.getParameterNames(); while (enu.hasMoreElements()) { this.addParam(enu.nextElement()); } } private static final String EXCEL_TYPE = "excelType9000000_0000_0001"; /** * * @return boolean */ public boolean isExcel() { String excelType = TypeConvert.objToStrIsNotNull(this.getValue(EXCEL_TYPE)); if (excelType != null && "true".equals(excelType)) { return true; } else { return false; } } /** * * @param data Collection<?>导出数据 * @param response HttpServletResponse * @param filename String导出显示文件名 * @return boolean if true is excel export */ public boolean isExcel(Collection<?> data,HttpServletResponse response,String filename) { if (this.isExcel()) { new ExportExcel(data,this.request,response,filename); return true; } else { return false; } } /** * * @param data Collection<?>导出数据 * @param response HttpServletResponse * @param filename String导出显示文件名 * @return boolean if false will auto export excel file */ public boolean isNotExcel(Collection<?> data,HttpServletResponse response) { if (this.isExcel()) { String filename = "export.xls"; new ExportExcel(data,this.request,response,filename); return false; } else { return true; } } /** * * @param data Collection<?>导出数据 * @param response HttpServletResponse * @param filename String导出显示文件名 * @return boolean if false will auto export excel file */ public boolean isNotExcel(Collection<?> data,HttpServletResponse response,String filename) { if (this.isExcel()) { int posPoint = filename.indexOf("."); filename = posPoint == -1?filename + ".xls":filename; new ExportExcel(data,this.request,response,filename); return false; } else { return true; } } public void execute() { for (String key:params) { String paramValueStr = request.getParameter(key); connditionData.put(key, paramValueStr); } this.isExecute = true; } public void addParam(String key) { params.add(key); } /** * 添加参数 * @param key T * @param value V */ public void addParam(String key,Object value) { connditionData.put(key, value); } /** * 获取对应的值 * @param key T * @return V */ public Object getValue(String key) { if (!this.isExecute) { this.execute(); } return connditionData.get(key); } public String getValueStr(String key) { if (!this.isExecute) { this.execute(); } return TypeConvert.objToStrIsNotNull(connditionData.get(key)); } /** * 释放所以 */ public void release() { connditionData.clear(); } /** * * @return HttpServletRequest */ public HttpServletRequest getRequest() { return request; } /** * 设置数据对象值 * @param request HttpServletRequest */ public void setRequest(HttpServletRequest request) { this.request = request; Enumeration<String> enu = request.getParameterNames(); while (enu.hasMoreElements()) { this.addParam(enu.nextElement()); } } //是否已经执行过初始化 private boolean isExecute = false; }
相关推荐
2. **更改导出文件格式**: - 当选择保存文件类型时,建议选择“XLSX”而不是“XLS”。因为XLSX是基于XML的文件格式,支持UTF-8编码,而XLS是旧版本的Excel文件格式,默认使用ANSI编码。使用XLSX格式可以更好地支持...
易语言提供的Excel导出导入模块,使得开发者可以方便地在程序中与Excel文件进行交互,这对于数据处理和报表生成等场景非常实用。 导出Excel文件通常涉及到以下几个关键知识点: 1. **创建工作簿**:在易语言中,...
标题“Qt ts翻译文件导出excel”涉及到的是一个Qt编程项目,主要目的是将Qt的.ts(翻译文件)格式转换成更便于编辑和管理的Excel格式。Qt是一个跨平台的C++应用程序开发框架,广泛用于创建桌面、移动和嵌入式应用。...
打开文件 (导出文件路径, 0, , , , , ) .工作表 (1).选择 .循环 (数据行数) .工作表 (1).单元格 (行索引, 1).写入文本 (数据列1) .工作表 (1).单元格 (行索引, 2).写入文本 (数据列2) .... .结束循环 .对象....
在导出文件时,通常会使用FileReference类来进行本地文件的保存。你需要确保用户有足够的权限,并遵循正确的安全策略,如提示用户选择保存位置。 在实际开发中,可能还会遇到其他问题,比如性能优化、大量数据处理...
2. **导出数据**:在查询结果集上,即在结果显示区域(注意不要选中任何具体的行或单元格),点击鼠标右键,选择【Copy to Excel】选项下的【Copy as xls/xlsx】,将数据导出为Excel文件。需要注意的是,根据PL/SQL ...
### C# 导出Excel文件的关键技术点与实现方法 #### 概述 在实际开发过程中,导出数据到Excel是一种常见的需求,特别是在企业级应用中。本文将深入探讨如何使用C#语言来实现导出数据到Excel的功能,并提供一份实用的...
对于具有大量定制需求的Excel导出,这种方法尤其适用,因为它允许我们在不修改核心导出逻辑的情况下,通过修改注解轻松地改变表头内容。 总的来说,注解反射导出Excel自定义中文表头是一种高效且灵活的方法,它结合...
导出表格数据到Excel文件则是另一个关键步骤。在易语言中,这通常通过创建Excel对象并调用其方法来实现。首先,我们需要创建一个Excel应用程序对象,然后打开一个新的工作簿,接着在工作簿中创建工作表,并将表格...
- 注意处理Excel文件的编码问题,避免中文乱码。 - 考虑到性能问题,如果数据量非常大,可能需要采取分批次处理的方式。 - 对于复杂的公式,建议先在Excel中测试其正确性,再应用于模板文件中。 综上所述,通过使用...
在提供的压缩包文件中,可能包含已经封装好的方法和DLL,这些预封装的方法简化了Excel导入导出的过程,使得开发者可以直接调用,而无需关心底层的实现细节。这通常会提高开发效率,减少错误,并且便于代码维护。 ...
解决tableExport导出到excel中文乱码,解决tableExport导出到excel中文乱码,解决tableExport导出到excel中文乱码,解决tableExport导出到excel中文乱码
总结起来,解决导出Excel汉字乱码问题的关键在于正确设置字符集和编码;而处理GridView分页问题则需要在导出前临时禁用分页功能,并在完成后恢复。通过这些技巧,可以确保用户能够顺利地下载到包含所有数据且无乱码...
然而,当涉及到导出包含中文字符的数据到Excel时,可能会遇到乱码问题,这给用户带来了困扰。本文将详细阐述如何解决Toad在导出到Excel时出现的中文乱码问题。 首先,一个简单且通常有效的解决方案是改变导出格式为...
本篇将围绕“EXCEL快速导入导出(增加数据库直接导出及2007文件格式支持)”这一主题,深入解析易语言中实现Excel数据导入导出的技术细节,并结合提供的压缩包文件进行分析。 一、易语言Excel接口调用 易语言作为...
这个"CloseXML导出Excel Demo"提供了使用CloseXML库在C#中创建和导出Excel文件的示例。下面我们将深入探讨CloseXML库以及如何利用它来实现Excel操作。 CloseXML是一个开源的.NET库,它为处理Open XML文档(如...
在"压缩包子文件的文件名称列表"中,"zqw测试-excel导出-修改base64"可能是一个示例文件或者代码示例,它展示了如何进行上述操作的实际应用。这个文件名可能包含了测试用的数据、Excel导出的代码片段以及对Base64...
在本文中,我们将深入探讨如何使用ExtJS框架结合Apache POI库来实现Excel导出功能。首先,让我们了解一些基本概念。 **ExtJS框架** ExtJS是一个强大的JavaScript库,专门用于构建富客户端应用程序。它提供了丰富的...
然而,在处理文件导出,尤其是将数据导出为Excel格式时,开发者经常会遇到一个令人头疼的问题——乱码。这个问题的根源在于字符编码的不匹配,而解决这一问题对于确保数据正确性和用户体验至关重要。 ### ASP.NET...
delphi 导出数据到EXCEL 将文件复制到项目下,就可以调用了。 只要准备好数据集就行。 EXCLE的模板文件可有可无。