Java Export File (从页面导出Excel文件)

<textarea style="width:1200px;height:700px; font-size:15px;background-color:#fff4c1;">
package com.cssp.myTest;


import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.ui.Model;
import com.hdlh.framework.utils.DateUtils;


import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;


/**
 * 此处文件上传下载Demo所用为jxl方式
 * @author admin
 *
 */
public class FileUtils {
/**
* 下载Excel文件(最下方有方法调用Demo)
* @param os 输出流
* @param sheetName 要创建的Excel中的单元表名称
* @param titles 要创建的Excel中的单元表名称的标题
* @param list 要保存在单元表中的数据集合对象,其中每一值又是一个List或Object[]对象或 Map对象,表示一行的记录
*/
@SuppressWarnings("all")//当方法编写完且没有报错的情况后,但方法有一些黄色的警告提示,可以添加这个注解去掉警告,处女座必备
public static void createExcel(OutputStream os,String sheetName,String[] titles,List list){
WritableWorkbook wwb = null;
try {
wwb = Workbook.createWorkbook(os);//创建一个工作薄对象
WritableSheet ws = wwb.createSheet(sheetName, 0);//创建工作表:参数1表示工作表的名称;参数2表示是第一个工作表,下标从0开始
WritableFont wf = new WritableFont(WritableFont.TAHOMA,12,WritableFont.BOLD,false);//添加字体样式
/**
* 对上面创建字体样式的参数含义说明:
* 参数一:添加字体名称
* 参数二:添加字体大小
* 参数三:添加字体样式
* 参数四:添加是否斜体
* 参数五:添加下划线 UnderlineStyle.NO_UNDERLINE
* 参数六:添加字体颜色 Colour.BLACK
*/
WritableCellFormat wcf = new WritableCellFormat(wf);//创建自定义字体样式的单元格对象
wcf.setVerticalAlignment(VerticalAlignment.CENTRE);//设置垂直居中
wcf.setAlignment(Alignment.CENTRE);//居中对齐
for(int i=0;i<titles.length;i++){
jxl.write.Label labelCFTitle = new jxl.write.Label(i, 0, titles[i], wcf);
ws.addCell(labelCFTitle);
ws.setColumnView(i, 28); // 设置列的宽度
}
/*****************************************************************************/
//上面为表头设置了字体样式,下面开始为表内容也设置字体样式
WritableFont content_wf = new jxl.write.WritableFont(WritableFont.TAHOMA, 8, WritableFont.NO_BOLD, false);
WritableCellFormat content_wcf = new jxl.write.WritableCellFormat(content_wf);
content_wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
content_wcf.setAlignment(Alignment.CENTRE);
//下面检查传入的list参数下的子对象类型,觉得麻烦的可以省下判断,直接写死,但是还是建议这样写,方便项目中调用。
int type=checkArray(list);
if(type==0){
for(int i=0;i<list.size();i++){
Object[] subList = (Object[])list.get(i);
for(int j=0;j<subList.length;j++){
String text = "";
if(subList[j]!=null)text=subList[j]+"";
Label labelCF = new Label(j,i+1,text,content_wcf);
ws.addCell(labelCF);
}
}
}else if(type==1){
for(int i=0;i<list.size();i++){
List subList = (List)list.get(i);
for(int j=0;j<subList.size();j++){
String text = (String)subList.get(j);
Label labelCF = new Label(j,i+1,text,content_wcf);
ws.addCell(labelCF);
}
}
}else if(type==2){
for(int i=0;i<list.size();i++){
Map map=(Map)list.get(i);
Iterator iter=map.keySet().iterator();
int j=0;
while(iter.hasNext()){
String key=iter.next()+"";
String text = map.get(key)+"";
Label labelCF = new Label(j++,i+1,text,content_wcf);
ws.addCell(labelCF);
}
}
}
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally{
//关闭Excel工作薄对象
try {
if(wwb!=null){
wwb.close();
}
os.close();
} catch (WriteException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}


/**
* 检查list中的子对象,是否MAP ,LIST Or OBJECT[]
* @param list要检查的对象
* */
@SuppressWarnings("all")
private static int checkArray(List list){
int ret=0;
if(list.get(0) instanceof Map){
ret=2;
}else if(list.get(0) instanceof List){
ret =1;
}else{
ret=0;
}
return ret;
}

/**
* 下载Excel文件调用Demo
* @param request 服务器请求对象
* @param response 服务器响应对象
* @param model
* @return
*/
public Model uploadFileDemo(HttpServletRequest request, HttpServletResponse response,
Model model){
try {
OutputStream os = response.getOutputStream();//响应服务器的输出流对象
String tempTime = DateUtils.now();//获取当前日期 DateUtils是自己封闭的类
//创建一个由自定义名称加当前日期去掉空格的字符串作为下载的Excel文件名
String fileName ="下载文件Demo_"+tempTime.substring(0,4)+
tempTime.substring(5,7)+tempTime.substring(8,10)
+tempTime.substring(11,13)+tempTime.substring(14,16)+tempTime.substring(17,19)+".xls";
response.reset();//清空输出流对象
response.setContentType("application/msexcel");//定义要输出的文本类型 msexcel为Excel的文体类型
//设置返回页面的信息,此句代码可在页面下方出现另存为的对话框,让客户自定义文件保存路径
response.setHeader("Content-disposition", "attachment; filename="+ new String(fileName.getBytes("gb2312"),"ISO8859-1"));
String sheetName = "下载Excel文件Demo表";//工作表sheet的表名
String [] titles = {"数据编号","系统名称","厂商名称","系统url","接入开始时间","接入结束时间","负责人姓名","负责人电话"};
List<Object[]> list = new ArrayList<Object[]>();
/**
* 创建一个list集合对象,用来存储要保存到Excel中的数据
* 此处List<Object[]>类型为例,集合Demo没有数据,实用时自己填充数据到集合中,不然就空异常了
*/
//调用下载Excel的方法
createExcel(os, sheetName, titles, list);
/**************************************************************/
/*
* 特别说明:页面调用时建议使用form表单提交,例:
* <form action="此处为后台Controller方法调用的URL" name="excelUpload" ></form>
* <input type="button" οnclick="upload();" value="导出"/>

* function upload(){document.excelUpload.submit(); }
* 如若不使用表单提交的方式,想在ajax中提交处理,页面不会直接出现下载提示框的,还需要自己处理一下。
*/
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
</textarea>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crazy_monky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值