`
jiava9900
  • 浏览: 86761 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Java操作excel的综合应用(jxl)

    博客分类:
  • java
阅读更多
    根据excel模板生成excel报表文件--用于报表打印

jxl修改excel模板文件,实现动态数据分页打印

1.支持公式运算
2.支持对合并的单元格复制

package mcfeng.util.excel;import java.io.file;import java.io.ioexception;import jxl.celltype;import jxl.workbook;import jxl.format.cellformat;import jxl.read.biff.biffexception;import jxl.write.label;import jxl.write.writablecell;import jxl.write.writablesheet;import jxl.write.writableworkbook;import jxl.write.writeexception;import jxl.write.biff.rowsexceededexception;import mcfeng.util.exceldatasource;import mcfeng.util.moneyutil;import mcfeng.util.stringutil;public class exceleditbymodel {	//list中取数据	private final static string list_flag = "##";		//map中取数据	private final static string map_flag = "#&amp;";		//数字类型处理,支持公式	private final static string num_flag = "#_&amp;";		//大写金额处理	private final static string dx_flag = "##d&amp;";	public static void editexcel(int totalpage,string sourcefile, string targetfile) {		file file1 = new file(sourcefile);		file file2 = new file(targetfile);		editexcel(totalpage,file1, file2);	}	public static void editexcel(int totalpage,file sourcefile, file targetfile) {		string mycellvalue = null;		workbook wb = null;		try {			// 构造workbook(工作薄)对象			wb = workbook.getworkbook(sourcefile);		} catch (biffexception e) {			e.printstacktrace();		} catch (ioexception e) {			e.printstacktrace();		}		writableworkbook wwb = null;		try {			// 首先要使用workbook类的工厂方法创建一个可写入的工作薄(workbook)对象			wwb = workbook.createworkbook(targetfile, wb);		} catch (ioexception e) {			e.printstacktrace();		}		if (wwb != null) {			// 读取第一张工作表			// workbook的getsheet方法的参数,表示工作表在工作薄中的位置			writablesheet ws = wwb.getsheet(0);			int scale = ws.getsettings().getscalefactor();// 获取页面缩放比例						int rownum = ws.getrows();			int colnum = ws.getcolumns();						//计算出每页行数			int pagenum = rownum/totalpage;			for (int j = 0; j < rownum; j++) {				// 得到当前行的所有单元格				//计算出取数据的位置				int datanum = j/pagenum;								for (int k = 0; k < colnum; k++) {					// 对每个单元格进行循环					writablecell mywc = ws.getwritablecell(k, j);					system.out.println("mywc.gettype(): " + mywc.gettype());					if (mywc.gettype() == celltype.label) {						label l = (label) mywc;						string cellvalue = l.getcontents();						//处理后的值						string opvalue = null;												system.out.println("cellvalue: " + cellvalue);						// 处理excel单元格中#开头的字符串						if (cellvalue != null &amp;&amp; cellvalue.startswith("#")) {							if (cellvalue.startswith(list_flag)) {																if(cellvalue.startswith(dx_flag))								{									opvalue = cellvalue.replaceall(dx_flag, "");								}								else								{									opvalue = cellvalue.replaceall(list_flag, "");								}																								if (stringutil.isnumeric(opvalue)) {									mycellvalue = exceldatasource.getdata(opvalue,datanum);									if(cellvalue.startswith(dx_flag))									{										mycellvalue = moneyutil.amounttochinese(mycellvalue);									}																	}							} else if (cellvalue.startswith(map_flag)) {								opvalue = cellvalue.replaceall(map_flag, "");								mycellvalue = exceldatasource.getdata(opvalue,datanum);							}							else if (cellvalue.startswith(num_flag)) {								//支持公式运算								opvalue = cellvalue.replaceall(num_flag, "");								mycellvalue = exceldatasource.getdata(opvalue,datanum);								system.out.println("mycellvalue: " + mycellvalue);																//获取字体,重新设置								cellformat wcff = mywc.getcellformat();																jxl.write.number num = new jxl.write.number(k,j,double.valueof(mycellvalue),wcff);																								try {									ws.addcell(num);								} catch (rowsexceededexception e) {																		e.printstacktrace();								} catch (writeexception e) {																		e.printstacktrace();								}								continue;							}							l.setstring(mycellvalue);						}					}				}			}						//设置页面缩放比例			ws.getsettings().setscalefactor(scale);			try {				// 写入 excel 对象				wwb.write();				// 关闭可写入的 excel 对象				wwb.close();				// 关闭只读的 excel 对象				wb.close();			} catch (ioexception e) {				e.printstacktrace();			} catch (writeexception e) {				e.printstacktrace();			}		}	}}


生成分页模板
package mcfeng.util.excel;import java.io.file;import java.io.ioexception;import jxl.range;import jxl.workbook;import jxl.read.biff.biffexception;import jxl.write.writablecell;import jxl.write.writablesheet;import jxl.write.writableworkbook;import jxl.write.writeexception;import jxl.write.biff.rowsexceededexception;public class exceleditbymodelpage {	public static void editexceltomodel(int totalpage,string sourcefile, string targetfile) {		file file1 = new file(sourcefile);		file file2 = new file(targetfile);		editexceltomodel(totalpage, file1,file2);	}		public static void editexcelbymodelpage(int totalpage,string sourcefile,string tempfile, string targetfile) {		file file1 = new file(sourcefile);		file file2 = new file(tempfile);		file file3 = new file(targetfile);		editexcelbymodelpage(totalpage, file1,file2,file3);	}	public static void editexcelbymodelpage(int totalpage, file sourcefile,file tempfile,			file targetfile)	{		if(totalpage == 1)		{			exceleditbymodel.editexcel(totalpage, sourcefile, targetfile);			return;		}		//需要分页时,生成中间模板文件		exceleditbymodel.editexcel(totalpage,editexceltomodel(totalpage,sourcefile,tempfile), targetfile);	}		// 生成分页模板	public static file editexceltomodel(int totalpage, file sourcefile,file targetfile) {				workbook wb = null;		try {			// 构造workbook(工作薄)对象			wb = workbook.getworkbook(sourcefile);		} catch (biffexception e) {			e.printstacktrace();		} catch (ioexception e) {			e.printstacktrace();		}		writableworkbook wwb = null;		try {			// 首先要使用workbook类的工厂方法创建一个可写入的工作薄(workbook)对象			wwb = workbook.createworkbook(targetfile, wb);		} catch (ioexception e) {			e.printstacktrace();		}		if (wwb != null) {			// 读取第一张工作表			// workbook的getsheet方法的参数,表示工作表在工作薄中的位置			writablesheet ws = wwb.getsheet(0);			int scale = ws.getsettings().getscalefactor();// 获取页面缩放比例			int rownum = ws.getrows();			int colnum = ws.getcolumns();			system.out.println("rownum: " + rownum);			system.out.println("colnum: " + colnum);						//找出合并的单元格			range[] ranges = ws.getmergedcells();			for(int rnum = 0;rnum < ranges.length;rnum++)			{				system.out.println("左上行数" + ranges[rnum].gettopleft().getrow());				system.out.println("左上列数" + ranges[rnum].gettopleft().getcolumn());				system.out.println("右下行数" + ranges[rnum].getbottomright().getrow());				system.out.println("右下列数" + ranges[rnum].getbottomright().getcolumn());			}			int i = 1;			while (i < totalpage) {				for (int row = 0; row < rownum; row++) {					// 得到当前行的所有单元格					for (int col = 0; col < colnum; col++) {						// 对每个单元格进行循环						// 复制单元格						writablecell cell = ws.getwritablecell(col, row)								.copyto(col, row + (rownum*i));						try {							ws.addcell(cell);						} catch (rowsexceededexception e) {							e.printstacktrace();						} catch (writeexception e) {							e.printstacktrace();						}					}				}								//按照模板合并单元格				for(int rnum = 0;rnum < ranges.length;rnum++)				{					int lcol = ranges[rnum].gettopleft().getcolumn();					int lrow = ranges[rnum].gettopleft().getrow() + (rownum*i);					int rcol = ranges[rnum].getbottomright().getcolumn();					int rrow = ranges[rnum].getbottomright().getrow() + (rownum*i);										try {						ws.mergecells(lcol, lrow, rcol, rrow);					} catch (rowsexceededexception e) {												e.printstacktrace();					} catch (writeexception e) {												e.printstacktrace();					}									}				i++;			}			//设置页面缩放比例			ws.getsettings().setscalefactor(scale);		}		try {			// 写入 excel 对象			wwb.write();			// 关闭可写入的 excel 对象			wwb.close();			// 关闭只读的 excel 对象			wb.close();		} catch (ioexception e) {			e.printstacktrace();		} catch (writeexception e) {			e.printstacktrace();		}				return targetfile;	}}
 
0
1
分享到:
评论

相关推荐

    POI与JXL的实战性能对比

    在日常工作中,尤其是在处理Excel文件时,我们通常会面临选择合适的Java库来完成任务的问题。JXL和POI是两个广泛使用的库,它们各有优势和局限性。 **JXL(JExcel API)** 是一个较早出现的库,主要适用于处理早期...

    jxl用于读取Excel的Java类(个人总结综合教程,适合新入门的朋友阅读)

    ### jxl库在Java中用于读取Excel的关键知识点解析 #### 一、jxl库简介与功能 jxl是Java Excel API的一个实现,主要用于...通过实践这些代码片段,你可以更深入地理解如何利用jxl库在Java应用中高效地操作Excel数据。

    java与jxl、log4j综合运用例子

    这个综合运用例子对于学习如何在实际项目中结合使用Java、JXL和Log4j非常有帮助。通过实践,开发者可以更好地理解这些工具的功能和它们在协同工作时的潜力。同时,这样的例子也可以作为模板,帮助其他开发者快速构建...

    struts2 poi,jxl向excel表中插入记录源代码

    在早期的Java应用中,JXL是常见的选择,不过随着POI的发展,现在更多地被用于复杂的Excel操作。 这个项目的核心功能是允许用户通过前端界面提交数据,然后这些数据会被Struts2的Action处理,并使用POI或JXL库写入到...

    java导入导出excel(自己的例子)

    综合以上,通过Apache POI和JExcelAPI,我们可以方便地在Java应用程序中处理Excel文件的导入和导出。同时,结合Apache Commons FileUpload,我们可以实现文件上传功能,从而让用户上传Excel文件供程序进一步处理。...

    很好用的jxl.jar

    jxl不仅支持基本的读写操作,还包括单元格样式设置、公式处理、图表操作等特性,使得Java开发者无需直接操作Excel应用程序,就能在程序中处理Excel数据。 然而,压缩包子文件的文件名称列表包含的是:"jquery-ui.js...

    java读xls文件成shell脚本

    Java中处理Excel文件通常使用第三方库,如Apache POI或jxl。这里提到的`jxl.jar`就是jxl库,它允许我们读取、写入和修改Excel文件。jxl库支持.xls格式,即Excel 97-2007的文件格式。 2. **jxl库的使用**: - **导...

    Java实训方案之操作Execel表格.docx

    - 掌握jxl操作Excel文件的基本原理。 - 掌握如何在Excel文件中写入数据。 - 掌握如何从Excel文件中读取数据。 这些目标旨在使学生能够独立完成简单的Excel文件操作任务,并为进一步学习更高级的数据处理技巧打下...

    Java_Web开发实战1200例第1卷.part3

    21.1 应用JXL组件操作Excel 776 21.2 应用POI组件操作Excel 807 第22章 报表与打印 829 22.1 Web打印 830 22.2 利用Word打印报表 833 22.3 利用Excel打印报表 838 22.4 应用WebBrowser+CSS套打邮寄 22.5 打印库存...

    Java_Web开发实战1200例第1卷.part2

    21.1 应用JXL组件操作Excel 776 21.2 应用POI组件操作Excel 807 第22章 报表与打印 829 22.1 Web打印 830 22.2 利用Word打印报表 833 22.3 利用Excel打印报表 838 22.4 应用WebBrowser+CSS套打邮寄 22.5 打印库存...

    网上银行系统Struts+hibernate+jxl

    再者,jxl是一个用于读写Excel文件的Java库,它在本项目中被用来实现工资代发功能。在银行系统中,批量处理员工工资发放是常见的业务需求,jxl库允许程序动态生成或读取Excel工作簿,创建工资表,自动计算各项福利,...

    jxls需要的jar包.rar

    通过这些库,开发者可以方便地在Java应用程序中进行Excel数据的导入、导出和复杂操作,提高了工作效率并降低了与Excel交互的复杂性。这些库的使用不仅简化了代码,还使得项目更易于维护和扩展。

    非常经典java求职简历三套含项目介绍.docx

    开发者利用 Struts、Spring 和 Hibernate 实现了系统的业务逻辑,同时利用 Jxl 进行 Excel 操作,增强了系统的功能。 - **成都敬业房产公司会员管理系统**:这个系统分为前台和后台,开发者使用了类似的技术栈,...

    企业信息管理系统

    总的来说,企业信息管理系统是一个集成了多种先进技术和工具的综合性平台,它利用JSP和Java的强大功能,结合Ajax提高交互性,通过javamail、DisplayTag、jxl和poi处理数据展示和导出,以及生成定制的Word报告,以...

    随机点名小系统

    综合以上,这个随机点名小系统是一个集成了Java编程、数据库操作、数据处理和用户友好界面的综合应用,它展示了Java在教育领域中的实际应用。通过理解这些知识点,不仅可以了解该系统的运作方式,也能为类似项目的...

    POI打印全面经典资料.zip

    这个"POI打印全面经典资料.zip"压缩包显然包含了一系列关于如何使用POI库进行Excel操作的重要资源,包括JXL API和POI API的文档、教程以及一些综合性的POI使用案例。以下是对这些知识点的详细说明: 1. **JXL API**...

    客户信息管理系统

    在功能实现上,“导出信息表”功能允许用户将客户信息导出为文件,这可能是通过读取数据库中的数据,然后利用jxl-2.6.12.jar库将数据写入Excel文件,方便用户进行数据分析或备份。"修改"和"添加"功能则涉及到数据库...

Global site tag (gtag.js) - Google Analytics