csv格式导出文件
先上传连个图片看看效果,这是界面效果dwz框架(springmvc开发)
点击导出csv效果图
js部分的代码(带条件查询的csv导出):
function exportReportCsv(){
exportAgencyProfitList1();
}
function exportAgencyProfitList1($pageNum,$numPerPage){
var $valueArray={ 'CUST_ID':"${PD.CUST_ID}"==' '?'':"${PD.CUST_ID}",
'MYSTS':"${PD.MYSTS}"==' '?'':"${PD.MYSTS}",
'AGENTID':"${PD.AGENTID}"==' '?'':"${PD.AGENTID}",
'APPLRDAT1':"${PD.APPLRDAT1}"==' '?'':"${PD.APPLRDAT1}",
'APPLRDAT2':"${PD.APPLRDAT2}"==' '?'':"${PD.APPLRDAT2}"
};
window.location.href="<%=path%>/customer/exportCsv?"+jQuery.param($valueArray);
return;
}
jsp 代码(其实就是一个onclick事件):
<li><a id="csv" class="edit" href="#" onclick="return exportReportCsv();"><span>导出CSV</span></a></li>
controller部分代码:
@RequestMapping("/customer/exportCsv")
@ResponseBody
public void exportCsv1(Page page,HttpServletResponse response) throws Exception{
//map中装了两个list集合,titles:List<String> varList : List<PageData>
logger.info("客户信息csv表格导出");
pd=this.getPageData(page);
//csv表数据
List<Map<String, String>> exportData = null;
exportData = customerService.findCsvAgt1(pd);
//csv表头
LinkedHashMap<String, String> map =customerService.findCsvTabTitle1();
File file = CSVUtil.createCSVFile(response,exportData, map,CSVUtil.path,CSVUtil.name);//生成CSV文件保存在c:/customer/也就是CSVUtil.path下
String fileName = file.getName();
CSVUtil.exportFile(response, CSVUtil.path + fileName, fileName);//将c:/customer/下的文件读取成CSV文件
CSVUtil.deleteFiles(CSVUtil.path);//删除c:/customer/下的文件,只保留界面生成文件
}
interface部分代码:
/**
* csv导出
*/
public LinkedHashMap<String, String> findCsvTabTitle();
/**
* csv导出查数据
*/
public List<Map<String, String>> findCsvAgt(PageData pd) throws Exception;
接口实现类代码:
/*
* csv导出表头
*/
@Override//设置表头信息
public LinkedHashMap<String, String> findCsvTabTitle1() {
logger.info("执行服务,查询客户账户CSV表头:findCsvTabTitle");
LinkedHashMap<String, String> map = new LinkedHashMap<>();
map.put("1", "客户ID");
map.put("2", "客户姓名");
map.put("3", "账户编号");
map.put("4", "账户类型");
map.put("5", "货币类型");
map.put("6", "账户余额");
map.put("7", "账户冻结金额");
map.put("8", "账户带清算金额");
map.put("9", "账户状态");
map.put("10", "账户标识");
map.put("11", "最后一次交易日期");
map.put("12", "最后一次交易时间");
return map;
}
/*
* csv导出内容
*/
@Override
public List findCsvAgt1(PageData pd) throws Exception {
logger.info("执行服务,查询客户账户CSV表数据:findCsvAgt1");
List exportData = new ArrayList<Map>();
List<PageData> dataList = (List<PageData>) dao.findForList("customerMapper.findCSVAgt1",pd);//从数据库查询数据,mybaits框架
for (PageData pdd : dataList) {//数据库数据解析,与表头对应起来
LinkedHashMap map = new LinkedHashMap();
map.put("1",pdd.getString("CUST_ID"));
map.put("2",pdd.getString("CUST_NAM") );
map.put("3",pdd.getString("PAY_AC_NO"));
map.put("4",pdd.getString("ACC_TYPE") );
map.put("5",pdd.getString("CCY"));
map.put("6",pdd.getString("ACC_BALANCE") );
map.put("7",pdd.getString("ACC_FROZEN_AMT") );
map.put("8",pdd.getString("ACC_CLEAR_AMT") );
map.put("9",pdd.getString("AC_STATUS") );
map.put("10",pdd.getString("LIST_STS_FLG") );
map.put("11",pdd.getString("LST_TXN_DATE") );
map.put("12",pdd.getString("LST_TXN_TIME") );
exportData.add(map);
}
return exportData;
}
sql样板:
<!-- csv导出查询========================================================-->
<!-- 账户浏览EXCEL表格导出 -->
<select id="findExcelAgt2" parameterType="pd" resultType="pd"> select a.CUST_ID as var1,a.CUST_NAM as var2,b.PAY_AC_NO as var3,b.ACC_TYPE as var4,b.ACC_BALANCE as var5,
CASE b.AC_STATUS
WHEN '' THEN '正常'
WHEN '' THEN '未激活'
WHEN '' THEN '冻结'
WHEN '' THEN '已销毁'
ELSE NULL END var6,
b.LST_TXN_DATE as var7
from ARP_CUST_INFO a
join ARP_AC_REL c on c.LINK_ID = a.CUST_ID
join ARP_AC_PROFILE b on c.PAY_AC_NO = b.PAY_AC_NO
where 1 = 1 <if test="PAY_AC_NO!=null and PAY_AC_NO!=''">
<![CDATA[AND b.PAY_AC_NO like concat(concat('%',#{PAY_AC_NO}),'%')]]>
</if>
<if test="CUST_ID!=null and CUST_ID!=''">
<![CDATA[AND a.CUST_ID like concat(concat('%',#{CUST_ID}),'%')]]>
</if>
<if test="AC_STATUS!=null and AC_STATUS!=''">
<![CDATA[AND b.AC_STATUS like concat(concat('%',#{AC_STATUS}),'%')]]>
</if>
<if test="LST_TXN_DATE1!=null and LST_TXN_DATE1!=''">
and to_date(b.LST_TXN_DATE,'YYYYMMDD') >= to_date(#{LST_TXN_DATE1},'YYYY-MM-DD')
</if>
<if test="LST_TXN_DATE2!=null and LST_TXN_DATE2!=''">
and to_date(b.LST_TXN_DATE,'YYYYMMDD') <= to_date(#{LST_TXN_DATE2},'YYYY-MM-DD')
</if>
order by b.LST_TXN_DATE desc,b.LST_TXN_TIME desc
</select>
工具类********这才是核心的部分:
csv导出工具类
/**
*
*/
package com.common.util; /**
* 描述:
* @author GK
* @date 创建时间:2016年7月14日 下午3:18:02
* @version 1.0
*/
/**
* @author Administrator
*
*/
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils;
public class CSVUtil {
public static final String name="customer";//生成文件的名的前缀,如customer89809808080.csv
public static final String path="c:/customer/";//生成csv文件的保存路径
/**
* 生成为CVS文件
* @param exportData
* 源数据List
* @param map
* csv文件的列表头map
* @param outPutPath
* 文件路径
* @param fileName
* 文件名称
* @return
*/
@SuppressWarnings("rawtypes")
public static File createCSVFile(HttpServletResponse response,List exportData, LinkedHashMap map,String outPutPath, String fileName ) {
response.setContentType("application/csv;charset=UTF-8"); File csvFile = null;
BufferedWriter csvFileOutputStream = null;
try {
File file = new File(outPutPath);
if (!file.exists()) {
file.mkdir();
}
//定义文件名格式并创建
csvFile = File.createTempFile(fileName, ".csv", new File(outPutPath));
System.out.println("csvFile:" + csvFile);
// UTF-8使正确读取分隔符","
csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(
csvFile), "UTF-8"), 1024);
System.out.println("csvFileOutputStream:" + csvFileOutputStream);
// 写入文件头部
for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator.hasNext();) {
java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator.next();
if((String) propertyEntry.getValue() != null) {
csvFileOutputStream.write((String) propertyEntry.getValue());
}else{
csvFileOutputStream.write("");
}
if (propertyIterator.hasNext()) {
csvFileOutputStream.write(",");
}
}
csvFileOutputStream.newLine();
// 写入文件内容
for (Iterator iterator = exportData.iterator(); iterator.hasNext();) {
Object row = (Object) iterator.next();
for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator
.hasNext();) {
java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator
.next();
csvFileOutputStream.write((String) BeanUtils.getProperty(row,
(String) propertyEntry.getKey()));
if (propertyIterator.hasNext()) {
csvFileOutputStream.write(",");
}
}
if (iterator.hasNext()) {
csvFileOutputStream.newLine();
}
}
csvFileOutputStream.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
csvFileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return csvFile;
} /**
* 下载文件
* @param response
* @param csvFilePath
* 文件路径
* @param fileName
* 文件名称
* @throws IOException
*/
public static void exportFile(HttpServletResponse response, String csvFilePath, String fileName)
throws IOException {
response.setContentType("application/csv;charset=UTF-8");
response.setHeader("Content-Disposition",
"attachment; filename=" + URLEncoder.encode(fileName, "UTF-8")); InputStream in = null;
try {
in = new FileInputStream(csvFilePath);
int len = 0;
byte[] buffer = new byte[1024];
response.setCharacterEncoding("UTF-8");
OutputStream out = response.getOutputStream();
while ((len = in.read(buffer)) > 0) {
out.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF });
out.write(buffer, 0, len);
}
} catch (FileNotFoundException e) {
System.out.println(e);
} finally {
if (in != null) {
try {
in.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
} /**
* 删除该目录filePath下的所有文件
* @param filePath
* 文件目录路径
*/
public static void deleteFiles(String filePath) {
File file = new File(filePath);
if (file.exists()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
files[i].delete();
}
}
}
} /**
* 删除单个文件
* @param filePath
* 文件目录路径
* @param fileName
* 文件名称
*/
public static void deleteFile(String filePath, String fileName) {
File file = new File(filePath);
if (file.exists()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
if (files[i].getName().equals(fileName)) {
files[i].delete();
return;
}
}
}
}
} /**
* 测试数据
* @param args
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args) {
HttpServletResponse response;
List exportData = new ArrayList<Map>();
Map row1 = new LinkedHashMap<String, String>();
row1.put("1", "11");
row1.put("2", "12");
row1.put("3", "13");
row1.put("4", "14");
exportData.add(row1);
row1 = new LinkedHashMap<String, String>();
row1.put("1", "21");
row1.put("2", "22");
row1.put("3", "23");
row1.put("4", "24");
exportData.add(row1);
LinkedHashMap map = new LinkedHashMap();
map.put("1", "第一列");
map.put("2", "第二列");
map.put("3", "第三列");
map.put("4", "第四列"); String path = "c:/";
String fileName = "文件导出";
// File file = CSVUtil.createCSVFile(response,exportData, map, path, fileName);
// String fileName2 = file.getName();
// System.out.println("文件名称:" + fileName2);
}
}
到此就结束啦。。。
csv格式导出文件的更多相关文章
- 导入CSV格式的数据
导入CSV格式的数据 (参见http://dev.mysql.com/doc/refman/5.6/en/load-data.html) 1.数据库表(st_pptn_r) CREATE TABLE ...
- CSVHelper 导出CSV 格式
public class CSVHelper { System.Windows.Forms.SaveFileDialog saveFileDialog1;//保存 private string hea ...
- C#对.CSV格式的文件--逗号分隔值文件 的读写操作及上传ftp服务器操作方法总结
前言 公司最近开发需要将数据保存到.csv文件(逗号分隔值 文件)中然后上传到ftp服务器上,供我们系统还有客户系统调用,之前完全没有接触过这个,所以先来看看百度的解释:逗号分隔值(Comma-Sep ...
- salesforce 零基础学习(二十四)解析csv格式内容
salesforce中支持对csv格式的内容批量导入,可以使用dataloader,然而有些情况下,当用户没有相关权限使用dataloader导入情况下,就的需要使用VF和apex代码来搞定. 基本想 ...
- OAF_文件系列2_实现OAF导出CSV格式文件ExportButton(案例)
20150727 Created By BaoXinjian
- ABAP->内表数据下载到CSV格式(原创转载请注明)
需求:将alv上面的数据计算到内表中区,然后通过自定义按钮进行下载到csv格式中 附加:现在基本不用csv导出了,但是有些变态需求强行要求,也只好研究出来了,excel与txt导出很简单,那就不多说了 ...
- 将Excel另存为CSV格式文件
直接将Excel另存为CSV,速度很快: $CurrentPath = $MyInvocation.MyCommand.Path.substring(0,$MyInvocation.MyCommand ...
- php生成CSV格式(转)
参考网址: php对csv文件的常用操作集合 http://blog.xhbin.com/archives/748 1,下载CSV格式文档 唯一需要特别注意的是编码. <? include_on ...
- 内容写到 csv 格式的文件中 及 读取 csv 格式的文件内容
<?php/*把内容写到 csv 格式的文件中 基本思路是:1.用 $fp = fopen("filename", 'mode')打开一个csv文件,可以是打开时才建立的2. ...
随机推荐
- mac 搭建node 开发环境记录
安装homebrew: enter 键 后 输入电脑密码 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/i ...
- CentOS python升级到3.5时yum报错
File except KeyboardInterrupt, e: ^ SyntaxError: invalid syntax 解决步骤: #vi /usr/bin/yum 将#!/usr/bin/p ...
- HDU 5795 A Simple Nim(SG打表找规律)
SG打表找规律 HDU 5795 题目连接 #include<iostream> #include<cstdio> #include<cmath> #include ...
- 在iOS9中 xcode7 网络请求 如图片请求不显示等
Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is inse ...
- no method declared with objective-c selector error
down voteaccepted Swift 2.2 / Xcode 7.3 has a new way to use selector:Selector("funcName") ...
- H264中的MapUnits
1 MapUnits 在FMO(Flexible Macroblock ordering)时,从宏块到条带组的映射是以MapUnits为基本单位,MapUnits可能为宏块,也可能是上下两个宏块(见下 ...
- sudo命令出错 must set be suid
特殊权限 4,2 ,1 4 suid,控制用户执行的文件,以文件所属用户的身份执行.当一个可执行的文件拥有suid时,会将文件拥有者的x位变成s(---s--x--x),这时称为set uid,简写 ...
- 转:IIS虚拟目录实现与文件服务器网络驱动器映射共享
这篇文章转载别人,想原创作者致敬! 我本人也遇到同样的问题,故转载记录. 本文重点描述如何使用IIS访问共享资源来架设站点或执行 ASP.Net 等脚本. 通常情况下,拥有多台服务器的朋友在使用IIS ...
- MyBatis-防止Sql注入以及sql中#{}与${}取参数的区别
#{}能够更安全的取出参数 ${}取出的参数不安全 尽量不要使用${}取参数 原因: A:select * from table where a = '10001' and b = ${paramet ...
- echarts样式修改
本人是查看如下链接: http://down.admin5.com/demo/code_pop/cs/dsj/doc/example/themeDesigner.html# 图示很简洁明了.