- 浏览: 168992 次
- 性别:
- 来自: 武汉
文章分类
最新评论
1、接口
package com.yihaodian.pis.common.util.export; import java.io.OutputStream; import java.util.List; public interface ExcelExporter { void defineHeaders(); void drawCellFormat(); void addDataRow(List<String> dataRow); void writeTo(OutputStream output) throws Exception; }
2、ExportFactory。java
package com.yihaodian.pis.common.util.export; import java.io.File; import java.io.OutputStream; import java.util.List; /** * * @author Tom * */ public class ExportFactory { private ExportFactory() { } public static void exportExcelOnTemplate(String templatePath, List<List<String>> dataRowList, OutputStream outputStream) throws Exception { ExcelExporter exporter = new TemplateExcelExporter(templatePath); exporter.defineHeaders(); exporter.drawCellFormat(); for (List<String> dataRow : dataRowList) { exporter.addDataRow(dataRow); } exporter.writeTo(outputStream); } }
3、导出工具类实现类
package com.yihaodian.pis.common.util.export; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; public class TemplateExcelExporter implements ExcelExporter { private static final int INDEX_COPIED_ROW = 1; private Log log = LogFactory.getLog(this.getClass()); private Workbook outputWorkbook; private List<CellStyle> cellFormats = new ArrayList<CellStyle>(); private List<Integer> cellTypes = new ArrayList<Integer>(); private List<List<String>> dataRowList = new ArrayList<List<String>>(); public TemplateExcelExporter(String templatePath) { File template = new File(templatePath); if (!template.isFile()) { throw new IllegalArgumentException("The template file is invalid. " + templatePath); } try { outputWorkbook = WorkbookFactory.create(new BufferedInputStream(new FileInputStream(templatePath))); } catch (Exception e) { log.error("Failed to parse this template", e.getCause()); } } @Override public void defineHeaders() { } @Override public void drawCellFormat() { Sheet sheet = outputWorkbook.getSheetAt(0); Row formatRow = sheet.getRow(INDEX_COPIED_ROW); Iterator<Cell> it = formatRow.iterator(); while (it.hasNext()) { Cell cell = it.next(); cellFormats.add(cell.getCellStyle()); cellTypes.add(cell.getCellType()); } } @Override public void addDataRow(List<String> dataRow) { if (dataRow.size() > cellFormats.size()) { throw new IllegalArgumentException("The size of dataRow cannot be greater than the template's."); } dataRowList.add(dataRow); } @Override public void writeTo(OutputStream output) throws Exception { Sheet sheet = outputWorkbook.getSheetAt(0); for (int i = 0; i < dataRowList.size(); i++) { List<String> dataRow = dataRowList.get(i); int rowIndex = i + 1; Row row; if (rowIndex == INDEX_COPIED_ROW) { row = sheet.getRow(rowIndex); } else { row = sheet.createRow(rowIndex); } for (int j = 0; j < dataRow.size(); j++) { Cell cell; if (rowIndex == INDEX_COPIED_ROW) { cell = row.getCell(j); } else { cell = row.createCell(j); } cell.setCellStyle(cellFormats.get(j)); cell.setCellType(cellTypes.get(j)); cell.setCellValue(dataRow.get(j)); } } outputWorkbook.write(output); } }
4、具体实现
List<List<String>> colAll = new ArrayList<List<String>>(); for (int i = 0; i < listOppon.size(); i++) { OpponInfoListVO opponInfoListVO = listOppon.get(i); List<String> col = new ArrayList<String>(); // oppon site name PisTProduct oppProduct = opponInfoListVO.getPisTProduct(); if (null == oppProduct) { continue; } col.add(siteMap.get(oppProduct.getSiteId())); // 1到4级的分类 final int totalLevel = 4; // 当前设定共4层目录 Long leafCategoryId = oppProduct.getCategoryId(); List<String> categoryNameList = new ArrayList<String>(); try { int level = 0; // (从叶子节点开始,逆向获取父节点Name) while (level < (totalLevel - 1)) { PisTCategory pisTCatagory = pisTCategoryService .getPisTCategoryById(leafCategoryId); if (null != pisTCatagory) { categoryNameList.add(pisTCatagory.getCategoryName()); leafCategoryId = pisTCatagory.getParentId(); } else { categoryNameList.add(""); } level++; } } catch (ServiceException e) { e.printStackTrace(); } for (int k = categoryNameList.size() - 1; k >= 0; k--) { col.add(categoryNameList.get(k)); } if (categoryNameList.size() < totalLevel) { col.add(""); } String[] oppStatArr = opponInfoListVO.getPisTProductStats().split(","); if (null == oppStatArr) { continue; } // 品牌 col.add(oppProduct.getBrandName()); // 竞争对手商品名称 col.add(oppProduct.getProductName()); // 链接 col.add(oppProduct.getProductUrl()); if (-1 != oppStatArr[1].indexOf("有货")) { // 当前价格 col.add(Float.toString(oppProduct.getPrice())); } else { col.add(""); } /**对手商品状态信息*/ // 评论数 col.add(oppStatArr[0]); // 库存状态 col.add(oppStatArr[1]); // 抓取时间 col.add(oppStatArr[2]); /**yhd产品信息*/ // 一号店商品编码 YhdBackProduct yhdBackProduct = opponInfoListVO.getYhdBackProduct(); if (null != yhdBackProduct) { col.add(yhdBackProduct.getProductCode()); col.add(yhdBackProduct.getProductName()); // 一号店品牌(目前yhd数据库无此信息) col.add(""); col.add(yhdBackProduct.getCategoryLvName2()); col.add(yhdBackProduct.getCategoryLvName3()); col.add(yhdBackProduct.getCategoryLvName4()); col.add(yhdBackProduct.getPrice() == null ? null : Float .toString(yhdBackProduct.getPrice())); // 库存状态 // col.add(yhdBackProduct.getStock() <= 0 ? "缺货" : "有货"); if (yhdBackProduct.getStock() <= 0) { col.add("缺货"); } else { col.add("有货"); } col.add("http://www.yihaodian.com/product/detail.do?productID=" + yhdBackProduct.getProductId() + "&merchantID=1"); } else if (null == yhdBackProduct && 0 == i) { for (int j = 0; j < 9; j++) { col.add(""); } } if (opponInfoListVO.getResultMatchDto() != null) { SimpleDateFormat df = new SimpleDateFormat("yy/MM/dd HH:mm"); col.add(null == opponInfoListVO.getResultMatchDto() .getCreateTime() ? "" : df.format(opponInfoListVO .getResultMatchDto().getCreateTime())); col.add(1 == opponInfoListVO.getResultMatchDto().getIsManual() ? "人工匹配" : "自动匹配"); } else if (null == opponInfoListVO.getResultMatchDto() && 0 == i) { for (int j = 0; j < 2; j++) { col.add(""); } } colAll.add(col); } HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("application/octet-stream"); /*response.setHeader("Content-Disposition", "attachment;filename=exceltext.xls");*/ String destFileName = "PIS-竞争对手商品清单-"; destFileName +=siteMap.get(listOppon.get(0).getPisTProduct().getSiteId()); SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd"); destFileName += "-" + sd.format(new Date()) +".xlsx" ; try { destFileName = URLEncoder.encode(destFileName, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } //response.setCharacterEncoding("gbk"); response.setHeader("Content-Disposition", "attachment;filename=" + destFileName); OutputStream output; String relPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); relPath = relPath.replaceAll("classes/", ""); String filePath = relPath + File.separator + "exceldepository" + File.separator +"opponentProduct.xlsx"; try { output = response.getOutputStream(); ExportFactory.exportExcelOnTemplate(filePath, colAll, output); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); }
发表评论
-
机器学习----逻辑回归
2016-02-19 12:12 795这节学习的是逻辑回归 ... -
通用广告推荐,团购推荐,商户推荐,商品推荐数据算法框架
2015-09-01 16:51 630本章介绍的是简单的多维权重算法以广告为例, 广告有很多属性 ... -
算法程序-通过log重现计算过程
2015-08-17 14:56 1526核心算法类 public class ShopScorer ... -
机器学习算法模型(一)
2015-08-04 12:45 810之前介绍了通用的经验型权重配置算法,但是仍然无法对200多个 ... -
商品名匹配算法
2012-12-17 10:23 1763商品名组成为 品牌+型号(规格)+形容词(颜色)+商品简称+ ... -
求点到曲线的最短距离 垂直逼近算法
2012-08-20 11:13 5776y = ln(x) + Math.pow(x,0.000333 ... -
牛顿迭代--高斯方程求解
2012-08-20 10:59 3012y = alnx + x + x*x + x *x *x + ... -
价格弹性指数 价格与销量模型
2012-07-30 10:35 3696在当今电子商务越来越热的情况下,价格战与利润是一个关键点,价格 ... -
float 导致的计算精确度问题
2012-05-31 14:04 1129java 中float 计算精确度问题,解决方法是利用Bi ... -
价格与销量的关系 JAVA实现该算法 最小二乘法
2012-04-05 17:47 1475由于方程式不方便编辑,一切都在附件的图片和word文档上 -
对URL非法字符进行转义
2012-03-15 15:45 1255url=“http://www.baidu.com?body= ... -
JAVA 读取CSV文件
2012-03-12 16:40 13651、读取CSV文件只从第二行开始读取,忽略标题的,包文件自己搜 ... -
OPI 导出EXCEL(JAVA 应用程序非WEB导出)
2012-03-12 16:39 16831、直接是工具类调用静态方法 import java.io. ... -
JSP 无模板导出功能实现
2012-02-16 10:26 897HttpServletResponse response = ... -
lucene 分词解析器 将商品名全部切成各种词方便匹配
2012-01-10 16:22 15941、附件附上中文解析器的相关包 2、代码 package ... -
抓取网站全站信息,并导出数据为EXCEL
2011-11-18 13:21 997现在以https://www.mann-hummel.com/ ... -
File的读取和写入操作 java
2011-11-18 13:08 9961、文件的读取操作 File file = new Fil ... -
排序算法,从大到小
2011-11-11 10:51 8781、得到list中最大的那个值 public OppoSit ... -
正则表达式提取特定字符串内的特定内容
2011-09-28 09:16 1548我在@京东商城 发现了一个非常不错的商品:七彩云南 寿 熟饼3 ... -
用递归算法查找父节点下的所有叶子节点
2011-09-13 16:31 9565父节点 ----叶子节点 ----子节点一 ------ ...
相关推荐
简洁的导出 Excel 工具类 封装好的 poi 导出Util 实用类
在IT行业中,Excel导出工具类是经常被用于数据处理和报表生成的模块。这个工具类通常是为了简化从应用程序中批量导出数据到Excel文件的过程,使得开发者可以更高效地处理大量的结构化信息。以下是对"Excel导出工具类...
这里我们讨论的“导入导出excel工具类”是一个专门处理这些任务的Java代码库,它可能包含一系列预定义的方法和逻辑,帮助开发者高效地与Excel文件进行交互。下面将详细阐述相关的知识点: 1. **Java API for Excel...
在Java编程中,"导出Excel工具类"是一种常见的需求,尤其在数据分析、报表生成或者数据导出场景中。这个工具类通常包含了处理Excel文件、创建工作簿、工作表、单元格等一系列操作的方法,以便于程序员能快速便捷地将...
综上所述,"excel注解方式导入导出(包含常用工具类)"这个主题涵盖了解析和生成Excel文件的编程技巧,以及在处理数据过程中常用的辅助工具类的运用。通过熟练掌握这些知识点,开发者能够更高效地处理Excel数据,...
在Web应用程序中,有时我们需要提供功能让用户导入或导出Excel文件,这时就需要用到专门的Excel导入导出工具类。本文将详细讲解Excel导入导出工具类在Java Web开发中的实现原理、常用库以及实际应用。 首先,导入...
标题中的"C#工具类库类库 包含所有的常用工具类"暗示了这是一个集合,包含了多种实用工具类,能够极大地提升开发效率。这些工具类涵盖了从文件操作到网络通信的多个领域。 首先,FTP操作类是用于与FTP服务器进行...
在给定的"条件导出Excel 工具类.zip"中,我们可以推断这是一个用于处理Excel文件的工具类库,可能包含了多种针对Excel数据导出的条件逻辑。下面将详细讨论与这个主题相关的知识点。 1. **Apache POI库**: 在Java中...
在PHP中,要在线导出Excel,最常用的是PHPExcel库或者更现代的Spout库。PHPExcel库提供了丰富的API,可以创建、读取和编辑Excel文件,但它的内存消耗较大。相比之下,Spout库则以较低的内存占用为特点,适合处理大量...
"EXCEL导出工具"是一款专门设计用于将数据从数据库(如ORACLE和SQL SERVER)导出到EXCEL的工作软件。这款工具的一大亮点是它能够处理多条查询语句,并将结果分别导出到不同的EXCEL工作表(SHEET)中,方便用户进行...
总之,C#的Excel操作类为开发者提供了强大的工具,使他们能够轻松地处理Excel文件,实现数据的导入导出、格式设置等复杂任务,大大提升了工作效率。对于处理大量Excel数据的企业级应用来说,这样的类库是不可或缺的...
Java导出Excel工具类是Java开发中常用的一种技术,它使得在Web应用或者服务中能够方便地生成Excel表格,提供数据导出的功能。在给定的"java jsp 导出 excle"标签中,我们可以推断这个工具类主要用于Java Web环境,...
标题 "C#.net常用工具类" 涉及的核心知识点主要围绕.NET框架、NPOI库以及Excel数据的导入与导出。以下是对这些技术的详细介绍: .NET框架是由微软开发的一种面向对象的编程模型,它提供了丰富的类库,用于构建各种...
7. **DataLabelAttribute** 类:这是一个自定义属性,可能用于装饰数据模型的属性,以便在导出Excel时为特定字段添加标签或格式。例如,可以定义一个属性来指示某个字段是标题、日期、数字还是备注。 综上所述,这...
Cache、CSV文件转换、DEncrypt、FTP操作类、JS、Json、Mime、PDF、Properties、ResourceManager、XML操作类、弹出消息类、导出Excel、分词辅助类、汉字转拼音、配置文件操作类、日历、上传下载、时间操作类、视频...
在.NET开发环境中,C#是一种常用的编程语言,它提供了丰富的库和工具来处理各种任务,包括数据导出和图表创建。本压缩包“C#导出Excel和图形.zip”很可能包含一系列示例代码或教程,旨在帮助开发者学习如何在C#应用...
在IT行业中,Excel作为一种强大的电子表格工具,常用于数据分析、报告制作和数据交换。"Excel导出数据(根据Excel模板定义)...使用Apache POI库,我们可以实现根据预设模板动态生成和导出Excel文件,满足各种业务需求。
在Java编程中,导出Excel、Word和PDF是常见的数据呈现和报告生成需求。这些文件格式广泛用于数据存储、报表生成、文档分享等场景。以下将详细介绍如何使用Java实现这三种文件类型的导出。 首先,让我们关注Excel的...
在.NET开发环境中,Visual Studio(VS)2010是一个常用工具,用于创建各种类型的应用程序,包括与Microsoft Office交互的项目。本文将详细介绍如何在VS2010中导出一个可以操作Excel的类,以及两种不同的实现方法。这...
本文将详细解析"java开发常用工具类"中的关键知识点,包括日历、时间处理、Excel导出、网络请求、流操作、数据处理、数值计算以及XML和Web工具类。 1. **日历和时间处理**: Java中`java.util.Calendar`和`java....