java编程 讲java excel单元格背景内容处理,按格式输出,部分内容存入数据库,希望能做成个小软件,请问需要怎么做

博客分类:
POI用的比较多一些,是apache的项目,一般如果你用Myeclipse的,给项目添加了spring的话会自动包含POI的包进去
java导出Excel java 代码 /* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */ package com.axon.fable.sams.view. import java.io.IOE import java.io.OutputS import java.util.L import javax.serv ... java导出Excel例举方式 方法一:导出Excel数据的插件jexcelapi 程序实例如下: public void exportClassroom(OutputStream os) throws PaikeException { try { WritableWorkbook wbook = Workbook.createWorkbook(os); //建立excel文件 WritableSheet wsheet = wbook.createSheet("教室信息表", 0); //工作表名称 //设置Excel字体 WritableFont wfont = new WritableFont(WritableFont.ARIAL, 16, WritableFont.BOLD, false, jxl.format.UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK); WritableCellFormat titleFormat = new WritableCellFormat(wfont); String[] title = { "教室名", "容 量", "类 型", "其他说明" }; //设置Excel表头 for (int i = 0; i & title. i++) { Label excelTitle = new Label(i, 0, title[i], titleFormat); wsheet.addCell(excelTitle); } int c = 1; //用于循环时Excel的行号 ClassroomService cs = new ClassroomService(); List list = cs.findAllClassroom(); //这个是从数据库中取得要导出的数据 Iterator it = list.iterator(); while (it.hasNext()) { ClassroomDTO crdto = (ClassroomDTO) it.next(); Label content1 = new Label(0, c, crdto.getRoomname()); Label content2 = new Label(1, c, crdto.getCapicity().toString()); Label content3 = new Label(2, c, crdto.getRoomTypeId() .toString()); Label content4 = new Label(3, c, crdto.getRemark()); wsheet.addCell(content1); wsheet.addCell(content2); wsheet.addCell(content3); wsheet.addCell(content4); c++; } wbook.write(); //写入文件 wbook.close(); os.close(); } catch (Exception e) { throw new PaikeException("导出文件出错"); } }
根据excle模块来导出excel:
Java操作Excel之理解JXL--读取Excel 说到如何用JXL读取Excel文件,现在来看看如何读取Excel模板然后把动态数据写入到模板以生成特定格式的Excel。同样的思路,先来考虑下会涉及到那些对象,和上篇文章读取相比这里涉及到一个写入的步骤,所以JXL必然会提供一个对象来支持写入,这就是WritableWorkbook。那么如何得到到这个类的实例,查看APIDoc发现Workbook类提供了几个静态的createWorkbook方法返回WritableWorkbook实例,可以看到众多createWorkbook方法主要分为两类:一个参数和两个参数。简单分析可以得知前者仅仅是用来直接生成Excel文件,后者先读取模板再向模板写入数据然后生成Excel。(还有一个三参数方法加上一个用来设置workbook的参数)现在按照上篇文章中所讲述的流程来看看读取模板并写入需要那些步骤。
第一步:选择模板文件:Workbook wb = Workbook.getWorkbook(new File(realpath));
第二步:通过模板得到一个可写的Workbook:WritableWorkbook wwb = Workbook.createWorkbook(targetFile, wb);第一个参数是一个输出流对象,比如可以ByteArrayOutputStream targetFile = new ByteArrayOutputStream();这样定义这个输出流对象。第二个参数代表了要读取的模板。
第三步:选择模板中名称为StateResult的Sheet:WritableSheet wws = wwb.getSheet("StateResult");如果需要也可以创建SheetWritableSheet wws = wwb.createSheet("Sheet名称",i);
第四步:选择单元格,写入动态值,根据单元格的不同类型转换成相应类型的单元格:Label A1 = (Label)wws.getWritableCell(0,0);A1.setString("单元格内容")或Number A2 = (Number)wws.getWritableCell(0,1);//Number是jxl.write.NumberA2.setValue(3.3);也可以创建新的单元格并且加入到Sheet中Label C1 = new Label(2,0,"单元格内容");wws.addCell(C1);或Number C1 = new Number(2,0,3.3);wws.addCell(C1);
在生成Excel报表的时候还会遇到一种需求就是数据的格式问题,我们可能希望数值型单元格以某种格式显示,而字符串型单元格以另
一种格式显示。这些可以通过WritableFont、NumberFormat、WritableCellFormat等实现,下例给单元格A1、A2添加了不同的格式。
WritableFont font= new WritableFont(WritableFont.createFont("宋体"),10,WritableFont.NO_BOLD);
NumberFormat format = new NumberFormat("###,##0.00");
WritableCellFormat cellFormat1 = new WritableCellFormat(font,format);
WritableCellFormat cellFormat2 = new WritableCellFormat(font);
cellFormat1.setBorder(Border.ALL, jxl.format.BorderLineStyle.THIN);
cellFormat2.setBorder(Border.ALL, jxl.format.BorderLineStyle.THIN);
A2.setCellFormat(cellFormat1);
A1.setCellFormat(cellFormat2);
还有不要忘记关闭WritableWorkbook和Workbook以释放资源:wwb.close();wb.close();
最后就可以你需要的方式从输出流targetFile中取得Excel,比如直接生成文件存本地,输出到客户端浏览器等。
如果还有其他需求,按照这种思路,再参照APIDoc相信可以很容易的解决。
至此,Java操作Excel之理解JXL就写完了。
***********************************************************************************************************************************
在这里说说两种表单格式,第一种只需把数据填充就行了,第二种是循环输出数据。
第一种表单如下:
//选择模板文件:
String realpath = "D:/download/test.xls";
Workbook wb = Workbook.getWorkbook(new File(realpath));
//第二步:通过模板得到一个可写的Workbook:第一个参数是一个输出流对象,第二个参数代表了要读取的模板
File targetFile = new File("D:/download/test1.xls");
WritableWorkbook wwb = Workbook.createWorkbook(targetFile, wb);
//第三步:选择模板中名称为StateResult的Sheet:
WritableSheet wws = wwb.getSheet(4); //
如果需要也可以创建Sheet //
WritableSheet wws = wwb.createSheet("Sheet名称",1);
//第四步:选择单元格,写入动态值,根据单元格的不同类型转换成相应类型的单元格:
//(列,行)
Label A1 = (Label)wws.getWritableCell(0,0);
A1.setString("
2009年 7 月****出单中心####公司结算表");
WritableFont font= new WritableFont(WritableFont.createFont("宋体"),18,WritableFont.BOLD);
WritableCellFormat cellFormat1 = new WritableCellFormat(font);
cellFormat1.setBorder(Border.ALL, jxl.format.BorderLineStyle.THIN); //Border是jxl.format.Border
cellFormat1.setBackground(Colour.BLUE);//设置单元格背景颜色为天蓝色
cellFormat1.setAlignment(jxl.format.Alignment.CENTRE);//设置文本对其方式,左对齐还是右对齐
A1.setCellFormat(cellFormat1);
Label A2 = (Label)wws.getWritableCell(0,1);
A2.setString("结算日期:2009年 7月7日 至 2009年 7月31日");
WritableFont font2= new WritableFont(WritableFont.createFont("宋体"),12,WritableFont.BOLD);
WritableCellFormat cellFormat2 = new WritableCellFormat(font2);
cellFormat2.setBorder(Border.ALL, jxl.format.BorderLineStyle.THIN); //Border是jxl.format.Border
cellFormat2.setBackground(Colour.BLUE);//设置单元格背景颜色为天蓝色
cellFormat2.setAlignment(jxl.format.Alignment.RIGHT);//设置文本对其方式,左对齐还是右对齐
A2.setCellFormat(cellFormat2);
/********************************public*****************************/
jxl.write.NumberFormat format = new jxl.write.NumberFormat("#");
jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(format);
WritableFont fonte= new WritableFont(WritableFont.createFont("宋体"),12,WritableFont.NO_BOLD);
WritableCellFormat cellFormat= new WritableCellFormat(fonte,format);
cellFormat.setBorder(Border.ALL, jxl.format.BorderLineStyle.THIN); //Border是jxl.format.Border
cellFormat.setAlignment(jxl.format.Alignment.CENTRE);//设置文本对其方式,左对齐还是右对齐
/********************************public*****************************/
/********************************保单生产明细*****************************/
jxl.write.Number C4 = new jxl.write.Number(2,3,bean.getPieces(),wcf);
wws.addCell(C4);
C4.setCellFormat(cellFormat);
//保单总印量
jxl.write.Number C5 = new jxl.write.Number(2,4,bean.getAllprintnum(),wcf);
wws.addCell(C5);
C5.setCellFormat(cellFormat);
//.................以此类推
wwb.write();
wwb.close();
wb.close();
}catch(Exception e){
e.printStackTrace();
第二种表单如下:
循环一个月内 每天的记录,前面是写死的填充数据,现在是循环输出,也很简单,写个FOR循环就OK,关闭WritableWorkbook和Workbook释放资源 要放在FOR循环之外,方法如下:
/*** 月报表导出EXCEL* * 循环输出的地方要采用新建单元格并且加入到Sheet的方式来实现* */public void reportMonthJXLWriteExcel(List list, List list2)
throws Exception {
// 选择模板文件:
String realpath = "D:/download/test.xls";
Workbook wb = Workbook.getWorkbook(new File(realpath));
// 第二步:通过模板得到一个可写的Workbook:第一个参数是一个输出流对象,第二个参数代表了要读取的模板
File targetFile = new File("D:/download/test1.xls");
WritableWorkbook wwb = Workbook.createWorkbook(targetFile, wb);
// 第三步:选择模板中名称为StateResult的Sheet:
WritableSheet wws = wwb.getSheet(3);
// 第四步:选择单元格,写入动态值,根据单元格的不同类型转换成相应类型的单元格:
// (列,行)
Label A1 = (Label) wws.getWritableCell(0, 0);
A1.setString("日湖南出单中心长沙分公司生产月明细表");
WritableFont font = new WritableFont(WritableFont.createFont("宋体"),
18, WritableFont.BOLD);
WritableCellFormat cellFormat1 = new WritableCellFormat(font);
cellFormat1.setBorder(Border.ALL, jxl.format.BorderLineStyle.THIN); // Border是jxl.format.Border
cellFormat1.setBackground(Colour.BLUE);// 设置单元格背景颜色为天蓝色
cellFormat1.setAlignment(jxl.format.Alignment.CENTRE);// 设置文本对其方式,左对齐还是右对齐
A1.setCellFormat(cellFormat1);
/** ******************************public**************************** */
jxl.write.NumberFormat format = new jxl.write.NumberFormat("#");
jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(
WritableFont fonte = new WritableFont(
WritableFont.createFont("宋体"), 10, WritableFont.NO_BOLD);
WritableCellFormat cellFormat = new WritableCellFormat(fonte,
cellFormat.setBorder(Border.ALL, jxl.format.BorderLineStyle.THIN); // Border是jxl.format.Border
cellFormat.setAlignment(jxl.format.Alignment.CENTRE);// 设置文本对其方式,左对齐还是右对齐
for (int c = 0; c & 18; c++) {
wws.setColumnView(c, 8);// 给每列设置宽度
/** ******************************public**************************** */
int i = 0, j = 0;// i=描述单元格,j=获取JAVA BEAN对象
for (i = 3, j = 0; i & list.size() + 3 && j & list.size(); i++, j++) {
ReportDayBean bean = (ReportDayBean) list.get(j);
Label A4 = new Label(0, i, bean.getBusitime());
wws.addCell(A4);
WritableFont font2 = new WritableFont(WritableFont
.createFont("宋体"), 10, WritableFont.NO_BOLD);
WritableCellFormat cellFormat2 = new WritableCellFormat(font2);
cellFormat2.setBorder(Border.ALL,
jxl.format.BorderLineStyle.THIN); // Border是jxl.format.Border
cellFormat2.setAlignment(jxl.format.Alignment.CENTRE);// 设置文本对其方式,左对齐还是右对齐
A4.setCellFormat(cellFormat2);
jxl.write.Number B4 = new jxl.write.Number(1, i, bean
.getPieces(), wcf);
wws.addCell(B4);
B4.setCellFormat(cellFormat);
jxl.write.Number C4 = new jxl.write.Number(2, i, bean
.getAllprintnum(), wcf);
wws.addCell(C4);
C4.setCellFormat(cellFormat);
jxl.write.Number D4 = new jxl.write.Number(3, i, bean
.getOverprintnum(), wcf);
wws.addCell(D4);
D4.setCellFormat(cellFormat);
// 清单印量
jxl.write.Number E4 = new jxl.write.Number(4, i, bean
.getListprintnum(), wcf);
wws.addCell(E4);
E4.setCellFormat(cellFormat);
jxl.write.Number F4 = new jxl.write.Number(5, i, bean
.getPaper(), wcf);
wws.addCell(F4);
F4.setCellFormat(cellFormat);
jxl.write.Number G4 = new jxl.write.Number(6, i, bean
.getZ_pieces(), wcf);
wws.addCell(G4);
G4.setCellFormat(cellFormat);
jxl.write.Number H4 = new jxl.write.Number(7, i, bean
.getZ_printnum(), wcf);
wws.addCell(H4);
H4.setCellFormat(cellFormat);
jxl.write.Number I4 = new jxl.write.Number(8, i, bean
.getZ_paper(), wcf);
wws.addCell(I4);
I4.setCellFormat(cellFormat);
// 本埠信函
jxl.write.Number J4 = new jxl.write.Number(9, i, bean
.getLocal(), wcf);
wws.addCell(J4);
J4.setCellFormat(cellFormat);
// 外埠信函
jxl.write.Number K4 = new jxl.write.Number(10, i, bean
.getForeign(), wcf);
wws.addCell(K4);
K4.setCellFormat(cellFormat);
jxl.write.Number L4 = new jxl.write.Number(11, i, bean
.getPrintnum(), wcf);
wws.addCell(L4);
L4.setCellFormat(cellFormat);
// 预印用纸
jxl.write.Number M4 = new jxl.write.Number(12, i, bean
.getPrepaper(), wcf);
wws.addCell(M4);
M4.setCellFormat(cellFormat);
// 空白用纸
jxl.write.Number N4 = new jxl.write.Number(13, i, bean
.getBlankpaper(), wcf);
wws.addCell(N4);
N4.setCellFormat(cellFormat);
jxl.write.Number O4 = new jxl.write.Number(14, i, bean
.getEnvelope(), wcf);
wws.addCell(O4);
O4.setCellFormat(cellFormat);
// 装订份数
jxl.write.Number P4 = new jxl.write.Number(15, i, bean
.getQ_pieces(), wcf);
wws.addCell(P4);
P4.setCellFormat(cellFormat);
jxl.write.Number Q4 = new jxl.write.Number(16, i, bean
.getQ_printnum(), wcf);
wws.addCell(Q4);
Q4.setCellFormat(cellFormat);
jxl.write.Number R4 = new jxl.write.Number(17, i, bean
.getQ_paper(), wcf);
wws.addCell(R4);
R4.setCellFormat(cellFormat);
System.out.println("iiiiiiiiiiii=" + i);
ReportDayBean bean = (ReportDayBean) list2.get(0);
Label A4 = new Label(0, i, "小计");
wws.addCell(A4);
WritableFont font2 = new WritableFont(
WritableFont.createFont("宋体"), 12, WritableFont.NO_BOLD);
WritableCellFormat cellFormat2 = new WritableCellFormat(font2);
cellFormat2.setBorder(Border.ALL, jxl.format.BorderLineStyle.THIN); // Border是jxl.format.Border
cellFormat2.setAlignment(jxl.format.Alignment.CENTRE);// 设置文本对其方式,左对齐还是右对齐
A4.setCellFormat(cellFormat2);
jxl.write.Number B4 = new jxl.write.Number(1, i, bean.getPieces(),
wws.addCell(B4);
B4.setCellFormat(cellFormat);
jxl.write.Number C4 = new jxl.write.Number(2, i, bean
.getAllprintnum(), wcf);
wws.addCell(C4);
C4.setCellFormat(cellFormat);
jxl.write.Number D4 = new jxl.write.Number(3, i, bean
.getOverprintnum(), wcf);
wws.addCell(D4);
D4.setCellFormat(cellFormat);
// 清单印量
jxl.write.Number E4 = new jxl.write.Number(4, i, bean
.getListprintnum(), wcf);
wws.addCell(E4);
E4.setCellFormat(cellFormat);
jxl.write.Number F4 = new jxl.write.Number(5, i, bean.getPaper(),
wws.addCell(F4);
F4.setCellFormat(cellFormat);
jxl.write.Number G4 = new jxl.write.Number(6, i,
bean.getZ_pieces(), wcf);
wws.addCell(G4);
G4.setCellFormat(cellFormat);
jxl.write.Number H4 = new jxl.write.Number(7, i, bean
.getZ_printnum(), wcf);
wws.addCell(H4);
H4.setCellFormat(cellFormat);
jxl.write.Number I4 = new jxl.write.Number(8, i, bean.getZ_paper(),
wws.addCell(I4);
I4.setCellFormat(cellFormat);
// 本埠信函
jxl.write.Number J4 = new jxl.write.Number(9, i, bean.getLocal(),
wws.addCell(J4);
J4.setCellFormat(cellFormat);
// 外埠信函
jxl.write.Number K4 = new jxl.write.Number(10, i,
bean.getForeign(), wcf);
wws.addCell(K4);
K4.setCellFormat(cellFormat);
jxl.write.Number L4 = new jxl.write.Number(11, i, bean
.getPrintnum(), wcf);
wws.addCell(L4);
L4.setCellFormat(cellFormat);
// 预印用纸
jxl.write.Number M4 = new jxl.write.Number(12, i, bean
.getPrepaper(), wcf);
wws.addCell(M4);
M4.setCellFormat(cellFormat);
// 空白用纸
jxl.write.Number N4 = new jxl.write.Number(13, i, bean
.getBlankpaper(), wcf);
wws.addCell(N4);
N4.setCellFormat(cellFormat);
jxl.write.Number O4 = new jxl.write.Number(14, i, bean
.getEnvelope(), wcf);
wws.addCell(O4);
O4.setCellFormat(cellFormat);
// 装订份数
jxl.write.Number P4 = new jxl.write.Number(15, i, bean
.getQ_pieces(), wcf);
wws.addCell(P4);
P4.setCellFormat(cellFormat);
jxl.write.Number Q4 = new jxl.write.Number(16, i, bean
.getQ_printnum(), wcf);
wws.addCell(Q4);
Q4.setCellFormat(cellFormat);
jxl.write.Number R4 = new jxl.write.Number(17, i,
bean.getQ_paper(), wcf);
wws.addCell(R4);
R4.setCellFormat(cellFormat);
int k = i + 2;// 这里是空一行再写入制表人,审核人......
wws.mergeCells(4, k, 17, k);
Label E14 = new Label(
机构负责人:
机构财务部负责人:
wws.addCell(E14);
WritableCellFormat cellFormatinfo = new WritableCellFormat(font2);
cellFormatinfo.setBorder(Border.ALL,
jxl.format.BorderLineStyle.NONE); // Border是jxl.format.Border
cellFormatinfo.setAlignment(jxl.format.Alignment.LEFT);// 设置文本对其方式,左对齐还是右对齐
E14.setCellFormat(cellFormatinfo);
wwb.write();
wwb.close();
wb.close();
} catch (Exception e) {
浏览: 289045 次
来自: 大力亚
http://www.open-open.com/lib/vi ...
依赖注入我记得好像是两种,一种的set方法 ...
循环一个月内 每天的记录----
这样的话for循环下面会创建 ...
一:引入spring-beans-2.5.6.jar
二:在 ...
讲的蛮好的~不过偶是没看到图啊!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'sponsored links
java Poi解析07及以上版本Excel单元格中的整数数据出现小数点或者科学技计数的解决办法
1.对Excel表格进行处理可以达到消除出现小数后缀的情况,具体操作。
& &当数字输入表格后,在数字前面添加一个英文格式的单引号。如下图:
& & & & & & & & && &
2.对java代码进行处理,具体操作:
& 在读取到单元格内容后,用数据格式化工具进行格式化为不带小数
&的字符串例如:DecimalFormat dfs = new DecimalFormat(&0&);
String &str = dfs.format(row.getCell(1).getNumericCellValue());
&得到的结果即为不带小数点的和Excel表格中输入的形式一样的数字样式的字符串。
对于Excel表格中的不同数据,我们可以按照不同的条件和要求设置它显示的格式,以便把不同的数据更加醒目地表示出来,这就是Excel单元格中条件格式的应用.也就是说,我们可以根据单元格中数据所满足的不同条件为单元格设置不同的格式.那么,如果我们希望某单元格的格式根据其他单元格数据所满足的条件来进行相应设置,能不能实现呢?当然能,在Excel 2007中,用条件 ...
可以在一个Excel单元格中.同时在多个Excel单元格中活和在多个工作表 (工作表:在 Excel 中用于存储和处理数据的主要文档.也称为电子表格.工作表由排列成行或列的单元格组成.工作表总是存储在工作簿中.)中输入数字(带有或不带有自动设置小数点).文本.日期或时间. 要点 工作表可能受到您或其他人的保护,以防止数据意外更改.在受保护的工作表中,您可能选 ...
在 Excel 单元格中实现下拉菜单. 1.在设计好的表格边框外任选一列,按顺序自上而下输入下拉菜单的内容.2.选中需要建立下拉菜单的单元格,再选择&数据&--&有效性&,在&有效性条件&--&允许&中选中&序列&.在&来源&选框中点击选择 ...
今天要对一个excel中带删除线的进行筛选,查到这么个方法:ctrl + F3打开创建宏的界面,输入个名字,比如CheckDeleteLine,内容中为=GET.CELL(23,$A1)
$A1替换成要检查的单元格,在一个空白的列中输入=CheckDeleteLine,如果为TRUE就是有删除线,为FALSE即没有删除线.
GET.CELL中的23意思 ...
文章编号: 000006 - 最后修改:日 - 撰写人: Lander Zhang 适合项目: 通用 症状: 在Excel中显示打印正常,如下图: 打印后部分单元格格式错位,如下图: 原因: 用户是使用空格换行,导致打印是格式错位. 解决方案: 在单元格中手动另起一行时,按住&Alt&然后敲回车,打印预览效果如下图:博客分类:
实际开发过程中通常用到的就是从数据库导出EXCEL表格了,JXL可以这样做,其实POI也可以(关于JXL与POI的异同可访问我之前总结的),之前写过POI对七种文档(当然也包括EXCEL)的内容读取操作的,这次要写的就非常重要了,就是开发中经常会用到的POI读取数据库导出EXCEL的操作,所谓导出EXCEL也就是生成带数据内容的新的EXCEL文件
目前的POI版本是3.7
下载地址:http://poi.apache.org/download.html#POI-3.7
必须包只有一个:poi-3.7-.jar
整理思路:1)数据库中的字段对应EXCEL的最顶层一行各个CELL名称[也就是上面图片中序号版本...的]
2)将每个数据一次插入到对应名称CELL的对应记录位置
3)为了方便操作,顶层的cell各个名称可以抽取出来成为一个单独类
第一部分:单独的EXCEL表头类
public class Cachetable {
private String devIp;
/** default constructor */
public Cachetable() {
/** full constructor */
public Cachetable(int recnum, String devIp, String srcaddr, String dstaddr, String nexthop, String input, String output, String dpkts, String doctets, String sstart, String dstport, String prot, String tos, String srcas, String dstas,String pduversion) {
this.recnum =
this.devIp = devIp;
this.srcaddr =
this.dstaddr =
this.nexthop =
this.input =
this.output =
this.dpkts =
this.doctets =
this.sstart =
this.dstport =
this.prot =
this.tos =
this.srcas =
this.dstas =
this.pduversion =
public int getRecnum() {
return this.
public void setRecnum(int recnum) {
this.recnum=
public String getDevIp() {
return this.devIp;
public void setDevIp(String devIp) {
this.devIp = devIp;
public String getSrcaddr() {
return this.
public void setSrcaddr(String srcaddr) {
this.srcaddr =
public String getDstaddr() {
return this.
public void setDstaddr(String dstaddr) {
this.dstaddr =
public String getNexthop() {
return this.
public void setNexthop(String nexthop) {
this.nexthop =
public String getInput() {
return this.
public void setInput(String input) {
this.input =
public String getOutput() {
return this.
public void setOutput(String output) {
this.output =
public String getDpkts() {
return this.
public void setDpkts(String dpkts) {
this.dpkts =
public String getDoctets() {
return this.
public void setDoctets(String doctets) {
this.doctets =
public String getSstart() {
return this.
public void setSstart(String sstart) {
this.sstart =
public String getDstport() {
return this.
public void setDstport(String dstport) {
this.dstport =
public String getProt() {
return this.
public void setProt(String prot) {
this.prot =
public String getTos() {
return this.
public void setTos(String tos) {
this.tos =
public String getSrcas() {
return this.
public void setSrcas(String srcas) {
this.srcas =
public String getDstas() {
return this.
public void setDstas(String dstas) {
this.dstas =
public String getPduversion() {
return this.
public void setPduversion(String pduversion) {
this.pduversion =
第二部分:具体的POI操作生成EXCEL类
【我这里只是个示例,没连数据库,直接运行即可,如果想连,稍微变动一点即可】
package com.zkyy.flow.
import java.io.FileOutputS
import java.io.IOE
import java.io.OutputS
import java.sql.SQLE
import java.util.ArrayL
import java.util.L
import javax.swing.JOptionP
import org.apache.poi.hssf.usermodel.HSSFC
import org.apache.poi.hssf.usermodel.HSSFCellS
import org.apache.poi.hssf.usermodel.HSSFDataF
import org.apache.poi.hssf.usermodel.HSSFF
import org.apache.poi.hssf.usermodel.HSSFH
import org.apache.poi.hssf.usermodel.HSSFR
import org.apache.poi.hssf.usermodel.HSSFS
import org.apache.poi.hssf.usermodel.HSSFW
import com.kk.flow.webapp.util.C
public class ExcelOut {
public static final String[] tableHeader = {"序号","版本","接收时刻","设备","入接口","出接口",
"源IP","目的IP","下一跳","协议","端口","对端端口","TOS","源AS","目的AS","TCP_FLAG","pad1","pad2"};
//创建工作本
public static HSSFWorkbook demoWorkBook = new HSSFWorkbook();
public static HSSFSheet demoSheet = demoWorkBook.createSheet("The World's 500 Enterprises");
//表头的单元格个数目
public static final short cellNumber = (short)tableHeader.
//数据库表的列数
public static final int columNumber = 1;
* 创建表头
public static void createTableHeader()
HSSFHeader header = demoSheet.getHeader();
header.setCenter("世界五百强企业名次表");
HSSFRow headerRow = demoSheet.createRow((short) 0);
for(int i = 0;i & cellNi++)
HSSFCell headerCell = headerRow.createCell((short) i);
headerCell.setCellType(HSSFCell.CELL_TYPE_STRING);
headerCell.setCellValue(tableHeader[i]);
* @param cells
* @param rowIndex
public static void createTableRow(List&String& cells,short rowIndex)
//创建第rowIndex行
HSSFRow row = demoSheet.createRow((short) rowIndex);
for(int i = 0;i & cells.size();i++)
//创建第i个单元格
HSSFCell cell = row.createCell(i);
if(cell.getCellType()!=1){
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
//新增的四句话,设置CELL格式为文本格式
HSSFCellStyle cellStyle2 = demoWorkBook.createCellStyle();
HSSFDataFormat format = demoWorkBook.createDataFormat();
cellStyle2.setDataFormat(format.getFormat("@"));
cell.setCellStyle(cellStyle2);
cell.setCellValue(cells.get(i));
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
* USE:用于获取Cachetable的数据。。。假数据。到时候:你连接数据库的到List&Cachetable&的数据就行了。 共生成
* 100条数据.相当于100行
public List&Cachetable& getDate() {
List&Cachetable& cacheList = new ArrayList&Cachetable&();
for (int j = 0; j & 300; j++) {
Cachetable tb = new Cachetable();
tb.setRecnum(j + 1);
tb.setDevIp("JavaCrazyer");
tb.setSrcaddr("北京");
tb.setDstaddr("xxx");
tb.setNexthop("yy");
tb.setInput("123");
tb.setOutput("127.0.0.1");
tb.setDpkts("what are you doing?");
tb.setDoctets("who are you?");
tb.setSstart("Oh
tb.setProt("One");
tb.setTos("two");
tb.setSrcas("three");
tb.setDstas("four");
tb.setPduversion("不知道");
cacheList.add(tb);
return cacheL
* 创建整个Excel表
* @throws SQLException
void createExcelSheet() throws SQLException{
createTableHeader();
int rowIndex=1;
List&Cachetable& list=getDate();
for(int j=0;j&list.size();j++){
List&String& listRead=new ArrayList&String&();
for(int i=1;i&=columNi++){
listRead.add(list.get(i).getDevIp());
listRead.add(list.get(i).getSrcaddr());
listRead.add(list.get(i).getDstaddr());
listRead.add(list.get(i).getNexthop());
listRead.add(list.get(i).getInput());
listRead.add(list.get(i).getOutput());
listRead.add(list.get(i).getDpkts());
listRead.add(list.get(i).getDoctets());
listRead.add(list.get(i).getSstart());
listRead.add(list.get(i).getProt());
listRead.add(list.get(i).getTos());
listRead.add(list.get(i).getSrcas());
listRead.add(list.get(i).getDstas());
listRead.add(list.get(i).getPduversion());
listRead.add(rowIndex+"");
createTableRow(listRead,(short)rowIndex);
rowIndex++;
* 导出表格
* @param sheet
* @param os
* @throws IOException
public void exportExcel(HSSFSheet sheet,OutputStream os) throws IOException
sheet.setGridsPrinted(true);
HSSFFooter footer = sheet.getFooter();
footer.setRight("Page " + HSSFFooter.page() + " of " +
HSSFFooter.numPages());
demoWorkBook.write(os);
public static void main(String[] args) {
String fileName = "f:\\世界五百强企业名次表.xls";
FileOutputStream fos =
ExcelOut pd = new ExcelOut();
pd.createExcelSheet();
fos = new FileOutputStream(fileName);
pd.exportExcel(demoSheet,fos);
JOptionPane.showMessageDialog(null, "表格已成功导出到 : "+fileName);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "表格导出出错,错误信息 :"+e+"\n错误原因可能是表格已经打开。");
e.printStackTrace();
} finally {
fos.close();
} catch (Exception e) {
e.printStackTrace();
1)有关数据库连接,如果操作到数据库的话,在遍历数据库时用getDate这个方法遍历就可以啦,那么插入的数据就不是定值了,而是数据库中的值哦,具体操作数据库的步骤,我不用说,你懂得
2)有关涉及更改EXCEL的CELL格式为字符串,如图一般情况下大家导出的EXCEL表格CELL格式通常是常规的
这个问题,估计已经不止一两个朋友在网上问过,我至今没有看到一个满意的答案,通常大家都是想到既然是设置CELL格式肯定是通过cell.setCellType(HSSFCell.CELL_TYPE_STRING)然后插入数据再导出,诚然这种想法是对的,实际上不能起到任何作用,因为这个方法就是EXCEL默认的格式,写不写都一样(好多同学都不知道吧),再写出我的解决方案之前请大家参考下一段文字
第一段:Excel的单元格格式 图中的数据有数值、货币、时间、日期、文本等格式。这些数据格式在POI中的HSSFDataFormat类里都有相应的定义。 HSSFDataFormat是HSSF子项目里面定义的一个类。类HSSFDataFormat允许用户新建数据格式类型。HSSFDataFormat类包含静态方法static java.lang.String getBuiltinFormat(short index),它可以根据编号返回内置数据类型。另外static short getBuiltinFormat(java.lang.String format)方法则可以根据数据类型返回其编号,static java.util.List getBuiltinFormats()可以返回整个内置的数据格式列表。 在HSSFDataFormat里一共定义了49种内置的数据格式,如下面所示。
HSSFDataFormat的数据格式 内置数据类型 编号 "General" 0 "0" 1 "0.00" 2 "#,##0" 3 "#,##0.00" 4 "($#,##0_);($#,##0)" 5 "($#,##0_);[Red]($#,##0)" 6 "($#,##0.00);($#,##0.00)" 7 "($#,##0.00_);[Red]($#,##0.00)" 8 "0%" 9 "0.00%" 0xa "0.00E+00" 0xb "# ?/?" 0xc "# ??/??" 0xd "m/d/yy" 0xe "d-mmm-yy" 0xf "d-mmm" 0x10 "mmm-yy" 0x11 "h:mm AM/PM" 0x12 "h:mm:ss AM/PM" 0x13 "h:mm" 0x14 "h:mm:ss" 0x15 "m/d/yy h:mm" 0x16 保留为过国际化用 0x17 - 0x24 "(#,##0_);(#,##0)" 0x25 "(#,##0_);[Red](#,##0)" 0x26 "(#,##0.00_);(#,##0.00)" 0x27 "(#,##0.00_);[Red](#,##0.00)" 0x28 "_($*#,##0_);_($*(#,##0);_($* \"-\"_);_(@_)" 0x29 "_(*#,##0.00_);_(*(#,##0.00);_(*\"-\"??_);_(@_)" 0x2a "_($*#,##0.00_);_($*(#,##0.00);_($*\"-\"??_);_(@_)" 0x2b "_($*#,##0.00_);_($*(#,##0.00);_($*\"-\"??_);_(@_)" 0x2c "mm:ss" 0x2d "[h]:mm:ss" 0x2e "mm:ss.0" 0x2f "##0.0E+0" 0x30 "@" - This is text format 0x31 在上面表中,字符串类型所对应的是数据格式为"@"(最后一行),也就是HSSFDataFormat中定义的值为0x31(49)的那行。Date类型的值的范围是0xe-0x11,本例子中的Date格式为""m/d/yy"",在HSSFDataFormat定义的值为0xe(14)。
第二段:POI中Excel文件Cell的类型 在读取每一个Cell的值的时候,通过getCellType方法获得当前Cell的类型,在Excel中Cell有6种类型,如下面所示。 Cell的类型 CellType 说明 CELL_TYPE_BLANK 空值 CELL_TYPE_BOOLEAN 布尔型 CELL_TYPE_ERROR 错误 CELL_TYPE_FORMULA 公式型 CELL_TYPE_STRING 字符串型 CELL_TYPE_NUMERIC 数值型 一般都采用CELL_TYPE_STRING和CELL_TYPE_NUMERIC类型,因为在Excel文件中只有字符串和数字。如果Cell的Type为CELL_TYPE_NUMERIC时,还需要进一步判断该Cell的数据格式,因为它有可能是Date类型,在Excel中的Date类型也是以Double类型的数字存储的。Excel中的Date表示当前时间与日相隔的天数,所以需要调用HSSFDateUtil的isCellDateFormatted方法,判断该Cell的数据格式是否是Excel Date类型。如果是,则调用getDateCellValue方法,返回一个Java类型的Date。
好了读完上面两段文字我想大家关于CELL类型和格式应该清楚了,更应该清楚的是到底怎么才能将‘设置单元格格式’改成文本然后再导出
解决方案:就是上面代码中的ExcelOut类里面createTableRow方法中的一段代码
HSSFCellStyle cellStyle2 = demoWorkBook.createCellStyle();
HSSFDataFormat format = demoWorkBook.createDataFormat();
cellStyle2.setDataFormat(format.getFormat("@"));
cell.setCellStyle(cellStyle2);
看最终导出效果图吧,点击任何一个CELL右键设置单元格格式
JOptionPane.showMessageDialog(null, "表格已成功导出到 : "+fileName);这句话有点意思
看到没这就是javax.swing.JOptionPane类的有关消息输出的好处,很方便使用
PS:更多的关于POI设置EXCEL单元格格式为数字、百分比、货币、日期等等格式的,请看我接下来要写的
34 顶10 踩
浏览 63227
如何让数字类型导出来之后左上角不带绿色三角形?这个是excle上面的验证,在excle上面设置就好
很全面。受教了。
JavaCrazyer
浏览: 2614695 次
来自: 河南
这些example有些过时了,官方建议使用HBase-1.0
重命名了一下搞定了
为什么下载以后老解压不了呢?
读写以及修改excel文件,试试用pageoffice吧。
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 java excel合并单元格 的文章

 

随机推荐