java批量导出excel格式数据(含每条数据的附件)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
,批量导出数据到excel中(包含每条数据对应的附件)
本程序功能功能说明
采用压缩的方法把用户要导出的excel 文件和excle数据中每条数据对应的文件,打包成一个大文件,输出到缓存区,用户通过浏览器来下载这个文件,缺陷是文件过大时,比如几个G大小的附件,ie下载很慢。建议用360等支持断点续传的功能的浏览器来下载。
Excel查看附件采用的是链接方式
详细如下面截图,点击文件链接,可以链接到相对文件位置的文件夹(因为附件可能是多个,采用的都是文件夹的相对链接的方式实现的),
压缩包内存放的文件结构:
Excel文件,reportfile(存放附件的文件夹,文件夹结构详细见代码)
每行excel 都对应相对的文件夹(reportfile内的某一个子文件夹和excel的行号相对应),如下截图,红色圈圈链接的就是对应的相应文件夹下的appfile文件夹下的文件:
//引入的类
import org.apache.tools.zip.ZipEntry;
//把文件写入到压缩对象out
import org.apache.tools.zip.ZipOutputStream;
import java.io.*;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import ermodel.HSSFCell;
import ermodel.HSSFCellStyle;
import ermodel.HSSFFont;
import ermodel.HSSFRichTextString;
import ermodel.HSSFRow;
import ermodel.HSSFSheet;
import ermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFCellUtil;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.Region;
import ermodel.Font;
import ermodel.HSSFHyperlink;
//写入压缩的文件对象
privatevoid zipfileinfo(ZipOutputStream out, File f, String base) throws Exception
{
//记录文件“f”对象在压缩包中的位置及压缩后的文件名称:
out.putNextEntry(new ZipEntry(base));、
// 写入压缩文件对象
FileInputStream in = new FileInputStream(f);
int b = 0;
byte[] buf = newbyte[1024];
while ((b = in.read(buf)) != -1)
{
out.write(buf, 0, b);
}
in.close();
}
// 开始压缩文件
privatevoid ziptmpfilelist(ZipOutputStream out, String factfielnamelist,
String tmpfielnamelist) throws Exception {
String[] tmpList = tmpfielnamelist.split(";");
String[] fackList = factfielnamelist.split(";");
for (int i = 0; i File tmpfile = new File(fackList[i]); zipfileinfo(out, tmpfile, tmpList[i].replaceAll("\\\\", "/")); } } @Override protectedvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 存放文件的实际位置位置(绝对路径) String factfielnamelist= "D:\\iscm\\attachdata\\2015\\0422\\FuaiFugQArVTjpG;D:\\iscm\\a ttachdata\\2015\\0422\\HIxtANutsZrwDTZ;D:\\iscm\\attachdata\\2 015\\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")); response.reset(); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=test.zip"); // 输出到缓存区方式 ZipOutputStream out = new ZipOutputStream(response.getOutputStream()); // out.setEncoding("gbk"); out.setEncoding("gb2312"); //System.out.println(zipFileName); ziptmpfilelist(out, factfielnamelist, tmpfielnamelist); //输出到excel中 List ExportExcelUtils.exportExcelAppReoort("App报备信息", headers, columns,result, "", out); out.close(); } catch (Exception e) { e.printStackTrace(); } } 创建excel对象并写入压缩包方法 /** * 控制点导出Excel的方法