一、前台实现:

1. HTML:

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

2.js:

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

 

二、后台实现:

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

import com.csvreader.CsvWriter;
import com.google.common.base.Charsets;
import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List; public enum ExtensionMode {
TXT(".txt", "application/octet-stream") {
@Override
public void write(List<String[]> lines, String[] header, OutputStream outputStream) throws IOException {
checkNotNull(lines, header, outputStream);
final String headerString = Joiner.on(",").useForNull("").join(header);
outputStream.write((headerString + "\r\n").getBytes(Charsets.UTF_8));
for (String[] parts : lines) {
final String line = Joiner.on(",").useForNull("").join(parts);
outputStream.write((line + "\r\n").getBytes(Charsets.UTF_8));
}
}
},
CSV(".csv", "application/octet-stream") {
@Override
public void write(List<String[]> lines, String[] header, OutputStream outputStream) throws IOException {
checkNotNull(lines, header, outputStream);
final CsvWriter csvWriter = new CsvWriter(outputStream, ',', Charsets.UTF_8);
try {
csvWriter.writeRecord(header);
for (String[] parts : lines) {
csvWriter.writeRecord(parts);
}
csvWriter.flush();
} finally {
csvWriter.close();
}
}
},
EXCEL2003(".xls", "application/vnd.ms-excel") {
@Override
public void write(List<String[]> lines, String[] header, OutputStream outputStream) throws IOException {
checkNotNull(lines, header, outputStream);
final Workbook workbook = new ExcelMaker() {
@Override
protected Workbook createWorkbook() {
return new HSSFWorkbook();
}
}.make(lines, header);
workbook.write(outputStream);
}
},
EXCEL2007(".xlsx", "application/vnd.ms-excel") {
@Override
public void write(List<String[]> lines, String[] header, OutputStream outputStream) throws IOException {
checkNotNull(lines, header, outputStream);
final Workbook workbook = new ExcelMaker() {
@Override
protected Workbook createWorkbook() {
return new XSSFWorkbook();
}
}.make(lines, header);
workbook.write(outputStream);
}
};
private static void checkNotNull(List<String[]> lines, String[] header, OutputStream outputStream) {
Preconditions.checkNotNull(lines, "null list for write");
Preconditions.checkNotNull(header, "null header");
Preconditions.checkNotNull(outputStream, "null output stream ");
}
private final String suffix;
private final String contentType; ExtensionMode(String suffix, String contentType) {
this.suffix = suffix;
this.contentType = contentType;
} public String getSuffix() {
return suffix;
} public String getContentType() {
return contentType;
} public static ExtensionMode getExtensionModeBySuffix(String suffix) {
for (ExtensionMode mode : ExtensionMode.values()) {
if (mode.getSuffix().equalsIgnoreCase(suffix))
return mode;
}
throw new IllegalArgumentException("Unknown File Type.");
} public abstract void write(List<String[]> lines, String[] header, OutputStream outputStream)
throws IOException; private abstract static class ExcelMaker {
public Workbook make(List<String[]> lines, String[] header) {
Workbook wb = createWorkbook();
Sheet sheet = wb.createSheet("数据源");
// 创建格式
CellStyle cellStyle = getCellStyle(wb);
// 添加第一行标题
addHeader(header, sheet, cellStyle);
// 从第二行开始写入数据
addData(lines, sheet, cellStyle);
return wb;
} private void addData(List<String[]> lines, Sheet sheet, CellStyle cellStyle) {
for (int sn = 0; sn < lines.size(); sn++) {
String[] col = lines.get(sn);
Row row = sheet.createRow(sn + 1);
for (int cols = 0; cols < col.length; cols++) {
Cell cell = row.createCell(cols);
cell.setCellStyle(cellStyle);
cell.setCellType(XSSFCell.CELL_TYPE_STRING);
cell.setCellValue(col[cols]);
}
}
} private CellStyle getCellStyle(Workbook wb) {
Font font = wb.createFont();
font.setColor(HSSFFont.COLOR_NORMAL);
font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setFont(font);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
return cellStyle;
} private void addHeader(String[] header, Sheet sheet, CellStyle cellStyle) {
Row titleRow = sheet.createRow(0);
// 创建第1行标题单元格
for (int i = 0, size = header.length; i < size; i++) {
switch (i) {
case 5:
case 7:
sheet.setColumnWidth(i, 10000);
break;
default:
sheet.setColumnWidth(i, 3500);
break;
}
Cell cell = titleRow.createCell(i, 0);
cell.setCellStyle(cellStyle);
cell.setCellType(XSSFCell.CELL_TYPE_STRING);
cell.setCellValue(header[i]);
}
}
protected abstract Workbook createWorkbook();
}
}

2. dataExport:具体的数据导出

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

  outputStream = response.getOutputStream();
try {
export(ExtensionMode.CSV, header, getUserData(logData), outputStream);
} catch (IOException e) {
e.printStackTrace();
}finally{
if (outputStream != null)
{
try
{
outputStream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
} private void export(ExtensionMode extensionMode, String[] header, ImmutableList<String[]> lines,
OutputStream outputStream) throws IOException {
response.setContentType(extensionMode.getContentType() + ";charset=UTF-8");
response.reset();
response.setHeader("Content-Disposition", "attachment; filename="
+ URLEncoder.encode(getFileName(extensionMode.getSuffix()), "UTF-8")); if (extensionMode == ExtensionMode.CSV) {
outputStream.write(UTF_BOM); //防止中文乱码
}
extensionMode.write(lines, header, outputStream);
outputStream.flush();
} private String getFileName(String extension) {
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
return format.format(new Date()) + extension;
} public ImmutableList<String[]> getUserData(List<UserEntity> data) {
return from(data).transform(new userDataFunction()).toList();
} private class userDataFunction implements Function<UserEntity, String[]> {
@Override
public String[] apply(UserEntity input) {
return new String[]{
input.getName(),
input.getUser(),
input.getId()
};
}
}
}

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

<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. Mysql ibd文件恢复指南

    背景 mysql在使用的过程中,难免遇到数据库表误操作,基于此,作者亲力亲为,对mysql数据表ibd文件的恢复做以下详细的说明,对开发或者初级dba提供一定的指导作用,博客中如若存在相关问题,请指明 ...

  2. 通过例子理解 k8s 架构 - 每天5分钟玩转 Docker 容器技术(122)

    为了帮助大家更好地理解 Kubernetes 架构,我们部署一个应用来演示各个组件之间是如何协作的. 执行命令 kubectl run httpd-app --image=httpd --replic ...

  3. bzoj:1230: [Usaco2008 Nov]lites 开关灯

    Description Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛们思维敏捷. 其中一个大型玩具是牛栏中的灯. N (2 <= N <= 100,000) 头奶牛中的每 ...

  4. H5基础浏览器兼容性

    <!DOCTYPE HTML><html><body> <video width="320" height="240" ...

  5. MFC获取可执行文件(exe)所在文件目录

    可以应用函数GetModuleFileName(),举一个例子: CString strexe; ::GetModuleFileName(NULL,strexe.GetBufferSetLength( ...

  6. [20160711][VS2012配置OpenCV2.4.9]

    相关说明 OpenCV是一套开源机器视觉库,用于简化机器视觉算法的开发与调试. 移植环境 操作系统:Win7 64位 移植软件:Visual Studio 2012 代码下载: https://sou ...

  7. 小工具:截图&简单图像处理

    一.程序运行截图 二.获取屏幕截图的方法 首先知道我们可以通过Screen.PrimaryScreen.Bounds获取到当前整个屏幕,再利用Bitmap和Graphics就可以得到整个屏幕的图片了. ...

  8. zzuli oj 1135 算菜价

    题目: Description 妈妈每天都要出去买菜,但是回来后,兜里的钱也懒得数一数,到底花了多少钱真是一笔糊涂帐.现在好了,作为好儿子(女儿)的你可以给她用程序算一下了,呵呵. Input 输入含 ...

  9. How to bypass Win10 logon password?

    Usually we will use LiveView or VFC to "boot up" the evidence files acquired from suspect' ...

  10. dedecms 下载时弹出提示登录框或直接下载

    http://jingyan.baidu.com/article/9f63fb918656c2c8400f0ebc.html DEDECMS 默认下载 是直接给出了一个  本地下载的   下载链接 本 ...