博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 实现 给Excel模板赋值(直接打开表格赋值或者用自定义了名称的单元格(一块区域)赋值)...
阅读量:6854 次
发布时间:2019-06-26

本文共 5395 字,大约阅读时间需要 17 分钟。

hot3.png

1:需求

直接打开表格填充数据到模板后的效果可能出现表格重叠的问题

用自定义名称填充数据到模板后表格互不影响

Excel自身有一个“定义名称”的功能,

(1)可以给任意的单元格定义一个名称,比如定义某个单元格的名称为:testA1,如何给这个名称为“testA1”的单元格赋值。

(2)可以给选中的一块区域(在PageOffice的概念里称这块区域为一个Table)定义一个名称,比如定义区域“B4:F13”的名称为:report,如何给这个名称为“report”的Table赋值。

2:excel模板设置

(1)自定义单元格

52eb2c2a563bf8bff7d5e8205ae5278f164.jpg

(2)自定义一块区域(表格)

5363e810a0df2bc7acd1629944b7b02a79c.jpg

最终所有的自定义名称

9c85e96659c3fcb99a4281e09aca79174c1.jpg

2. 页面代码

(1)web.xml

poserver
com.zhuozhengsoft.pageoffice.poserver.Server
poserver
/poserver.zz
poserver
/sealsetup.exe
poserver
/posetup.exe
poserver
/pageoffice.js
poserver
/jquery.min.js
poserver
/pobstyle.css
adminseal
com.zhuozhengsoft.pageoffice.poserver.AdminSeal
adminseal
/adminseal.zz
adminseal
/loginseal.zz
adminseal
/sealimage.zz
mht
message/rfc822
adminseal-password
111111

 (2):自定义名称的ExcelFill.jsp页面

<%@ page language="java"	import="java.util.*,com.zhuozhengsoft.pageoffice.*"	pageEncoding="utf-8"%><%@page import="com.zhuozhengsoft.pageoffice.excelwriter.*"%><%@page import="java.awt.Color"%><%@page import="java.text.*"%><%	//设置PageOfficeCtrl控件的服务页面	PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);	poCtrl1.setServerPage(request.getContextPath()+"/poserver.zz"); //此行必须	poCtrl1.setCaption("简单的给Excel赋值");	//定义Workbook对象	Workbook workBook = new Workbook();	//定义Sheet对象,"Sheet1"是打开的Excel表单的名称	Sheet sheet = workBook.openSheet("Sheet1");	sheet.openCellByDefinedName("testA1").setValue("testA1");	sheet.openCellByDefinedName("testB1").setValue("testB1");//定义Table对象,参数“report1”为Excel中定义的名称,“4”为名称指定区域的行数,	//“5”为名称指定区域的列数,“true”表示表格会按实际数据行数自动扩展	Table table = sheet.openTableByDefinedName("report", 4, 5, true);		int rowCount = 12;//假设将要自动填充数据的实际记录条数为12 	for(int i = 1; i <= rowCount; i++){		//给区域中的单元格赋值	    table.getDataFields().get(0).setValue( i + "月");	    table.getDataFields().get(1).setValue("100");	    table.getDataFields().get(2).setValue("120");	    table.getDataFields().get(3).setValue("500");	    table.getDataFields().get(4).setValue("120%");	    table.nextRow();//循环下一行,此行必须	}    //关闭table对象    table.close();    	//定义Table对象	Table table2 = sheet.openTableByDefinedName("report2", 4, 5, true);	int rowCount2 = 4;//假设将要自动填充数据的实际记录条数为12 	for(int i = 1; i <= rowCount2; i++){		//给区域中的单元格赋值	    table2.getDataFields().get(0).setValue( i + "季度");	    table2.getDataFields().get(1).setValue("300");	    table2.getDataFields().get(2).setValue("300");	    table2.getDataFields().get(3).setValue("300");	    table2.getDataFields().get(4).setValue("100%");	    table2.nextRow();	}    //关闭table对象    table2.close();		poCtrl1.setWriter(workBook);		//隐藏菜单栏	poCtrl1.setMenubar(false);		poCtrl1.setSaveDataPage("SaveData.jsp");	poCtrl1.addCustomToolButton("保存", "Save()", 1);	//打开Word文件	poCtrl1.webOpen("doc/test.xlsx", OpenModeType.xlsNormalEdit, "张三");%>					
<%=poCtrl1.getHtmlCode("PageOfficeCtrl1")%>

(3)直接打开表格的jsp代码 ExcelFill1.jsp

<%@ page language="java"	import="java.util.*,com.zhuozhengsoft.pageoffice.*"	pageEncoding="utf-8"%><%@page import="com.zhuozhengsoft.pageoffice.excelwriter.*"%><%@page import="java.awt.Color"%><%@page import="java.text.*"%><%	//设置PageOfficeCtrl控件的服务页面	PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);	poCtrl1.setServerPage(request.getContextPath()+"/poserver.zz"); //此行必须	poCtrl1.setCaption("简单的给Excel赋值");		//定义Workbook对象	Workbook workBook = new Workbook();	//定义Sheet对象,"Sheet1"是打开的Excel表单的名称	Sheet sheet = workBook.openSheet("Sheet1");		//定义Table对象	Table table = sheet.openTable("B4:F11");		int rowCount = 12;//假设将要自动填充数据的实际记录条数为12 	for(int i = 1; i <= rowCount; i++){		//给区域中的单元格赋值	    table.getDataFields().get(0).setValue( i + "月");	    table.getDataFields().get(1).setValue("100");	    table.getDataFields().get(2).setValue("120");	    table.getDataFields().get(3).setValue("500");	    table.getDataFields().get(4).setValue("120%");	    table.nextRow();//循环下一行,此行必须	}    //关闭table对象    table.close();    	//定义Table对象	Table table2 = sheet.openTable("B13:F16");	int rowCount2 = 4;//假设将要自动填充数据的实际记录条数为4	for(int i = 1; i <= rowCount2; i++){		//给区域中的单元格赋值	    table2.getDataFields().get(0).setValue( i + "季度");	    table2.getDataFields().get(1).setValue("300");	    table2.getDataFields().get(2).setValue("300");	    table2.getDataFields().get(3).setValue("300");	    table2.getDataFields().get(4).setValue("100%");	    table2.nextRow();	}    //关闭table对象    table2.close();		poCtrl1.setWriter(workBook);		//隐藏菜单栏	poCtrl1.setMenubar(false);	//打开Word文件	poCtrl1.webOpen("doc/test.xlsx", OpenModeType.xlsNormalEdit, "张三");%>					openTable填充数据后显示的效果		
<%=poCtrl1.getHtmlCode("PageOfficeCtrl1")%>

4:演示效果

(1)用自定义名称的演示效果

ea63139f107354ce3f22c975bf50a1b983a.jpg

(2)直接打开表格的演示效果

520e1599159790333a251082fa7322e73b5.jpg

两次演示效果比较. 直接打开表格的效果发现少了 10, 11, 12 , 三个月份的数据.但是用自定义名称会自动分开. 不会出现重叠的现象

5: 本示例建议使用ie 浏览器. 如果要用谷歌火狐等浏览器. 请访问 http://www.zhuozhengsoft.com/dowm/  下载完整的试用程序包. 具体参考里面的Samples示例

转载于:https://my.oschina.net/u/3850288/blog/2246974

你可能感兴趣的文章