jxl导不出来_jxl 导出数据到excel

该代码段展示了如何使用Java创建Excel文件并导出系统日志数据。它设置了单元格的字体、宽度、对齐方式,并处理了中文文件名的编码问题,确保在不同浏览器下能正确下载。内容包括日期、用户名、操作模块等信息。
摘要由CSDN通过智能技术生成

/*** 生成 excel 文件,导出到本地电脑

*@paramfname 文件名

*@paramlist 需要打印的数据,即数据库查询的数据列表*/

public static voidwriter_log(HttpServletRequest request,String fname, List list, HttpServletResponse response) {try{

OutputStream os= response.getOutputStream();//取得输出流

response.reset();//清空输出流//下面是对中文文件名的处理 开始

response.setCharacterEncoding("UTF-8");//设置相应内容的编码格式

if(isMsBrowser(request))

fname= java.net.URLEncoder.encode(fname ,"UTF-8");else fname = new String(fname.getBytes("UTF-8"),"ISO-8859-1");

response.setHeader("Content-Disposition","attachment;filename="+fname+".xls");

response.setContentType("application/msexcel;charset=utf-8");//定义输出类型//对中文文件名的处理 结束//此处的 Workbook 导入的是 import jxl.Workbook;

WritableWorkbook wbook = Workbook.createWorkbook(os); //建立excel文件

WritableSheet sheet = wbook.createSheet("系统日志", 0); //工作表名称

CellView cellView= newCellView();

cellView.setAutosize(true); //设置自动大小

sheet.setColumnView(0, 8); //设置单元格宽度,0是列号,8是宽度

sheet.setColumnView(1, 20); //设置单元格宽度,1是列号,20是宽度

sheet.setColumnView(2, 24);

sheet.setColumnView(3, 20);

sheet.setColumnView(4, 30);

sheet.setColumnView(5, 13);

sheet.setColumnView(6, 15);

sheet.setColumnView(7, 32);

sheet.setColumnView(8, 15);//设置Excel字体

WritableFont wfont = new WritableFont(WritableFont.createFont("宋体"), 22,

WritableFont.BOLD,false,

jxl.format.UnderlineStyle.NO_UNDERLINE,

jxl.format.Colour.BLACK);//设置单元格字体样式

WritableCellFormat titleFormat = new WritableCellFormat(wfont); //添加单元格字体

titleFormat.setAlignment(Alignment.CENTRE); //设置文字居中对齐方式;

String[] title = { "系统日志"};//设置Excel表头 开始

for (int i = 0; i < title.length; i++) {//此处导入的是 import jxl.write.Label;

Label excelTitle = new Label(i, 0, title[i], titleFormat); //单元格内容//参数顺序:开始列,开始行,结束列,结束行

sheet.mergeCells(0, 0, 8, 0); //所在位置,第几行第几列

sheet.addCell(excelTitle); //添加单元格信息

}//设置Excel表头 结束//第一行,即显示时间,参数:(所在列,所在行,内容)

WritableFont wfonttime = new WritableFont(WritableFont.createFont("宋体"), 11,

WritableFont.NO_BOLD,false,

jxl.format.UnderlineStyle.NO_UNDERLINE,

jxl.format.Colour.BLACK);//设置单元格字体样式

WritableCellFormat titletime = new WritableCellFormat(wfonttime);//添加单元格字体

titletime.setAlignment(Alignment.RIGHT); //设置文字居中对齐方式;

DateFormat df = new SimpleDateFormat("yyyy-MM-dd");//sheet.setColumnView(1, cellView);//根据内容自动设置列宽

Label contentDate = new Label(0, 1, df.format(new Date()), titletime); //单元格内容//sheet.mergeCells(16, 1, 18, 1);//所在位置,第几行第几列,即合并的位置,如没合并,可不写

sheet.addCell(contentDate); //添加单元格信息//第一行 结束//第二行,显示条件标题栏

WritableFont wfont2 = new WritableFont(WritableFont.createFont("宋体"), 11,

WritableFont.BOLD,false,

jxl.format.UnderlineStyle.NO_UNDERLINE,

jxl.format.Colour.BLACK);//设置单元格字体样式

WritableCellFormat titleFormat2 = new WritableCellFormat(wfont2);//添加单元格字体

titleFormat2.setBorder(Border.ALL, BorderLineStyle.THIN); //设置边框--实线;

titleFormat2.setAlignment(Alignment.CENTRE); //设置文字居中对齐方式;

titleFormat2.setVerticalAlignment(VerticalAlignment.CENTRE); //设置垂直居中;

Label content2a = new Label(0, 2, "序号", titleFormat2); //单元格内容--第1格

Label content2b = new Label(1, 2, "用户名", titleFormat2); //单元格内容--第2格

Label content2c = new Label(2, 2, "记录时间", titleFormat2); //单元格内容--第3格

Label content2d = new Label(3, 2, "操作模块", titleFormat2); //单元格内容--第4格

Label content2e = new Label(4, 2, "操作内容", titleFormat2); //单元格内容--第5格

Label content2f = new Label(5, 2, "操作动作", titleFormat2); //单元格内容--第6格

Label content2g = new Label(6, 2, "操作人IP", titleFormat2); //单元格内容--第7格

Label content2h = new Label(7, 2, "所属组织", titleFormat2); //单元格内容--第8格

Label content2i = new Label(8, 2, "备注", titleFormat2); //单元格内容--第9格

sheet.mergeCells(0, 1, 8, 1);/*sheet.mergeCells(0, 2, 0, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第1列)

sheet.mergeCells(1, 2, 1, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第2列)

sheet.mergeCells(2, 2, 2, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第3列)

sheet.mergeCells(3, 2, 3, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第4列)

sheet.mergeCells(4, 2, 4, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第5列)

sheet.mergeCells(5, 2, 5, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第6列)

sheet.mergeCells(6, 2, 6, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第7列)

sheet.mergeCells(7, 2, 7, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第8列)

sheet.mergeCells(8, 2, 8, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第9列)

sheet.mergeCells(9, 2, 9, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第10列)

sheet.mergeCells(10, 2, 12, 3); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到4行,第11-13列)

sheet.mergeCells(13, 2, 15, 3); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到4行,第14-16列)

sheet.mergeCells(16, 2, 16, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第17列)

sheet.mergeCells(17, 2, 17, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第18列)

sheet.mergeCells(18, 2, 18, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第19列)*/ sheet.addCell(content2a); //添加第1格单元格信息

sheet.addCell(content2b); //添加第2格单元格信息

sheet.addCell(content2c); //添加第3格单元格信息

sheet.addCell(content2d); //添加第4格单元格信息

sheet.addCell(content2e); //添加第5格单元格信息

sheet.addCell(content2f); //添加第6格单元格信息

sheet.addCell(content2g); //添加第7格单元格信息

sheet.addCell(content2h); //添加第8格单元格信息

sheet.addCell(content2i); //添加第9格单元格信息

WritableFont wf = new WritableFont(WritableFont.createFont("宋体"), 11,

WritableFont.NO_BOLD,false,

jxl.format.UnderlineStyle.NO_UNDERLINE,

jxl.format.Colour.BLACK);//设置单元格字体样式

WritableCellFormat wcf = new WritableCellFormat(wf); //添加单元格字体

wcf.setBorder(Border.ALL, BorderLineStyle.THIN); //设置边框--实线;

wcf.setVerticalAlignment(VerticalAlignment.CENTRE); //设置垂直对齐

wcf.setAlignment(Alignment.CENTRE); //设置文字水平居中对齐方式;

wcf.setWrap(true); //自动换行

WritableFont wf1= new WritableFont(WritableFont.createFont("宋体"), 11,

WritableFont.NO_BOLD,false,

jxl.format.UnderlineStyle.NO_UNDERLINE,

jxl.format.Colour.BLACK);//设置单元格字体样式

WritableCellFormat wcf1 = new WritableCellFormat(wf1); //添加单元格字体

wcf1.setBorder(Border.LEFT, BorderLineStyle.THIN); //设置边框--实线;

wcf1.setVerticalAlignment(VerticalAlignment.CENTRE); //设置垂直对齐

wcf1.setAlignment(Alignment.CENTRE); //设置文字水平居中对齐方式;//以下循环数据库获取的信息

int c = 1; //用于循环时Excel的行号

Iterator it =list.iterator();while(it.hasNext()) {

Logs tc=(Logs) it.next();

DateFormat dfmt= new SimpleDateFormat("yyyy.MM");

String xh=String.valueOf(c);if(xh== null){

xh= "";

}

Label content0= new Label(0, c+2, xh, wcf); //序号

String name=tc.getUserName();if(name == null){

name= "";

}

Label content1= new Label(1, c+2, name, wcf); //用户名

String xrPresent=tc.getLogTime();if(xrPresent == null){

xrPresent= "";

}

Label content2= new Label(2, c+2, xrPresent, wcf); //记录时间

String czModel=tc.getModel();if(czModel == null){

czModel= "";

}

Label content3= new Label(3, c+2, czModel, wcf); //操作模块

String sex=tc.getContent();if(sex == null){

sex= "";

}

Label content4= new Label(4, c+2, sex, wcf); //操作内容

String birthday=tc.getOperate();if(birthday == null){

birthday= "";

}

Label content5= new Label(5, c+2, birthday, wcf); //操作动作

String nation=tc.getIp();if(nation == null){

nation= "";

}

Label content6= new Label(6, c+2, nation, wcf); //操作人IP

String origin=tc.getOrgName();if(origin == null){

origin= "";

}

Label content7= new Label(7, c+2, origin, wcf); //所属组织

String bPlace=tc.getRemark();if(bPlace == null){

bPlace= "";

}

Label content8= new Label(8, c+2, bPlace, wcf); //备注

String abc="";

Label content9= new Label(9, c+2, abc, wcf1); //备注

sheet.setRowView(c+2, 600); //设置行高

sheet.setRowView(c+2, 600);

sheet.setRowView(c+2, 600);

sheet.setRowView(c+2, 600);

sheet.setRowView(c+2, 600);

sheet.setRowView(c+2, 600);

sheet.setRowView(c+2, 600);

sheet.setRowView(c+2, 600);

sheet.setRowView(c+2, 600);

sheet.setRowView(c+2, 600);

sheet.mergeCells(0, c+2, 0, c+2); //合并第一列第c+2行到第一列第c+2行的所有单元格

sheet.mergeCells(1, c+2, 0, c+2); //mergeCells(a,b,c,d) 单元格合并函数

sheet.mergeCells(2, c+2, 0, c+2); //a 单元格的列号

sheet.mergeCells(3, c+2, 0, c+2); //b 单元格的行号

sheet.mergeCells(4, c+2, 0, c+2); //c 从单元格[a,b]起,向下合并到c列

sheet.mergeCells(5, c+2, 0, c+2); //d 从单元格[a,b]起,向下合并到d行

sheet.mergeCells(6, c+2, 0, c+2);

sheet.mergeCells(7, c+2, 0, c+2);

sheet.mergeCells(8, c+2, 0, c+2);

sheet.mergeCells(9, c+2, 0, c+2);

sheet.addCell(content0);

sheet.addCell(content1);

sheet.addCell(content2);

sheet.addCell(content3);

sheet.addCell(content4);

sheet.addCell(content5);

sheet.addCell(content6);

sheet.addCell(content7);

sheet.addCell(content8);

sheet.addCell(content9);

c++;

}

wbook.write();//写入文件

wbook.close();

os.close();

}catch(Exception e) {throw new PaikeException("导出文件出错");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值