Java Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
===========================
©Copyright 蕃薯耀 2017年9月13日
http://fanshuyao.iteye.com/
import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.ServletOutputStream; import org.apache.commons.lang.StringUtils; public class ExportUtil { /** * 只导出包含在includeFieldNames中的属性 * @param sheetName 表格左下角的名称 * @param firstRowTitle 第一行需要设置的title,为空则不设置 * @param list 需要显示的数据集合 * @param headers 表格属性列名数组 * @param includeFieldNames 包含的实体属性 * @param widths 列的宽度,不设置(为Null)则默认,设置则根据对应的列宽设置(可以是一个,可以是对应的数量,整形数字,如200) * @param outputStream 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中 * @param datetimePattern 时间形式,当为空(Null或空字符串)时默认为yyyy-MM-dd HH:mm:ss * @throws Exception */ @SuppressWarnings({ "unchecked", "rawtypes" }) public <T> void exportExcel(String sheetName, String firstRowTitle, List<T> list, String[] headers, String[] includeFieldNames, Integer[] widths, ServletOutputStream outputStream, String datetimePattern) throws Exception { // 默认输出格式 if (StringUtils.isBlank(datetimePattern)) { datetimePattern = "yyyy-MM-dd HH:mm:ss"; } // 创建一个excel应用文件 StringBuffer sb = new StringBuffer(); sb.append("<?xml version=\"1.0\"?>"); sb.append("\n"); sb.append("<?mso-application progid=\"Excel.Sheet\"?>"); sb.append("\n"); sb.append("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\""); sb.append("\n"); sb.append(" xmlns:o=\"urn:schemas-microsoft-com:office:office\""); sb.append("\n"); sb.append(" xmlns:x=\"urn:schemas-microsoft-com:office:excel\""); sb.append("\n"); sb.append(" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\""); sb.append("\n"); sb.append(" xmlns:html=\"http://www.w3.org/TR/REC-html40\">"); sb.append("\n"); sb.append("<Styles>\n"); /*设置列头样式*/ sb.append("<Style ss:ID=\"header\" ss:Name=\"header\">\n");//ss:ID=“header”对应下面的Row ss:StyleID=“header” sb.append("<Interior ss:Color=\"#c4d79b\" ss:Pattern=\"Solid\"/>\n");// 设置背景颜色 sb.append("<Font ss:FontName=\"微软雅黑\" x:CharSet=\"134\" ss:Bold=\"Bolder\" ss:Size=\"12\"/>\n");//设置字体 sb.append("</Style>\n"); /*其它默认样式设置*/ sb.append("<Style ss:ID=\"Default\" ss:Name=\"Normal\">\n"); //sb.append("<Alignment ss:Vertical=\"Center\"/>\n"); sb.append("<Alignment ss:Horizontal=\"Center\" ss:Vertical=\"Center\" ss:WrapText=\"1\"/>\n");// 左中右设置,一个是水平,一个是垂直 sb.append("<Borders>\n"); sb.append("<Border ss:Position=\"Left\" ss:LineStyle=\"Continuous\" ss:Color=\"#666\" ss:Weight=\"1\"/>\n");//左边框设置 sb.append("<Border ss:Position=\"Right\" ss:LineStyle=\"Continuous\" ss:Color=\"#666\" ss:Weight=\"1\"/>\n");//右边框设置 sb.append("<Border ss:Position=\"Bottom\" ss:LineStyle=\"Continuous\" ss:Color=\"#666\" ss:Weight=\"1\"/>\n");//下边框设置 sb.append("<Border ss:Position=\"Top\" ss:LineStyle=\"Continuous\" ss:Color=\"#666\" ss:Weight=\"1\"/>\n");//上边框设置 sb.append("</Borders>\n"); sb.append("<Font ss:FontName=\"宋体\" x:CharSet=\"134\" ss:Size=\"12\"/>\n"); sb.append("<Interior/>\n"); sb.append("<NumberFormat/>\n"); sb.append("<Protection/>\n"); sb.append("</Style>\n"); sb.append("</Styles>\n"); try { // 生成表格 int headersLength = headers.length; sb.append("<Worksheet ss:Name=\"" + sheetName + "\">"); sb.append("\n"); sb.append("<Table ss:ExpandedColumnCount=\"" + headersLength + "\" ss:ExpandedRowCount=\"1000000\" x:FullColumns=\"1\" x:FullRows=\"1\">"); sb.append("\n"); if(!StrUtils.isEmptyArray(widths)){ if(widths.length > 1){ for (int i = 0; i < headersLength; i++) { sb.append("<Column ss:AutoFitWidth=\"0\" ss:Width=\""+widths[i]+"\"/>"); } }else{ for (int i = 0; i < headersLength; i++) { sb.append("<Column ss:AutoFitWidth=\"0\" ss:Width=\""+widths[0]+"\"/>"); } } } // 输出第一行的标题 if(!StrUtils.isBlank(firstRowTitle)){ //ss:StyleID可以加row或者Cell,加在Row,整行(包括空的Cell)都有,加上Cell,只有Cell才有。 sb.append("<Row ss:Height=\"30\">"); sb.append("<Cell ss:StyleID=\"header\" ss:MergeAcross=\""+ (headersLength - 1)+"\"><Data ss:Type=\"String\">" + firstRowTitle + "</Data></Cell>"); sb.append("</Row>"); } // 输出列头 sb.append("<Row>"); for (int i = 0; i < headersLength; i++) { sb.append("<Cell ss:StyleID=\"header\"><Data ss:Type=\"String\">" + headers[i] + "</Data></Cell>"); } sb.append("</Row>"); // 构建表体数据 for (int j = 0; j < list.size(); j++) { sb.append("<Row>"); T t = (T) list.get(j); for (int i = 0; i < includeFieldNames.length; i++) { // 获取属性名称 String fieldName = includeFieldNames[i]; String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); // 获取class对象 Class tCls = t.getClass(); // 获取属性值 Object value = null; try { // 获取class方法 Method getMethod = tCls.getMethod(getMethodName, new Class[] {}); // 获取属性值 value = getMethod.invoke(t, new Object[] {}); } catch (NoSuchMethodException e) { // 继续循环 continue; } // 判断值的类型后进行强制类型转换 String textValue = ""; if (value instanceof Integer) { // int value = ((Integer) value).intValue(); textValue = value.toString(); } else if (value instanceof String) { // String s = (String) value; textValue = value.toString(); } else if (value instanceof Double) { // double d = ((Double) value).doubleValue(); textValue = String.format("%.2f", value); } else if (value instanceof Float) { // float f = ((Float) value).floatValue(); textValue = value.toString(); } else if (value instanceof Long) { // long l = ((Long) value).longValue(); textValue = value.toString(); } else if (value instanceof Boolean) { // boolean b = ((Boolean) value).booleanValue(); textValue = value.toString(); } else if (value instanceof Date) { Date date = (Date) value; SimpleDateFormat sdf = new SimpleDateFormat(datetimePattern); textValue = sdf.format(date); } else if ((value instanceof BigDecimal)) { textValue = value.toString(); } else { if (value != null) { continue; } } sb.append("<Cell><Data ss:Type=\"String\">"); // 如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成 if (StringUtils.isNotBlank(textValue)) { Pattern p = Pattern.compile("^//d+(//.//d+)?$"); Matcher matcher = p.matcher(textValue); if (matcher.matches()) { // 是数字当作double处理 sb.append(Double.parseDouble(textValue)); } else { sb.append(textValue); } } sb.append("</Data></Cell>"); } sb.append("</Row>"); sb.append("\n"); } sb.append("</Table>"); sb.append("<WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">"); sb.append("\n"); sb.append("<ProtectObjects>False</ProtectObjects>"); sb.append("\n"); sb.append("<ProtectScenarios>False</ProtectScenarios>"); sb.append("\n"); sb.append("</WorksheetOptions>"); sb.append("\n"); sb.append("</Worksheet>"); sb.append("</Workbook>"); sb.append("\n"); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } try { outputStream.write(sb.toString().getBytes()); outputStream.flush(); outputStream.close(); sb = null; } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }
使用方式:
@RequestMapping("/exportMsCard") public void exportMsCard(HttpServletRequest req, HttpServletResponse res, Integer pageIndex, Integer pageSize, String cardNo, String mobile, String cinemaBaseName, Date startDate, Date endDate) { try { if(endDate != null){ endDate = DateUtils.dateAdd(endDate, 1, false); } List<MsCard> msCards = msCardService.list(pageIndex, pageSize, cardNo, mobile, cinemaBaseName, startDate, endDate); String[] headers = { "会员卡号", "会员昵称", "手机号码", "影院名称", "创建时间"}; String[] includeFieldNames = { "cardNo", "nickname", "mobile", "cinemaBaseName", "createTime"}; // 设置文件后缀并编码 String fileName = new String("运营平台-会员卡包-会员卡列表.xls".getBytes("UTF-8"), "iso8859-1"); // 设置响应的编码方式; res.setCharacterEncoding("gb2312"); res.setHeader("Content-disposition", "attachment; filename=" + fileName); res.setContentType("application/msexcel;charset=UTF-8"); // 导出订单Excel ExportUtil exportUtil = new ExportUtil(); exportUtil.exportExcel("sheet", "", msCards, headers, includeFieldNames, new Integer[]{200}, res.getOutputStream(), null); } catch (Exception e) { e.printStackTrace(); } }
注意:不能直接通过Ajax请求,需要通过表单提交。
xml方式转Excel用到的属性:
补充一个:
ss:MergeAcross 表示跨列合并,如下:
sb.append("<Row ss:Height=\"30\">"); sb.append("<Cell ss:StyleID=\"header\" ss:MergeAcross=\""+ (headersLength - 1)+"\"><Data ss:Type=\"String\">" + firstRowTitle + "</Data></Cell>"); sb.append("</Row>");
注意是否需要减1,因为表示是跨多少列,那就是合并其它的几列,不包括自己,所以需要减 1
万能方法:
如果突然需要增加某些未知的属性,可以自己先创建一个Excel文件,做一个模板出来,然后另存为Xml文件,注意是Xml文件,保存后打开Xml文件查看自己创建的模板的某些属性应该怎么设置。但打开的xml文件比较乱,所以通过搜索找到自己对应的那个格子。
=============================
©Copyright 蕃薯耀 2017年9月13日
http://fanshuyao.iteye.com/
相关推荐
概述:Java poi导入导出EXCEL工具类(兼容各版本) 一、功能说明 允许同时导入或导出多个sheet,同一sheet可同时存在多个数据块,按数据块划分处理数据。 二、配置文件示例及详细说明 1、导入xml配置示例如下(见...
对于导出XML文件,Java提供了`Transformer`和`TransformerFactory`类来将DOM树转换为XML字符串或直接写入文件。首先创建`TransformerFactory`,然后使用`newTransformer()`创建`Transformer`实例,最后调用`...
在Java编程中,导出数据到Excel是一种...通过这些扩展,你可以创建一个功能强大且易于使用的Java Excel导出工具类,满足各种业务需求。在实际项目中,可以结合具体的需求进行调整和优化,以提高代码的复用性和效率。
在Java开发中,处理Excel和XML文件是一项常见的任务,特别是在数据导入导出、报表生成以及数据交换等场景。本文将详细讲解如何使用Java进行Excel和XML文件的解析及操作。 一、Excel文件处理 1. **Apache POI库**:...
在Java中,如果你需要导出Excel文件,Java POI是一个非常实用的工具。下面将详细介绍如何使用Java POI来实现Excel的导出。 1. **引入依赖** 在Java项目中使用POI,首先需要在项目的构建文件(如Maven的pom.xml或...
"java导出excel文档通用工具类"正是这样一个工具,它允许我们灵活地生成包含表头的Excel文件,提高开发效率。 Java中导出Excel主要依赖于Apache POI库,这是一个用于读写Microsoft Office格式档案的Java API。...
当需要将这些数据显示在Excel文件中,通常会用到导出工具。本文将详细介绍如何使用EasyUI导出datagrid中的数据到Excel。 1. EasyUI DataGrid概述 EasyUI的DataGrid是一个强大的表格组件,它可以加载JSON或XML格式的...
在实际项目中,为了简化代码和提高可维护性,你可以封装这些导出功能为服务或工具类,然后在需要的地方调用。例如,创建一个`ExportService`,其中包含`exportToExcel()`, `exportToWord()`, 和 `exportToPdf()` ...
在Java编程领域,导出Excel文件是一项常见的任务,特别是在数据处理和报告生成中。这个rar压缩包提供的资源包括一个用于导出Excel文件的类的源代码以及必要的Jar包,这使得开发者能够方便地将数据和图片写入Excel...
Java POI库是Apache软件基金会的一个项目,专门用于读写Microsoft Office格式的文件,包括Excel。在Java开发中,我们经常使用POI库来处理Excel数据,如读取、写入和修改Excel文件。本篇文章将详细介绍如何使用JAVA ...
5. 使用 Java POI 实现 Excel 导入导出工具类 在上面的示例中,我们已经实现了 Excel 导入和导出功能。下面是一个实现了 Excel 导入导出工具类的示例: ```java import org.apache.poi.hssf.usermodel.HSSFWorkbook...
为了方便开发者将程序中的数据快速导出到Excel文件,自定义Excel导出工具类是常见的做法。本篇文章将深入探讨如何利用Java的Apache POI库创建一个能够处理`List<Object>`数据的Excel工具类。 Apache POI是一个流行...
总的来说,"java poi 导出excel jar包"涉及到的主要知识点包括:Apache POI库的使用,Java处理Excel文件的步骤,Workbook、Sheet、Row和Cell对象的创建与操作,以及如何通过构建工具添加和管理依赖。通过这些知识,...
1. **引入依赖**:将jxl.jar文件添加到项目的类路径中,如果是Maven项目,可以在pom.xml文件中添加相应的依赖。 2. **创建/读取工作簿**:使用`Workbook.createWorkbook()`创建新工作簿,或`Workbook.getWorkbook()`...
本篇将详细讲解如何使用Java实现Excel的导出,并介绍相关工具类和jar包的使用。 首先,我们需要理解Excel文件的基本结构。Excel文件本质上是二进制格式的文件,最常见的是`.xls`(老版本)和`.xlsx`(新版本)格式...
使用这个工具类,你可以方便地导出任何带有注解的实体类到Excel表格。例如,要导出一个User对象列表,只需调用`ExcelExportUtil.exportExcel(users, "用户信息.xlsx")`即可。 总结来说,通过注解方式导出Excel,...
首先,"java poi 导出excel所需jar包"指的是Apache POI库的jar文件,这些文件通常包含了处理Excel文件所需的所有类和方法。在项目中,我们需要将这些jar添加到构建路径或依赖管理中,以便能够使用Apache POI提供的...
总之,这个项目是一个完整的Java解决方案,用于处理Excel文件的导入导出,同时具备用户友好的进度条显示。它利用了Apache POI的强大功能,结合maven的依赖管理,以及可能的GUI组件,提供了高效且直观的数据操作体验...
对于Eclipse用户,可以搜索相关的插件集成到开发环境中,或者单独使用命令行工具配合版本控制系统(如Git)来管理和同步`String.xml`与Excel文件。 总的来说,`android String.xml Excel 相互转换工具`是Android...