一、前台实现:

1. HTML:

  1. <div>
  2.   <a href="javascript:void(0);" class="btnStyleLeft">
  3. <span class="fa fa-external-link" onclick="test.exportGridData()">导出</span>
  4.   </a>
  5. </div>

2.js:

  1. /*导出查询记录到本地下载目录*/
  2. exportGridData: function(type) {
  3. var exportIFrame = document.createElement("iframe");
  4. exportIFrame.src = "/ipeg-web/requestDispatcher?" + exportParams.join("&"); // exportParams带入需要传至后台的参数
  5. exportIFrame.style.display = "none";
  6. document.body.appendChild(exportIFrame);
  7. },

 

二、后台实现:

 1、ExtensionMode枚举---用于csv/txt/excel2003/excel2007文件的写入

  1. import com.csvreader.CsvWriter;
  2. import com.google.common.base.Charsets;
  3. import com.google.common.base.Joiner;
  4. import com.google.common.base.Preconditions;
  5. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  6. import org.apache.poi.hssf.usermodel.HSSFFont;
  7. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  8. import org.apache.poi.ss.usermodel.*;
  9. import org.apache.poi.xssf.usermodel.XSSFCell;
  10. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  11. import java.io.IOException;
  12. import java.io.OutputStream;
  13. import java.util.List;
  14.  
  15. public enum ExtensionMode {
  16. TXT(".txt", "application/octet-stream") {
  17. @Override
  18. public void write(List<String[]> lines, String[] header, OutputStream outputStream) throws IOException {
  19. checkNotNull(lines, header, outputStream);
  20. final String headerString = Joiner.on(",").useForNull("").join(header);
  21. outputStream.write((headerString + "\r\n").getBytes(Charsets.UTF_8));
  22. for (String[] parts : lines) {
  23. final String line = Joiner.on(",").useForNull("").join(parts);
  24. outputStream.write((line + "\r\n").getBytes(Charsets.UTF_8));
  25. }
  26. }
  27. },
  28. CSV(".csv", "application/octet-stream") {
  29. @Override
  30. public void write(List<String[]> lines, String[] header, OutputStream outputStream) throws IOException {
  31. checkNotNull(lines, header, outputStream);
  32. final CsvWriter csvWriter = new CsvWriter(outputStream, ',', Charsets.UTF_8);
  33. try {
  34. csvWriter.writeRecord(header);
  35. for (String[] parts : lines) {
  36. csvWriter.writeRecord(parts);
  37. }
  38. csvWriter.flush();
  39. } finally {
  40. csvWriter.close();
  41. }
  42. }
  43. },
  44. EXCEL2003(".xls", "application/vnd.ms-excel") {
  45. @Override
  46. public void write(List<String[]> lines, String[] header, OutputStream outputStream) throws IOException {
  47. checkNotNull(lines, header, outputStream);
  48. final Workbook workbook = new ExcelMaker() {
  49. @Override
  50. protected Workbook createWorkbook() {
  51. return new HSSFWorkbook();
  52. }
  53. }.make(lines, header);
  54. workbook.write(outputStream);
  55. }
  56. },
  57. EXCEL2007(".xlsx", "application/vnd.ms-excel") {
  58. @Override
  59. public void write(List<String[]> lines, String[] header, OutputStream outputStream) throws IOException {
  60. checkNotNull(lines, header, outputStream);
  61. final Workbook workbook = new ExcelMaker() {
  62. @Override
  63. protected Workbook createWorkbook() {
  64. return new XSSFWorkbook();
  65. }
  66. }.make(lines, header);
  67. workbook.write(outputStream);
  68. }
  69. };
  70. private static void checkNotNull(List<String[]> lines, String[] header, OutputStream outputStream) {
  71. Preconditions.checkNotNull(lines, "null list for write");
  72. Preconditions.checkNotNull(header, "null header");
  73. Preconditions.checkNotNull(outputStream, "null output stream ");
  74. }
  75. private final String suffix;
  76. private final String contentType;
  77.  
  78. ExtensionMode(String suffix, String contentType) {
  79. this.suffix = suffix;
  80. this.contentType = contentType;
  81. }
  82.  
  83. public String getSuffix() {
  84. return suffix;
  85. }
  86.  
  87. public String getContentType() {
  88. return contentType;
  89. }
  90.  
  91. public static ExtensionMode getExtensionModeBySuffix(String suffix) {
  92. for (ExtensionMode mode : ExtensionMode.values()) {
  93. if (mode.getSuffix().equalsIgnoreCase(suffix))
  94. return mode;
  95. }
  96. throw new IllegalArgumentException("Unknown File Type.");
  97. }
  98.  
  99. public abstract void write(List<String[]> lines, String[] header, OutputStream outputStream)
  100. throws IOException;
  101.  
  102. private abstract static class ExcelMaker {
  103. public Workbook make(List<String[]> lines, String[] header) {
  104. Workbook wb = createWorkbook();
  105. Sheet sheet = wb.createSheet("数据源");
  106. // 创建格式
  107. CellStyle cellStyle = getCellStyle(wb);
  108. // 添加第一行标题
  109. addHeader(header, sheet, cellStyle);
  110. // 从第二行开始写入数据
  111. addData(lines, sheet, cellStyle);
  112. return wb;
  113. }
  114.  
  115. private void addData(List<String[]> lines, Sheet sheet, CellStyle cellStyle) {
  116. for (int sn = 0; sn < lines.size(); sn++) {
  117. String[] col = lines.get(sn);
  118. Row row = sheet.createRow(sn + 1);
  119. for (int cols = 0; cols < col.length; cols++) {
  120. Cell cell = row.createCell(cols);
  121. cell.setCellStyle(cellStyle);
  122. cell.setCellType(XSSFCell.CELL_TYPE_STRING);
  123. cell.setCellValue(col[cols]);
  124. }
  125. }
  126. }
  127.  
  128. private CellStyle getCellStyle(Workbook wb) {
  129. Font font = wb.createFont();
  130. font.setColor(HSSFFont.COLOR_NORMAL);
  131. font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
  132. CellStyle cellStyle = wb.createCellStyle();
  133. cellStyle.setFont(font);
  134. cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  135. cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  136. return cellStyle;
  137. }
  138.  
  139. private void addHeader(String[] header, Sheet sheet, CellStyle cellStyle) {
  140. Row titleRow = sheet.createRow(0);
  141. // 创建第1行标题单元格
  142. for (int i = 0, size = header.length; i < size; i++) {
  143. switch (i) {
  144. case 5:
  145. case 7:
  146. sheet.setColumnWidth(i, 10000);
  147. break;
  148. default:
  149. sheet.setColumnWidth(i, 3500);
  150. break;
  151. }
  152. Cell cell = titleRow.createCell(i, 0);
  153. cell.setCellStyle(cellStyle);
  154. cell.setCellType(XSSFCell.CELL_TYPE_STRING);
  155. cell.setCellValue(header[i]);
  156. }
  157. }
  158. protected abstract Workbook createWorkbook();
  159. }
  160. }

2. dataExport:具体的数据导出

  1. public class dataExport {
  2. private final byte[] UTF_BOM = new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF};
  3. private final String[] header = new String[]{"user", "name", "id"};
  4. List logData = null;
  5. OutputStream outputStream = null;

  6.   outputStream = response.getOutputStream();
  7. try {
  8. export(ExtensionMode.CSV, header, getUserData(logData), outputStream);
  9. } catch (IOException e) {
  10. e.printStackTrace();
  11. }finally{
  12. if (outputStream != null)
  13. {
  14. try
  15. {
  16. outputStream.close();
  17. }
  18. catch (Exception e)
  19. {
  20. e.printStackTrace();
  21. }
  22. }
  23. }
  24.  
  25. private void export(ExtensionMode extensionMode, String[] header, ImmutableList<String[]> lines,
  26. OutputStream outputStream) throws IOException {
  27. response.setContentType(extensionMode.getContentType() + ";charset=UTF-8");
  28. response.reset();
  29. response.setHeader("Content-Disposition", "attachment; filename="
  30. + URLEncoder.encode(getFileName(extensionMode.getSuffix()), "UTF-8"));
  31.  
  32. if (extensionMode == ExtensionMode.CSV) {
  33. outputStream.write(UTF_BOM); //防止中文乱码
  34. }
  35. extensionMode.write(lines, header, outputStream);
  36. outputStream.flush();
  37. }
  38.  
  39. private String getFileName(String extension) {
  40. SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
  41. return format.format(new Date()) + extension;
  42. }
  43.  
  44. public ImmutableList<String[]> getUserData(List<UserEntity> data) {
  45. return from(data).transform(new userDataFunction()).toList();
  46. }
  47.  
  48. private class userDataFunction implements Function<UserEntity, String[]> {
  49. @Override
  50. public String[] apply(UserEntity input) {
  51. return new String[]{
  52. input.getName(),
  53. input.getUser(),
  54. input.getId()
  55. };
  56. }
  57. }
  58. }

3.需要添加的maven依赖如下:

  1. <dependency>
    <groupId>net.sf.opencsv</groupId>
    <artifactId>opencsv</artifactId>
    <version>1.8</version>
    </dependency>
    <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.9</version>
    </dependency>
    <dependency>
    <groupId>org.apache.poi-ooxml</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.7</version>
    </dependency>

三、效果图如下:

  

生成csv格式文件并导出至页面的前后台实现的更多相关文章

  1. java导出csv格式文件

    导出csv格式文件的本质是导出以逗号为分隔的文本数据 import java.io.BufferedWriter; import java.io.File; import java.io.FileIn ...

  2. 导出CSV格式文件,用Excel打开乱码的解决办法

    导出CSV格式文件,用Excel打开乱码的解决办法 1.治标不治本的办法 将导出CSV数据文件用记事本打开,然后另存为"ANSI"编码格式,再用Excel打开,乱码解决. 但是,这 ...

  3. MYSQL导入CSV格式文件数据执行提示错误(ERROR 1290): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement.

    MYSQL导入CSV格式文件数据执行提示错误(ERROR 1290): The MySQL server is running with the --secure-file-priv option s ...

  4. 如何将EDI报文转换为CSV格式文件?

    如果您对EDI项目实施有一定的了解,想必您一定知道,在正式开始EDI项目实施之前,都会有EDI顾问与您接洽,沟通EDI项目需求.其中,会包含EDI通信双方使用哪种传输协议,传输的报文是符合什么标准的, ...

  5. Python数据写入csv格式文件

    (只是传递,基础知识也是根基) Python读取数据,并存入Excel打开的CSV格式文件内! 这里需要用到bs4,csv,codecs,os模块. 废话不多说,直接写代码!该重要的内容都已经注释了, ...

  6. 生成Csv格式的字符串

    using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...

  7. weka数据挖掘拾遗(一)---- 生成Arff格式文件

    一.什么是arff格式文件 1.arff是Attribute-Relation File Format缩写,从英文字面也能大概看出什么意思.它是weka数据挖掘开源程序使用的一种文件模式.由于weka ...

  8. python3 库pandas写入csv格式文件出现中文乱码问题解决方法

    python3 库pandas写入csv格式文件出现中文乱码问题解决方法 解决方案: 问题是使用pandas的DataFrame的to_csv方法实现csv文件输出,但是遇到中文乱码问题,已验证的正确 ...

  9. 使用Spark读写CSV格式文件(转)

    原文链接:使用Spark读写CSV格式文件 CSV格式的文件也称为逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号.在本文中的CSV格 ...

随机推荐

  1. Angular02 通过angular-cli来搭建web前端项目

    利用angular-cli的常见命令: npm i --save 包名   ->  软件依赖    npm i --save-dev 包名     ->  开发依赖    ng new 项 ...

  2. Ajax方式分页加载列表实现

    在前面: 最近需要用到这个功能,所以这几天一直在研究这个,目前大致功能已实现,后续需要完善,但需要的功能点已完成,记录下: 1.分页功能引入bootstrap的分页插件: <script typ ...

  3. Jfinal-Plugin源码解读

    PS:cnxieyang@163.com/xieyang@e6yun.com 本文就Jfinal-plugin的源码进行分析和解读 Plugin继承及实现关系类图如下,常用的是Iplugin的三个集成 ...

  4. 学习笔记-express路径问题

    在页面渲染成功之后,报错出现静态文件css样式引用路径出错,于是我就根据express api文档,托管静态文件作出修改,最后全是徒劳.于是我又从引用开始找起,<link rel="s ...

  5. JAVA爬虫实践(实践三:爬虫框架webMagic和csdnBlog爬虫)

    WebMagic WebMagic是一个简单灵活的Java爬虫框架.基于WebMagic,你可以快速开发出一个高效.易维护的爬虫. 采用HttpClient可以实现定向的爬虫,也可以自己编写算法逻辑来 ...

  6. Maven中央仓库源地址改为阿里云(IDEA)

    我的Maven是IDEA2017.1.2集成的,所以settings.xml在此位置 E:\Program Files\JetBrains\IntelliJ IDEA 2017.1.2\plugins ...

  7. 正则API

    正则表达式:规定字符串中字符出现规律的公式 如果备选字符列表中个别字符之间是连续的,可用-省略中间的字符.比如: 匹配1位数字:   [0-9]匹配1位小写字母 : [a-z] 匹配1位大写字母 : ...

  8. APIs

    应用程序接口(application programe interfaces)

  9. Thrift之TProtocol系列TJSONProtocol解析

    在了解JSON协议之前,朋友们可以先去了解一下JSON的基础知识,和ASCII基本分布,关于JSON一些常识请见这里; JSON (JavaScript Object Notation)是一种数据交换 ...

  10. JVM之GC算法