文档章节

jxl 、 apache.poi.hssf 实现本地, 服务器断的下载

QH_C
 QH_C
发布于 2015/03/01 23:10
字数 992
阅读 24
收藏 0
jxl 实现下载:

package com.inspur;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
/*  jxl 实现下载  */
/**
 *@author  WHD
 *2014-11-15
 */
public class JxlOut {
public static void main(String[]args) throws IOException, RowsExceededException, WriteException{
File file= new File("I:/TESTfxl.xls");
//如果不是从服务器下载到本地则输出流不用File方式而使用resonance.getOutPutStream()方式获取输出流就ok了 
//使用 OutputStream output=response.getOutputStream()来代替,
//FileOutPutStream这样我们就不用提前来写路径,也就是可以直接下载到客户端选择的路径下
FileOutputStream  output= new FileOutputStream(file);
WritableWorkbook wwb = Workbook.createWorkbook(output);//创建工作簿
WritableSheet ws = wwb.createSheet("Sheet1", 0);//创建工作sheet页        
// 将具体数据添加到具体页面,而这里的赋值可以使用循环将数据库中
//取出的数据 全都添加到sheet中 如果数据多的话还可以使用多个sheet
// sheet 就是 excel中的一页
Label labelC = new Label(0, 0, "jxltest");
ws.addCell(labelC);
// 写出到指定的流中
wwb.write();
// 关闭物理资源
wwb.close();
output.flush();
output.close();
}
}
/* apache.poi.hssf HSSFWorkBook 实现下载  */
/**
 * excel 模板下载  实际项目中使用到的下载
 */
 
@RequestMapping(value = "downExcelTemplate")
public void downExcelTemplate(HttpServletResponse response) {
// 获取元数据id 在获取数据个数形成excel 模板
String meta_id = this.getPara("meta_id");
// 获取对应数据源对应的表的字段属性
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
// 这里获取的也就是item_def中 def_id=meta_id的name_cn,形成excel模板
list = datamanagerService.findItemById(meta_id);
// Map<String,Object> datas=new HashMap<String,Object>();
int i = 0;
// 将list中的值进行导出
try {
// 创建一个Excel文件
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建一页
HSSFSheet sheet = workbook.createSheet();
// 创建一行
HSSFRow row = sheet.createRow(0);
// 创建一列
HSSFCell cell = null;
// 遍历向excel中赋值
for (Map<String, Object> data : list) {
cell = row.createCell(i);
cell.setCellValue((String) data.get("name_cn"));
++i;
}
 
// 生成excel
// 在从服务器的目录下进行下载
// 下载文件名
String fileName = "ExcelTemplate.xls";
response.reset();
response.setContentType("application/x-download");
response.addHeader("Content-Disposition", "attachment;filename="
+ fileName);
// 这样写在下载的时候会让你选择路劲,而如果使用
// OutputStream os= new FileOutputStream("G:"+File.separator+"test.java");
// 来代替os则就是本地下载
OutputStream os = response.getOutputStream();
workbook.write(os);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}

上面的两个都是将数据库中的数据组装成excel 的格式,并进行下载,怎么让他下载,或者说用何种方式来请求下载资源,方式有如下两种。

1、使用ajax异步请求将数据使用 response 的OutputStream来将数据输出到本地。

2、使用同步方式,有两种一种是使用form的button 来提交请求参数,另一种是使用window.location.href="Test?name=123&password=6789";这种方式来请求,两种方式都可以。

注意: 这里说一下使用“2” 中的同步方式是不会刷新现有页面的,因为他没有向该页面返回数据而是下载到了本地磁盘,所以现有页面不会被刷新。

上面我们看了两大种方式来实现,其实ajax方式是不能实现的,那是因为response原因,一般请求浏览器是会处理服务器输出的 response,例如生成png,文件下载等,ajax请求只是个“字符性”的请求,可以读取到返回的response,但只是读取而已,是无法执行的,说白点就是js无法调用到浏览器的下载处理机制和程序

这样看来只有第二种方式能直接实现下载了,但是第二种方式中使用哪一种那,建议使用form 的submit提交方式来实现,这样的话我们提交的参数是安全的而使用window.location.href="test?name=name&password=123" 这样的话参数直接暴露了所以建议使用form 的submit() 方式来实现。

下面来看看"2" 中的两种方式,写个小demo 如下:

1、form的submit() 方式实现:

function _excel(){

var mfrm=document.frm;

mfrm.action="Test";

mfrm.submit();

return true;

};

2、使用window.location.href=""方式实现:

function excel_(){

window.location.href="Test?name=123&password=6789";

}

 

© 著作权归作者所有

共有 人打赏支持
QH_C
粉丝 1
博文 75
码字总数 69153
作品 0
朝阳
程序员
JXL导入导出EXCEL

web项目中实现客户端导出Excel文件并下载 JXL下载地址:http://www.andykhan.com/jexcelapi/download.html 下载后,将JXL的包引入到web项目中,在项目中,可以写一个公共的类做为专门导出Exc...

长平狐
2012/10/25
641
0
使用java读取Excel表格中的数据 ,解决方案搜集

Java EXCEL API简介 Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应...

不最醉不龟归
2016/11/01
30
0
java处理excel的一点实践积累

java处理excel的一点实践积累 作者:佟亮 日期:2008-11-06 1 文档说明 目的:编写本文档主要的目的是与大家分享下如何用java处理excel,文档中的代码一部分来自《企业项目管理系统V2.0》的源...

tongliang4444
2016/08/11
0
0
基于Spring Mvc实现的Excel文件上传下载

最近工作遇到一个需求,需要下载excel模板,编辑后上传解析存储到数据库。因此为了更好的理解公司框架,我就自己先用spring mvc实现了一个样例。 基础框架 之前曾经介绍过一个最简单的sprin...

青夜之衫
2017/12/05
0
0
用java读/写带公式的excel的问题

有一个公式逻辑很复杂的excel,现在想在页面上做成自动的,就是从页面上得到的一些值通过poi或者jxl给写进excel里,然后通过那些公式的计算,再从excel里把结果取出来,避免以前那样要自己手...

迪波威
2011/06/01
5.3K
6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

C++ gflags

gflags是google一个开源的处理命令行参数的库,相比getopt,更加容易使用。 定义参数 gflags主要支持的参数类型包括 DEFINEbool: boolean DEFINEint32: 32-bit integer DEFINEint64: 64-bit ...

SibylY
25分钟前
0
0
intellij IDEA Properties中文unicode转码问题

在IDEA中创建了properties文件,发现默认中文不会自动进行unicode转码。如下 在project settings - File Encoding,在标红的选项上打上勾,确定即可 效果图如下: unicode转码后效果...

muzi1994
26分钟前
0
0
Java IO类库之PipedWriter

一、PipedWriter介绍 PipedWriter是字符管道输出流,继承自Writer,功能与PipedOutputStream类似,通过与PipedReader组合使用实现类似管道的功能,在多线程环境下,一个线程使用PipedWriter...

老韭菜
30分钟前
0
0
精简分页组件(手写)

需要引入CSS(没错就是这4行) .pagelist { text-align: center; color: #666; width: 100%; clear: both; margin: 20px 0; padding-top: 20px }.pagelist a { color: #666; margin: 0 2px;......

AK灬
31分钟前
3
0
29 岁成为阿里巴巴 P8,工作前 5 年完成晋升 3 连跳,他如何做到?

泡泡是我的好朋友。今年 31 岁,毕业后就进了阿里巴巴,工作五年内从 P4 晋升至 P6、P7、P8。 和他很少聊到工作,但总觉得他有很棒的职场心得,应该分享出来,于是有了这次采访。希望对职场新...

Java填坑之路
33分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部