/**
* 导出Excel功能
* @param sql 获取数据要执行的SQL语句
* @param params SQL语句的参数
* @param column Excel表头,如果有扩展属性的话,可定义为:户号,户名,营业区域$ALL_BS_INFO
* @param excelRowsLimit 没个Excel单元格的条数
* @param httpServletRequest
* @return 改Excel的下载地址
* @throws Exception
*/
public String expExcel(String sql, List params, String[] column,
int excelRowsLimit, HttpServletRequest httpServletRequest)
throws Exception {
DBTool dbTool = null;
String downloadUrl = "";
Record[] rds = null;
Record record = null;
ZipOutputStream out = null;
try {
dbTool = new DBTool();
rds = dbTool.executeQuery(sql, params);
// System.out.println("L: "+rds.length);
int genExcelRowsLimit = excelRowsLimit <= 0 ? ServiceLocator.getInstance().getWebAppConfig().getGenExcelRowsLimit(): excelRowsLimit;
String path = ServiceLocator.getInstance().getWebAppConfig().getExcelTempDirectory();
String zipPath = httpServletRequest.getSession().getId()+ System.currentTimeMillis() + ".zip";
downloadUrl = "http://" + httpServletRequest.getServerName() + ":"+ httpServletRequest.getServerPort()
+ httpServletRequest.getContextPath()+ "/GetTempFileServlet?fileName=" + zipPath;
if (path == null) {
path = httpServletRequest.getSession().getServletContext().getRealPath("download");
downloadUrl = "http://" + httpServletRequest.getServerName()
+ ":" + httpServletRequest.getServerPort()+ httpServletRequest.getContextPath() + "/download"
+ "/" + zipPath;
}
// System.out.println(path+System.getProperty("file.separator")+zipPath);
File file = new File(path+System.getProperty("file.separator")+zipPath);
if(!file.exists()){
file.createNewFile();
}
out = new ZipOutputStream(new FileOutputStream(file));
DropBeanMap dbm = DropBeanMap.getInstance();
int fileCount = rds.length % genExcelRowsLimit == 0 ? rds.length/genExcelRowsLimit : rds.length / genExcelRowsLimit + 1;
// System.out.println("fileCount "+fileCount);
for (int i = 0; i < fileCount; i++) {
int temp = i * genExcelRowsLimit;
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet hs = wb.createSheet();
HSSFCellStyle style = wb.createCellStyle();
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
HSSFFont font = wb.createFont();
font.setFontHeightInPoints((short) 11);
style.setFont(font);
HSSFCellStyle style1 = wb.createCellStyle();
style1.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style1.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style1.setBorderRight(HSSFCellStyle.BORDER_THIN);
style1.setBorderTop(HSSFCellStyle.BORDER_THIN);
style1.setFillForegroundColor(HSSFColor.ORANGE.index);
style1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
HSSFFont font1 = wb.createFont();
font1.setFontHeightInPoints((short) 15);
font1.setBoldweight((short) 700);
style1.setFont(font);
HSSFCellStyle style2 = wb.createCellStyle();
style2.setWrapText(true); // 设置自动换行
HSSFRow hr = hs.createRow(0);
for (int j = 0; j < column.length; j++) {
// 设置表头
String value = "";
if (column[j].indexOf("$") < 0) {
value = column[j];
} else {
value = column[j].substring(0, column[j].indexOf("$"));
}
int len = value.length();
hs.setColumnWidth((short) j, (short) (len * 1600));
HSSFCell hc = hr.createCell((short) j);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
hc.setCellStyle(style1);
hc.setCellValue(value);
}
int eachCount = genExcelRowsLimit;
if(i==(fileCount-1) && rds.length % genExcelRowsLimit != 0 ){
eachCount = rds.length % genExcelRowsLimit-1;
}
// System.out.println("i: "+i+" eachCount: "+eachCount);
for (int j = 0; j < eachCount; j++) {
hr = hs.createRow(j + 1);
// System.out.println("temp + j: "+(temp + j));
record = rds[temp + j];
for (int r = 0; r < column.length; r++) {
String dropName = "";
String value = record.getString(r + 1) == null ? "": record.getString(r + 1).toString();
value = value.replaceAll(";alt", "'");
if (column[r].indexOf("$") >= 0) {
dropName = column[r].substring(column[r].indexOf("$") + 1, column[r].length());
value = dbm.getDropLabel(dropName, value);
}
hr.setHeight((short) 500);
HSSFCell hc = hr.createCell((short) r);
hc.setCellStyle(style);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
hc.setCellValue(value);
hc.setCellStyle(style2);
}
}
out.putNextEntry(new ZipEntry(i+".xls"));
wb.write(out);
}
out.close();
} catch (Exception e) {
e.printStackTrace();
throw new highsoft.framework.exceptions.BaseRunException(
"导出excel出错!", e);
} finally {
if (dbTool != null) {
dbTool.closeConnection();
dbTool = null;
}
if(null != out){
try{
out.flush();
out.close();
out = null;
}
catch(IOException e){};
}
}
return downloadUrl;
}
/**
* 遍历目录并添加文件.
* @param jos - JAR 输出流
* @param file - 目录文件名
* @param pathName - ZIP中的目录名
* @throws IOException
* @throws FileNotFoundException
*/
private static void recurseFiles(ZipOutputStream jos, File file,
String pathName) throws IOException, FileNotFoundException {
byte buf[] = new byte[1024];
if (file.isDirectory()) {
pathName = pathName + file.getName() + "/";
jos.putNextEntry(new ZipEntry(pathName));
String fileNames[] = file.list();
if (fileNames != null) {
for (int i = 0; i < fileNames.length; i++)
recurseFiles(jos, new File(file, fileNames[i]), pathName);
}
} else {
ZipEntry jarEntry = new ZipEntry(pathName + file.getName());
// System.out.println(pathName + " " + file.getName());
FileInputStream fin = new FileInputStream(file);
BufferedInputStream in = new BufferedInputStream(fin);
jos.putNextEntry(jarEntry);
int len;
while ((len = in.read(buf)) >= 0)
jos.write(buf, 0, len);
in.close();
jos.closeEntry();
}
}
/**
* 创建 ZIP/JAR 文件.
*
* @param directory -
* 要添加的目录
* @param zipFile -
* 保存的 ZIP 文件名
* @param zipFolderName -
* ZIP 中的路径名
* @param level -
* 压缩级别(0~9)
* @throws IOException
* @throws FileNotFoundException
*/
public static void makeDirectoryToZip(File directory, File zipFile,
String zipFolderName, int level) throws IOException,
FileNotFoundException {
level = (level < 0 || level > 9)? 7 : level;
if (zipFolderName == null) {
zipFolderName = "";
}
ZipOutputStream jos = new ZipOutputStream(new FileOutputStream(zipFile));
jos.setLevel(level);
String fileNames[] = directory.list();
if (fileNames != null) {
for (int i = 0; i < fileNames.length; i++)
recurseFiles(jos, new File(directory, fileNames[i]),zipFolderName);
}
jos.close();
}
分享到:
相关推荐
使用POI导出Excel文件** 导出Excel文件主要涉及以下几个步骤: - **创建Workbook对象**:这是Excel文件的容器,可以使用`XSSFWorkbook`(针对.xlsx)或`HSSFWorkbook`(针对.xls)创建。 - **创建Sheet对象**:...
5. **文件打包成ZIP**: Java内置的java.util.zip包提供了ZipOutputStream类,可以用来创建ZIP文件。将生成的多个Excel文件添加到ZipOutputStream,最后生成一个ZIP文件。这样用户只需下载一个ZIP文件,解压后即可...
将这两个目录一起打包成zip文件,即得到"使用POI实现表格导出jar包.zip"。 使用这个jar包时,只需通过Java的`java -jar`命令执行,即可在指定位置生成Excel文件。需要注意的是,由于jar文件包含所有依赖,所以它的...
综上所述,"生成excel并打包成zip文件"这个任务涉及到使用Java编程语言,特别是Apache POI库来生成Excel文件,再结合Java标准库的压缩功能将Excel和文本文件打包成ZIP。整个过程涉及到了文件的创建、写入、压缩和...
本资料"Java_批量导出大数据量Excel方法.zip"包含两个关键文件:excelproj和ExpXLS,它们可能是项目的源代码或示例,用于演示如何实现这个功能。 1. **Apache POI库**: Apache POI是Java中广泛使用的库,用于读写...
- **Apache POI**:Apache POI 是一个流行的开源库,它允许Java程序员读取、写入和修改Microsoft Office格式的文件,包括Excel。使用HSSF(Horrible Spreadsheet Format)处理.xls格式,XSSF处理.xlsx格式。 - **...
本篇内容将深入探讨如何使用Apache POI进行Excel的读取操作以及如何自动导出和打包数据。 1. **Apache POI简介** Apache POI 是一个开源项目,它提供了Java API来处理Microsoft Office格式的文件。主要关注于HSSF...
Zip则是一种文件压缩格式,它能够将多个文件打包并压缩,便于存储和传输。在这个场景中,我们讨论的是如何在Excel与zip之间进行数据交互。 首先,`Excel导入导出`涉及到的数据操作是Excel文件中的数据与其他系统或...
在IT行业中,尤其是在Java开发领域,经常会遇到需要处理文件压缩和导出...以上就是关于Java实现Excel压缩成Zip导出的相关知识点,这些技术广泛应用于文件管理和数据导出场景,对于提升软件的易用性和效率具有重要意义。
1. 使用POI导出Word: 在简单的文档生成场景中,如仅需填充固定模板的数据,你可以直接使用POI操作.docx文件。首先,创建一个.docx模板文件,然后通过POI读取该文件,替换其中的占位符为实际数据。这种方式适用于...
java动态导出excel压缩成zip下载的方法主要通过使用java中的IO流和ZipOutputStream来实现excel文件的压缩和下载。首先,创建一个文件夹用于存储excel文件,然后使用jxl库创建excel文件,并将其写入到文件夹中。接着...
标题中的“poi导出大数据,先生成多个excel在生成一个jar包”涉及到的是使用Apache POI库处理大数据量Excel导出,并将结果整合到一个Java Archive (JAR) 文件中的技术。Apache POI是一个流行的开源库,允许程序员...
这个压缩包“Java通过word编辑为xml和ftl格式的模板创建导出word文档 .zip”提供了一个示例项目,用于演示如何使用Java编程语言来操作Word文档,并将其内容转化为XML和FTL(FreeMarker)模板格式。以下将详细介绍这...
本篇文章将深入探讨如何使用Java和POI库来实现各种复杂的Excel导出功能。 1. **实现Excel简单导出** 在Java中,使用POI库可以轻松创建基本的Excel文件。首先,我们需要创建一个`HSSFWorkbook`对象作为工作簿,然后...
- **ZIP压缩**:使用Java的`java.util.zip`包,可以将生成的多个Excel文件打包成ZIP,方便用户下载和管理。 7. **发送邮件**: - **JavaMail API**:用于发送邮件,可以将打包后的文件作为附件发送给指定收件人。...
在Java编程中,导出Excel文件是一项常见的任务,特别是在数据处理和报表生成的场景中。以下将详细讲解如何使用Java来生成Excel文件,并提供相关的知识点。 1. **Apache POI库**:Apache POI是Java社区开发的一个...
【标题】"ssm.zip=ssm+maven导出表格数据" 涉及到的主要技术是Spring、Struts和MyBatis(SSM)框架的整合,以及使用Maven进行项目管理和构建,同时提到了数据导出的功能,通常这意味着将数据库中的数据转化为Excel或...
"jar"标签表明这个压缩包内包含的是Java Archive(JAR)文件,它是Java平台中用于打包多个类文件和其他资源的标准格式。Apache POI的JAR文件允许Java开发者在程序中直接操作和创建OOXML文档,而无需依赖Microsoft ...
4. **压缩文件**:将上述生成的XML文件和其他必要的XML文件(如`rels`、`sharedStrings.xml`等)打包成ZIP文件,并命名为`.xlsx`。 5. **文件写入**:将生成的ZIP文件写入磁盘,用户即可下载或使用。 使用这种方法...
在"TestPOI"这个压缩子文件中,可能包含了一个或者多个示例文件,用于演示如何使用这个工具类进行批量导入导出和压缩操作。这些示例文件可能包括输入的Excel文件、预期的输出Excel文件以及生成的压缩文件。开发者...