关于POI下载Excel文件
前台代码:
第一种:用ajax的方式发送请求,在浏览器如chrome中不出现任何问题,在360或qq浏览器下载的时候,
有一个新建下载任务的弹框,点弹框中的下载或直接打开按钮,会向服务器发送第二次请求,
并且第二次请求中的参数都是null
//下载
function ajaxFileDown() {
var url2="xinziController/exportExcel.do"
var url="xinziController/exportExcelOneA.do"
DownLoad(url, { type: "excel", columns: columns,GZ:GZ,menuId:menuId,charPeriod:charPeriod }, function () {
//alert("导出成功");
});
}
function DownLoad(url, fields, callback) {
//创建Form
var submitfrm = document.createElement("form");
submitfrm.action = url;
submitfrm.method = "post";
submitfrm.target = "_blank";
document.body.appendChild(submitfrm);
if (fields) {
for (var p in fields) {
var input = mini.append(submitfrm, "<input type='hidden' name='" + p + "'>");
var v = fields[p];
if (typeof v != "string") v = mini.encode(v);
input.value = v;
}
}
submitfrm.submit();
setTimeout(function () {
submitfrm.parentNode.removeChild(submitfrm);
if (callback) callback();
}, 1000);
}
第二种:用form表单的方式发送请求,在浏览器如chrome中不出现任何问题,在360或qq浏览器下载的时候,
有一个新建下载任务的弹框,点弹框中的下载或直接打开按钮,会向服务器发送第二次请求,
并且第二次请求中的参数值跟第一次的一样
<form id="empForm" action="xinziController/importExcel<%=type %>.do" method="post" enctype="multipart/form-data">
<input type="file" id="excelPath" name="excelPath" style="width:30%;"/>
<a id="id_dra" class="mini-button" iconCls="icon-upload" οnclick="importE()" plain="true" >导入</a>
<a id="id_dr" class="mini-button" iconCls="icon-download" href="xinziController/exportExcelOne<%=type %>.do" plain="true">下载模板</a>
</form>
后台关键代码:
在//************ 设置单元格内容及格式开始******************和//************ 设置单元格内容及格式开始******************
之间的内容时给表格单元格中增加内容和格式,注释后,不管哪个浏览器都不会出现第二次提交请求,加上后,
在360和qq这种有下载弹框的浏览器中就会发送第二次请求,不知道这是什么问题?
/**
* @param title 表题
* @param headers 表头
* @param dataset 数据
* @param out 输出流
* @param keys HashMap�е�keyֵ
* @param mergedCol 合并列
* @param mergedL
*/
public void exportExcelList(String title, String[] headers,
List<HashMap<Object,Object>> dataset, OutputStream out,String[] keys, int[] mergedCol, int[] mergedL) {
boolean isSH=false;
if(title.startsWith("薪资审核表 ")||title.contains("审核")){
isSH=true;
}
// 创建一个工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFDataFormat format = workbook.createDataFormat();//����һ��format
//字体
HSSFFont titleFont = workbook.createFont();
titleFont.setFontName("楷体");
titleFont.setColor(HSSFColor.BLUE.index);
HSSFCellStyle titleStyle = createStyleTitle(workbook, titleFont);
titleStyle.setDataFormat(format.getFormat("@"));
//titleStyle.setLocked(true);//锁定单元格
//titleStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
//表头格式
HSSFFont headerFont = workbook.createFont();
HSSFCellStyle headerStyle = createStyleHeader(workbook, headerFont);
headerStyle.setDataFormat(format.getFormat("@"));
//表体文本数据格式
HSSFFont bodyFont = workbook.createFont();
HSSFCellStyle bodyStyle = createStyleHeader(workbook, bodyFont);
bodyStyle.setDataFormat(format.getFormat("@"));
bodyStyle.setBorderBottom(CellStyle.BORDER_THIN);
bodyStyle.setBorderLeft(CellStyle.BORDER_THIN);
//表体薪资数据格式
HSSFFont normalFont = workbook.createFont();
HSSFCellStyle normalStyle = createStyle(workbook, normalFont);
normalStyle.setDataFormat(format.getFormat("#,#0.00"));
normalStyle.setWrapText(false);
//normalStyle.setLocked(false);//不锁定单元格
HSSFFont longFont = workbook.createFont();
HSSFCellStyle cellLongStyle = createStyle(workbook, longFont);
cellLongStyle.setDataFormat(format.getFormat("0"));
cellLongStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);
// 创建sheet 名字title
HSSFSheet sheet = workbook.createSheet(title);
//sheet.protectSheet(new String("333"));//333是密码
//创建第一行
HSSFRow row = sheet.createRow(0);
row.setHeightInPoints(24);
sheet.addMergedRegion(new CellRangeAddress(0,0,0,((headers.length -1)/2)));
HSSFCell cell0 = null;
cell0 = row.createCell(0);// 增加单元格
cell0.setCellStyle(titleStyle);
cell0.setCellValue(title);
row.createCell(((headers.length -1)/2)).setCellStyle(titleStyle);//
//创建第二行
row = sheet.createRow(1);
for (int i = 0; i < (headers.length/2); ++i) {
sheet.setColumnWidth(i, 100*35);
HSSFCell cell = row.createCell(i);
cell.setCellStyle(headerStyle);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
//创建第三行
row = sheet.createRow(2);
for (int i = 0; i < headers.length/2; ++i) {
sheet.setColumnWidth(i, 100*35);
HSSFCell cell = row.createCell(i);
cell.setCellStyle(headerStyle);
HSSFRichTextString text = new HSSFRichTextString(headers[i+headers.length/2]);
cell.setCellValue(text);
}
boolean b_merge = false;
if((null!=mergedL) && (mergedL.length>0) && (null!=mergedCol) && (mergedCol.length>0)){
b_merge = true;
}
Iterator<HashMap<Object,Object>> it = dataset.iterator();
int index = 2;//表格数据的其实行号
int mCount = 2;
int marrIndex = 0;
String tempCellVal = "";
while (it.hasNext()) {
++index;
if(b_merge){
if(index == mCount){//�ϲ���Ԫ��
if(mergedL[marrIndex]>1){//��Ҫ��ϲ��ĵ�Ԫ����кϲ�
for(int i=0; i<mergedCol.length; ++i){//���κϲ����еĶ��� �����кϲ���
//new Region(��ʼ�У���ʼ�У������У�������)
sheet.addMergedRegion(new CellRangeAddress(mCount, mergedCol[i], mCount+mergedL[marrIndex]-1, mergedCol[i]));
}
mCount += mergedL[marrIndex];
}else{
++mCount;
}
++marrIndex;
}
}
row = sheet.createRow(index);//设置行号
HashMap<Object,Object> t = (HashMap<Object,Object>) it.next();//it代表所有列的列名
//************ 设置单元格内容及格式开始******************
for(int i = 0;i<keys.length;i++){
HSSFCell cell = row.createCell(i);//设定列号
try {
if(t.get(keys[i]).equals(null)||t.get(keys[i])==null){
tempCellVal = "";
}else{
tempCellVal = t.get(keys[i]).toString();
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("空指针。。。。。。。。。。。。。");
}
if(isSH){
if (i<2) {//如果有汉字 或 以0 开头的也是文本
cell.setCellValue(tempCellVal);
cell.setCellStyle(bodyStyle);
}else{
cell.setCellValue(Double.valueOf(tempCellVal));//其余的都转换成浮点型
cell.setCellStyle(normalStyle);
}
}else{
if (i<4) {//如果有汉字 或 以0 开头的也是文本
cell.setCellValue(tempCellVal);
cell.setCellStyle(bodyStyle);
}else{
cell.setCellValue(Double.valueOf(tempCellVal));//其余的都转换成浮点型
cell.setCellStyle(normalStyle);
}
}
}
//************ 设置单元格内容及格式结束******************
if(index > 60000){
break;
}
}
if(dataset.size()>0){
//设置最后合计行
row=sheet.createRow(index+1);
StringBuffer sixBuf=new StringBuffer();
for (int i = 0; i < keys.length; i++) {
HSSFCell cell=row.createCell(i);
if(isSH){
if(i==0){
cell.setCellValue("合计:");
sheet.addMergedRegion(new CellRangeAddress(index+1, index+1, 0, 1));
}
if(i<2){
HSSFFont font = workbook.createFont();
cell.setCellStyle(createStyleHJ(workbook, font));
}
if(i>=2){
String chars=getExcelColumn(i+1);
sixBuf.append("SUM("+chars+"4:"+chars+""+(index+1)+")");
cell.setCellFormula(sixBuf.toString());
cell.setCellStyle(normalStyle);
sixBuf.setLength(0);
}
}else{
if(i==0){
cell.setCellValue("合计:");
sheet.addMergedRegion(new CellRangeAddress(index+1, index+1, 0, 3));
}
if(i<4){
HSSFFont font = workbook.createFont();
cell.setCellStyle(createStyleHJ(workbook, font));
}
if(i>=4){
String chars=getExcelColumn(i+1);
sixBuf.append("SUM("+chars+"4:"+chars+""+(index+1)+")");
cell.setCellFormula(sixBuf.toString());
cell.setCellStyle(normalStyle);
sixBuf.setLength(0);
}
}
}
//�Զ�����Ԫ����
for(int i=0; i<headers.length; ++i){
//sheet.autoSizeColumn(i, true);//适合合并单元格
sheet.autoSizeColumn(i);
sheet.setColumnWidth(i, sheet.getColumnWidth(i)+500);
}
}
//导出Excel
try {
workbook.write(out);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
关于POI下载Excel文件相关推荐
- Aspose-Cells结合Apache POI生成excel文件以及转换为pdf
最近有个需求是需要将数据库中的符合条件的交易流水导出生成为excel,并转换为pdf,提供给客户下载,客户下载核对并签章. 需要用到的jar包依赖: <dependency><gro ...
- Apache POI操作Excel文件
Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用PO ...
- 使用poi读写excel文件
使用poi读写excel文件 Posted on 2011 年 03 月 16 日 by 苍之涛 今天一个同学需要处理一个excel文件,于是我便在网上搜了一下方法,顺便自己研究一下.刚刚参考网上资料 ...
- 项目总结23:POI生成Excel文件并浏览器导出
项目总结23:POI生成Excel文件并浏览器导出 具体的逻辑可以参考Controller层的注释 代码1-前端html <button onclick="downLoad()&quo ...
- 阿里开源(EasyExcel):使用Java将数据导出为Excel表格、带样式----》java web下载 Excel文件
目录 一.技术选型 二.实现过程 1.导入依赖 2.编写工具类 EasyExcelUtil 3.公用参数类 EasyExcelParams 4.表格样式实体类 MyWriteHandler 5.数据实 ...
- 解决poi导出Excel文件打开警告(一)
项目中需要导出Excel报表,使用poi导出Excel文件,添加依赖 <dependency><groupId>org.apache.poi</groupId>&l ...
- springboot中使用poi导出excel文件(亲测实现了第一个功能)
1.POI简介 Jakarta POI 是一套用于访问微软格式文档的Java API. 组件HWPF用于操作Word的; 组件HSSF用于操作Excel格式文件. 2.常用组件 HSSFWorkboo ...
- php通过ajax下载文件,PHP使用ajax的post方式下载excel文件简单示例
本文实例讲述了PHP使用ajax的post方式下载excel文件.分享给大家供大家参考,具体如下: 项目需求,前端发起ajax请求,后端生成excel并下载,同时需要在header头中,带上token ...
- react接收后端文件_React获取Java后台文件流并下载Excel文件流程解析
记录使用blob对象接收java后台文件流并下载为xlsx格式的详细过程,关键部分代码如下. 首先在java后台中设置response中的参数: public void exportExcel(Htt ...
最新文章
- node-mongoDB
- iOS --高仿QQ空间页面
- boost::mpl模块实现set_c相关的测试程序
- Python3 实现建造者模式
- @builder注解_SpringBoot 整合SpringSecurity示例实现前后分离权限注解+JWT登录认证
- 软件设计师 - 函数依赖 和 范式
- 流量管理系统产品选型常见问答(FAQ)
- typescript 判断异步执行已经结束_vue进阶系列——用typescript玩转vue和vuex
- [必看]首先要求做到的事情![sumtec]
- linux认识第一面
- C#坦克大战流程设计与源代码(1):基本对象类规划
- 有关《家》的经典歌曲_著名音乐人-二十首最棒的励志歌曲推荐
- R语言中dim函数_R 语言中的矩阵计算
- commons-lang3官方教程
- #微信公众号互联登录-01#
- 如何定义线程数线程数
- linux 内核函数 filp_open、filp_read、IS_ERR、ERR_PTR、PTR_ERR 简介
- Ubuntu扩展系统根目录磁盘空间
- win10管理员名称更改方法
- html--P11-P20