,批量导出数据到excel中(包含每条数据对应的附件)
本程序功能功能说明
采用压缩的方法把用户要导出的excel 文件和excle数据中每条数据对应的文件,打包成一个大文件,输出到缓存区,用户通过浏览器来下载这个文件,缺陷是文件过大时,比如几个G大小的附件,ie下载很慢。建议用360等支持断点续传的功能的浏览器来下载。
Excel查看附件采用的是链接方式
详细如下面截图,点击文件链接,可以链接到相对文件位置的文件夹(因为附件可能是多个,采用的都是文件夹的相对链接的方式实现的),
压缩包内存放的文件结构:
Excel文件,reportfile(存放附件的文件夹,文件夹结构详细见代码)
每行excel 都对应相对的文件夹(reportfile内的某一个子文件夹和excel的行号相对应),如下截图,红圈圈链接的就是对应的相应文件夹下的appfile文件夹下的文件:
//引入的类
import ls.zip.ZipEntry;
//把文件写入到压缩对象out
import ls.zip.ZipOutputStream;
import java.io.*;
importjava.io.OutputStream;
importjava.util.ArrayList;
importjava.util.LinkedHashMap;
importjava.util.List;
importorg.apache.poi.hssf.usermodel.HSSFCell;
importorg.apache.poi.hssf.usermodel.HSSFCellStyle;
importorg.apache.poi.hssf.usermodel.HSSFFont;
importorg.apache.poi.hssf.usermodel.HSSFRichTextString;
importorg.apache.poi.hssf.usermodel.HSSFRow;
importorg.apache.poi.hssf.usermodel.HSSFSheet;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.hssf.util.HSSFCellUtil;
importorg.apache.poi.hssf.util.HSSFColor;
importorg.apache.poi.hssf.util.Region;
importorg.apache.poi.ss.usermodel.Font;
importorg.apache.poi.hssf.usermodel.HSSFHyperlink;
//写入压缩的文件对象
privatevoidzipfileinfo(ZipOutputStream out, File f, String base)
throws Exception
{
//记录文件“f”对象在压缩包中的位置及压缩后的文件名称:
out.putNextEntry(newZipEntry(base));、
// 写入压缩文件对象
FileInputStream in = newFileInputStream(f);
int b = 0;
byte[] buf = newbyte[1024];
while ((b = in.read(buf)) != -1)
{
out.write(buf, 0, b);
}
in.close();
}
// replaceall()开始压缩文件
privatevoidziptmpfilelist(ZipOutputStream out, String factfielnamelist,
String tmpfielnamelist) throws Exception {
String[] tmpList = tmpfielnamelist.split(";");
String[] fackList = factfielnamelist.split(";");
for (inti = 0; i<tmpList.length; i++) {
File tmpfile = new File(fackList[i]);
zipfileinfo(out, tmpfile, tmpList[i].replaceAll("\\\\", "/"));
}
}
@Override
protectedvoiddoGet(HttpServletRequest request,
HttpServletResponse response) throwsServletException, IOException {
// 存放文件的实际位置位置(绝对路径)
String factfielnamelist=
"D:\\iscm\\attachdata\\2015\\0422\\FuaiFugQArVTjpG;D:\\iscm\\attachdata\\2015\\0422\\HIxtANutsZrwDTZ;D:\\iscm\\attachdata\\2015\\0422\\HIxtANutsZrwDTZ";
// 存放文件的位置(绝对路径)压缩时对应文件在压缩文件中的位置及名称
String tmpfielnamelist = "reportfile\\tmp1\\appfile\\项目审批2.ipa;reportfile\\tmp1\\appfile\\项目审批1.doc;reportfile\\tmp1\\selffile\\app.docx";
try {
// 存放临时文件的目录(绝对路径)ZipOutputStream out = new ZipOutputStream(new FileOutputStream("d:\\test.zip"));
set();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=test.zip");
// 输出到缓存区方式
ZipOutputStream out = new OutputStream());
// out.setEncoding("gbk");
out.setEncoding("gb2312");
//System.out.println(zipFileName);
ziptmpfilelist(out, factfielnamelist, tmpfielnamelist);
//输出到excel中 List<LinkedHashMap<String, Object>> result 是excel写入的数据集合,这个需要自己重新定义.
portExcelAppReoort("App报备信息", headers, columns,result, "", out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
创建excel对象并写入压缩包方法
/**
* 控制点导出Excel的方法
* @param title excel中的sheet名称
* @param headers 表头
* @param columns 表头对应的数据库中的列名
* @param result 结果集
* @param out 输出流
* @param pattern 时间格式
* @throws Exception
*/
publicstaticvoidexportExcelAppReoort(String title, String[] headers, String[] columns, List<LinkedHashMap<String, Object>> result, String filepath, ZipOutputStream out) throws Exception{
//java.io.FileOutputStream out=new java.io.FileOutputStream(filepath);
// 声明一个工作薄
HSSFWorkbook workbook = newHSSFWorkbook();
// 生成一个表格
HSSFSheet sheet = ateSheet(title);
// 设置表格默认列宽度为20个字节
sheet.setDefaultColumnWidth(20);
// 生成一个样式
HSSFCellStyle style = ateCellStyle();
// 设置这些样式
style.setFillForegroundColor(HSSFColor.GOLD.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 生成一个字体
HSSFFont font = ateFont();
font.setColor(HSSFColor.VIOLET.index);
//font.setFontHeightInPoints((short) 12);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论