【Jsp精品源码栏目提醒】:网学会员Jsp精品源码为您提供Java对Excel表格的操作 - 编程语言参考,解决您在Java对Excel表格的操作 - 编程语言学习中工作中的难题,参考学习。
1.2JExcelAPi 开发环境简单配置 JExcelAPi 是一个开源的项目, 在 可以在官方网站下载其最新版本。
JExcelAPi的官方网站上提供各种版本的下载,例如要下载版本为 2.4.2 的 JExcelApi下载下来的文件为:Jexcelapi-2-4-2.tar.gz直接解压这个压轴文件即可。
其中 docs 目录下是类库参考档案。
Src 目录下是整个 JExcelAPi 的源代码,在 src 目录下有 demo 子目录,里面是例子代码,demo 中的源代码对初学者来说是最好的教材,参考其中的例程可以实现其绝大部分 功能。
JExcelAPi 这个目录下面可以看到 jx1.jar 文件, 这个文件就是 JExcelAPi 打包的类库文件,如果要在项目中使用 JExcelAPi 只需要把 jx1.jar 文件的路径加入classpath 中或项目 lib 目录下。
1.3
JSP 生成 Excel 报表 在接下讲解在
JSP 中使用 JExcelApi 生成不同格式的 Excel 文件.在 WEB应用开发过程中, 可能会遇到各种各样的报表需求, 这些报表不仅布局格式复杂,而且 至有些报表需要在指定的位置显示图片。
当这些报表需要导出为 Excel 的时候,相应的的问题就会出现,而接下来要阐述的内容就是怎样使用 JExcelApi 来解决这些问题。
解决任何问题的时候都是从简单到复杂,下面几个示例也是按照这个原则组织的。
在实际应用开发中,经常需要把指定的数据生成 Excel 文件,并且可以下载生成的 Excel 文件。
在本章的示例中。
利用 JavaBean 生成的 Excel 文件,在
JSP页面上调用这个 JavaBean 生成的 Excel 文件,然后提供下载方式。
当访问这个
JSP 页面的时候可以直接下载生成的 Excel 文件。
1.
JSP 生成简单的 Excel 文件 假设下面这种情形,要把表中的内容导出为 Excel 文件。
学校 专业 专业竞争力清华大学 计算机专业 高北京大学 法律专业 中北京理工大学 航空专业 低 在表中展示的内容格式全是字符串。
而且这个表格的格式也是相当简单,没有任何合并的单元格,也没有颜色的设置。
类似这种表格生成对应的 Excel 文件是非常容易的,实现这个功能的 JavaBean 代码如下所示。
package beans.excelimport java.io.IOExceptionimport java.io.OutputStreamimport jxl.Workbookimport jxl.write.Labelimport jxl.write.WritableCellFormatimport jxl.write.WritableSheetimport jxl.write.WritableWorkbookimport jxl.write.WriteExceptionimport jxl.write.biff.RowsExceededExceptionpublic class SimpleExcelWrite public void createExcelOutputStream os throws WriteExceptionIOException //创建工作薄 WritableWorkbook workbook Workbook.createWorkbookos //创建新的一页 WritableSheet sheet workbook.createSheetquotFirst Sheetquot 0 //创建要显示的具体内容 Label xuexiao new Label0 0 quot学校quot sheet.addCellxuexiao Label zhuanye new Label1 0 quot专业quot sheet.addCellzhuanye Label jingzhengli new Label2 0 quot专业竞争力quot sheet.addCelljingzhengli Label qinghua new Label0 1 quot清华大学quot sheet.addCellqinghua Label jisuanji new Label1 1 quot计算机专业quot sheet.addCelljisuanji Label gao new Label2 1 quot高quot sheet.addCellgao Label beida new Label0 2 quot北京大学quot sheet.addCellbeida Label falv new Label1 2 quot法律专业quot sheet.addCellfalv Label zhong new Label2 2 quot中quot sheet.addCellzhong Label ligong new Label0 3 quot北京理工大学quot sheet.addCellligong Label hangkong new Label1 3 quot航空专业quot sheet.addCellhangkong Label di new Label2 3 quot低quot sheet.addCelldi //把创建的内容写入到输出流中,并关闭输出流 workbook.write workbook.close 上面这个 JavaBean 中的主要代码解释如下。
WritableWorkbook workbook Workbook.createWorkbookos 上面这行代码创建一个 Excel 工作区(WorkBook) 。
在 Excel 中,所有的页(Sheet)只能在工作区(WorkBook)中创建。
WritableSheet sheet workbook.createSheetquotFirst Sheetquot 0 上面这行代码在工作区(WorkBook)中创建新的一页(Sheeet)其中新建的页(Sheet)名称为 。
在 “First sheet” 这一页的属性是可以进行写操作的。
JExcelAPi中也可以创建只读的页。
Label xuexiao new Label0 0 quot学校quotsheet.addCellxuexiao 上面这段代码创建了一个单元格,并把这个单元格添加到指定的页中,其中这个单元格的内容是“学校”位置在第一行第一列,其中第 1 个参数是列坐标,第 2 个参数是行坐标,而且两个坐标都是从 0 开始计算。
workbook.writeworkbook.closeos.close 然后关闭工作区, 这 3 行代码执行的操作是把工作区中的内容写到输出流中,最后关闭输出流。
下面来看如何在
JSP 页面上调用这个 JavaBean,并且实现下载的功能。
具体的
JSP 代码如下所示。
lt page languagequotjavaquot importquotjava.util.quot pageEncodingquotgb2312quotgtlt page importquotjava.io.quot gtlt page importquotbeans.excel.quot gtlt String fname quot学校专业竞争力情况quot OutputStream os response.getOutputStream//取得输出流 response.reset//清空输出流 //下面是对中文文件名的处理 response.setCharacterEncodingquotUTF-8quot fname java.net.URLEncoder.encodefname quotUTF-8quot response.setHeaderquotContent-Dispositionquot quotattachment filenamequot new Stringfname.getBytesquotUTF-8quot quotGBKquot quot.xlsquot response.setContentTypequotapplication/msexcelquot//定义输出类型 SimpleExcelWrite sw new SimpleExcelWrite sw.createExcelos gtlthtmlgt ltbodygt lt/bodygtlt/htmlgt上面这个
JSP 页面实现的功能是调用 JavaBean 生成的 Excel 文件,并且提供下载。
String fname quot学校专业竞争力情况quot上面这行设置生成 Excel 文件的文件名。
OutputStream os response.getOutputStream//取得输出流response.reset//清空输出流上面两行代码取得输出流,并且清空输出流的男内容。
提供给后面生成的 Excel文件使用。
response.setCharacterEncodingquotUTF-8quotfname java.net.URLEncoder.encodefname quotUTF-8quot 上面两行代码进行的操作是中文显示的处理,上面一行设置整个 Excel 的编码格式,下面一行设置 Excel 文件名的编码格式。
这两处编码格式如果不进行设置就会出现中文乱码的情况。
response.setHeaderquotContent-Dispositionquot quotattachment filenamequot newStringfname.getBytesquotUTF-8quot quotGBKquot quot.xlsquotresponse.setContentTypequotapplication/msexcelquot//定义输出类型上面这段代码实现了下载的功能。
SimpleExcelWrite sw new SimpleExcelWritesw.createExcelos 上面这段代码调用 SimpleExcelWrite 这个 JavaBean 生成 Excel 文件,这里之所以没有使用〈
jsp:useBean〉标签是因为在这个 JavaBean 中并没有需要设置的属性和用来获取的属性,所以用调用一般类的方法也是可以的,同样可以调用到JavaBean 中的方法。
2.
JSP 生成各种复杂数据格式的 Excel 文件 在上面的示例程序中, 数据格式是非常简单的, 仅仅只有字符串这一种格式,下面考虑这样的情形,现在需要把表 11.2 中的数据导出为 Excel 文件 JExcelApi 支持数据格式列表数据格式 浮点型 整型 布尔型 日期格式数据示例 3.1415926535 15042699 true 2007-7-15 实现这个操作比前一个例子中的要稍微麻烦一些, 需要对各种数据类型进行单独的设置,不同的数据类型需要用不同的单元格的构造方式。
生成这个 Excel的 JavaBean 具体代码如下所示。
package beans.excelimport java.io.IOExceptionimport java.io.OutputStreamimport java.text.SimpleDateFormatimport java.util.Calendarimport java.util.Dateimport jxl.Workbookimport jxl.format.Colourimport jxl.write.DateFormatsimport jxl.write.Labelimport jxl.write.NumberFormatsimport jxl.write.WritableCellFormatimport jxl.write.WritableSheetimport jxl.write.WritableWorkbookimport jxl.write.WriteExceptionimport jxl.write.Numberimport jxl.write.Booleanimport jxl.write.DateTimepublic class ComplexDataExcelWrite public void createExcelOutputStream os throws WriteExceptionIOException //创建工作薄 WritableWorkbook workbook Workbook.createWorkbookos //创建新的一页 WritableSheet sheet workbook.createSheetquotFirst Sheetquot 0 //创建要显示的具体内容 Label formate new Label0 0 quot数据格式quot sheet.addCellformate Label floats new Label1 0 quot浮点型quot sheet.addCellfloats Label integers new Label2 0 quot整型quot sheet.addCellintegers Label booleans new Label3 0 quot布尔型quot sheet.addCellbooleans Label dates new Label4 0 quot日期格式quot sheet.addCelldates Label example new Label0 1 quot数据示例quot sheet.addCellexample //浮点数据 Number number new Number1 1 3.1415926535 sheet.addCellnumber //整型数据 Number ints new Number2 1 15042699 sheet.addCellints //布尔型数据 Boolean bools new Boolean3 1 true sheet.addCellbools //日期型数据 Calendar c Calendar.getInstance Date date c.getTime WritableCellFormat cf1 newWritableCellFormatDateFormats.FORMAT1 DateTime dt new DateTime4 1 date cf1 sheet.addCelldt //把创建的内容写入到输出流中,并关闭输出流 workbook.write workbook.close os.close 这个程序的思路和前一个例子基本一样, 不同之处在于各种数据类型单元格的处理,这个在程序的注释中已经写得很清楚了。
具体不同数据类型的处理请参考上面的程序代码。
这个 JavaBean 的调用方法和上一个例子一样,只需要稍微改动一下上一个例子中的
JSP 文件(SimpleExcelWrite.
jsp)即可,所需改动的仅仅有下面两个地方:String fname quot学校专业竞争力情况quot 把上面这句中的“学校专业竞争力情况”改为“JExcelApi 支持数据格式列表”。
SimpleExcelWrite sw new SimpleExcelWrite 把 上 面 这 行 代 码 改 为 ComplexDataExcelWriteswnewComplexDataExcelWrite即可。
经过这样的改动,就可以调用上面这个JavaBean。
3.
JSP 生成复杂布局和样式的 Excel 文件 上面的示例程序只是展示了 JExcelApi 支持的各种数据类型,接下来将要展示 JExcelApi 对复杂的布局和样式的支持。
假设要把表中的数据导出为 Excel 文件 JExcelApi 支持数据类型详细说明 JExcelApi 支持数据类型详细说明数据格式 浮点型 整型 布尔型 日期格式数据示例 3.1415926535 15042699 true 2007-7-15 在表中,表格的布局发生了变化, 表头占了 5 列, 高度也明显大于其他各行,同时各单元格的样式也有了变化,采用了不同的字体类型、背景颜色。
针对这样的表格,在生成 Excel 文件的时候就要设置其布局和显示的属性。
下面就是这个JavaBean 的具体实现代码。
package beans.excelimport java.io.IOExceptionimport java.io.OutputStreamimport java.text.SimpleDateFormatimport java.util.Calendarimport java.util.Dateimport jxl.Workbookimport jxl.format.Colourimport jxl.format.UnderlineStyleimport jxl.write.DateFormatsimport jxl.write.Labelimport jxl.write.NumberFormatsimport jxl.write.WritableCellFormatimport jxl.write.WritableFontimport jxl.write.WritableSheetimport jxl.write.WritableWorkbookimport jxl.write.WriteExceptionimport jxl.write.Numberimport jxl.write.Booleanimport jxl.write.DateTimepublic class MutiStyleExcelWrite public void createExcelOutputStream os throws WriteExceptionIOException //创建工作薄 WritableWorkbook workbook Workbook.createWorkbookos //创建新的一页 WritableSheet sheet workbook.createSheetquotFirst Sheetquot 0 //构造表头 sheet.mergeCells0 0 4 0//添加合并单元格 WritableFont bold new WritableFontWritableFont.ARIAL 10WritableFont.BOLD//设置字体种类和黑体显示 WritableCellFormat titleFormate new WritableCellFormatbold titleFormate.setAlignmentjxl.format.Alignment.CENTRE//单元格中的内容水平方向居中 titleFormate.setVerticalAlignmentjxl.format.VerticalAlignment.CENTRE//单元格中的内容垂直方向居中 Label title new Label00quotJExcelApi支持数据类型详细说明quottitleFormate sheet.setRowView0600false//设置第一行的高度 sheet.addCelltitle //创建要显示的具体内容 WritableFont color new WritableFontWritableFont.ARIAL//选择字体 color.setColourColour.GOLD//设置字体颜色为金黄色 WritableCellFormat colorFormat new WritableCellFormatcolor Label formate new Label0 1 quot数据格式quotcolorFormat sheet.addCellformate Label floats new Label1 1 quot浮点型quot sheet.addCellfloats Label integers new Label2 1 quot整型quot sheet.addCellintegers Label booleans new Label3 1 quot布尔型quot sheet.addCellbooleans Label dates new Label4 1 quot日期格式quot sheet.addCelldates Label example new Label0 2 quot数据示例quotcolorFormat sheet.addCellexample //浮点数据 WritableFont underline new WritableFontWritableFont.ARIALWritableFont.DEFAULT_POINT_SIZE WritableFont.NO_BOLDfalseUnderlineStyle.SINGLE//设置下划线 WritableCellFormat greyBackground newWritableCellFormatunderline greyBackground.setBackgroundColour.GRAY_25//设置背景颜色为灰色 Number number new Number1 2 3.1415926535greyBackground sheet.addCellnumber //整型数据 WritableFont boldNumber new WritableFontWritableFont.ARIAL10 WritableFont.BOLD//设置黑体 WritableCellFormat boldNumberFomate new WritableCellFormatboldNumber Number ints new Number2 2 15042699boldNumberFomate sheet.addCellints //布尔型数据 Boolean bools new Boolean3 2 true sheet.addCellbools //日期型数据 WritableFont boldDate new WritableFontWritableFont.ARIALWritableFont.DEFAULT_POINT_SIZE WritableFont.BOLDfalseUnderlineStyle.SINGLE//设置黑体和下划线 WritableCellFormat boldDateFomate new WritableCellFormatboldDateDateFormats.FORMAT1 Calendar c Calendar.getInstance Date date c.getTime DateTime dt new DateTime4 2 date boldDateFomate sheet.addCelldt //把创建的内容写入到输出流中,并关闭输出流 workbook.write workbook.close os.close 从上面的程序中可以看出 JExcelApi 设置格式和样式的思路,如果需要天加合并单元格只需要在 Sheet 上面添加 mergeCells 即可。
而对单元格的样式进行设置的时候,只需要构造一个 WritableCellFormat 即可,在这个对象里面可以进行除字体外的各种样式设置,如果需要设置字体,在构造 WritableCellFormat 前就需要构造 WritableFont,然后把字体设置完成的 WritableFont 对象作为参数传给WritableCellFormat 即可。
下面来解释这个 Java Bean 的关键代码。
sheet.mergeCells0 0 4 0//添加合并单元格 上面这行代码向页(Sheet)里面添加一个合并单元格,这个合并单元格的区域是第一行到第五列。
其中第一个参数是起始行,第三个参数是终止列,第四个参数是终止行。
WritableFont bold new WritableFontWritableFont.ARIAL 10WritableFont.BOLD 上面这行代码构造了一个字体对象, 其中选择的字体为 ARIAL, 字号大小为10,用黑体显示。
WritableCellFormat titleFormate new WritableCellFormat bold 上面这行代码利用前面构造的字体对象生成一个单元格样式控制对象。
titleFormate.setAlignmentjxl.format.Alignment.CENTRE//单元格中的内容水平方向居中titleFormate.setVerticalAlignmentjxl.format.VerticalAlignment.CENTRE//单元格中的内容垂直方向居中 单元格样式控制对象创建以后,就可以在这个对象上进行各种样式设置。
上面的两行代码就是在前面创建的单元格样式控制对象上进行样式设置。
Label title new Label00quotJExcelApi 支 持 数 据 类 型 详 细 说 明quottitleFormate 在样式结束后只需要在构造单元格的时候选择这个单元格样式控制对象即可。
上面这行代码中的 titleFormate 就是前面已经构造并设置样式的单元格样式控制对象。
这个程序中其他样式的设置思路和这个基本相同,只是选择的具体参数不同。
读者可以仔细揣摩。
上面这个 Java Bean 的调用方法和前面两个 Excel 文件生成示例的调用方法相同,只需要把 SimpleExcelWrite.
jsp 这个
JSP 页面做如下修改即可。
String fname quot学校专业竞争力情况quot 把上面这句中的“学校专业竞争力情况”改为“JExcelApi 支持数据类型详细说明”SimpleExcelWrite sw new SimpleExcelWrite 把上面这行代码改为 MutiStyleExcelWrite swnewMutiStyleExcelWrite即可。
4.
JSP 生成带有图片的 Excel 文件 在 JExcelApi 中,生成带有图片的 Excel 文件非常方便,只需构造一个图片单元格即可。
具体构造代码如下所示。
WritableImage wi new WritableImage0050new File“resource/123.jpgquot 上面这段代码构造了一个图片单元格, 其所占区域为第一行的第一列到第五列,这里第一个参数为起始列,第二个参数为起始行,第三个参数为终.