`
妮子321
  • 浏览: 82092 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 实现 给Excel模板赋值(直接打开表格赋值或者用自定义了名称的单元格(一块区域)赋值)

阅读更多

1:需求

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

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

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

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

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

2:excel模板设置

(1)自定义单元格

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

最终所有的自定义名称

2. 页面代码

(1)web.xml

<!-- PageOffice Begin -->
	<servlet>
		<servlet-name>poserver</servlet-name>
		<servlet-class>com.zhuozhengsoft.pageoffice.poserver.Server</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/poserver.zz</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/sealsetup.exe</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/posetup.exe</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/pageoffice.js</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/jquery.min.js</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/pobstyle.css</url-pattern>
	</servlet-mapping>
	<servlet>
		<servlet-name>adminseal</servlet-name>
		<servlet-class>com.zhuozhengsoft.pageoffice.poserver.AdminSeal</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>adminseal</servlet-name>
		<url-pattern>/adminseal.zz</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>adminseal</servlet-name>
		<url-pattern>/loginseal.zz</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>adminseal</servlet-name>
		<url-pattern>/sealimage.zz</url-pattern>
	</servlet-mapping>
	<mime-mapping>
		<extension>mht</extension>
		<mime-type>message/rfc822</mime-type>
	</mime-mapping>
	<context-param>
		<param-name>adminseal-password</param-name>
		<param-value>111111</param-value>
	</context-param>
	<!-- PageOffice End -->

 (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, "张三");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>

	</head>

	<body>
		<div style="width: 1000px; height: 800px;">
		<%=poCtrl1.getHtmlCode("PageOfficeCtrl1")%>
		</div>
	</body>
</html>

(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, "张三");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>

	</head>
	<body>
		openTable填充数据后显示的效果
		<div style="width: 1000px; height: 900px;">
			<%=poCtrl1.getHtmlCode("PageOfficeCtrl1")%>
		</div>
	</body>
</html>

4:演示效果

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

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

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

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

分享到:
评论

相关推荐

    C#读取Excel单元格内容并赋值给text一个简单demo

    C#读取Excel单元格内容并赋值给text一个简单demo C#读取Excel单元格内容并赋值给text一个简单demo C#读取Excel单元格内容并赋值给text一个简单demo

    Java生成excel表格设置公式并填充数据

    Java编程调用PageOffice实现从空白的excel文件动态生成excel表格,设置公式并填充数据。 集成PageOffice不但能够实现在线编辑、保存真正的Office文档,而且还可以轻松实现Word、Excel文档的动态数据填充、格式控制和...

    LayUi数据表格自定义赋值方式

    要实现自定义赋值,我们通常需要在表格的列定义中使用`templet`属性。这个属性可以是一个HTML模板的ID,也可以是一个回调函数,用于根据数据动态生成列的HTML内容。 在使用HTML模板的方式中,我们可以在文档中定义...

    Java使用POI实现excel模板

    本篇文章将深入探讨如何使用Java和Apache POI来实现Excel模板的功能,覆盖了单个传值、单行循环、块循环以及快循环嵌套单行循环等操作。 首先,我们需要导入Apache POI的相关依赖库,如`poi-ooxml`和`poi-ooxml-...

    自定义单元格

    在iOS开发中,自定义单元格(Custom Cell)是一个常见的需求,它允许开发者根据特定的UI设计和功能需求,创建个性化的表格视图(UITableView)或集合视图(UICollectionView)中的每一行或每个单元格。本教程将通过...

    POI处理Excel,获取特定单元格后,为其右侧相邻单元格赋值(Excel签署)

    标题中的“POI处理Excel,获取特定单元格后,为其右侧相邻单元格赋值(Excel签署)”是指使用Apache POI库在Java中操作Excel文件的过程。Apache POI是一个流行的开源项目,允许开发者读写Microsoft Office格式的文件...

    java 处理Excel 带 List

    在Java编程中,处理Excel文件是一项常见的任务,特别是在数据导入导出、数据分析或者报表生成的场景下。本文将深入探讨如何使用Java来处理Excel,并特别关注如何将List对象导出为Excel文件。 首先,我们需要一个库...

    Excel 条件赋值操作程序

    在Excel中,条件赋值是一种高效的数据处理方法,它允许用户根据特定的规则或标准来自动更改单元格的值。这种功能在数据分析、财务计算、报告制作等场景中非常常见。下面将详细介绍如何进行条件赋值操作以及相关工具...

    C# 操作Excel单元格格式

    可以使用 `worksheet.Cells[1, 1] = "Excel 单元格赋值";` 方法来赋值单元格,例如将 A1 单元格的值设置为 "Excel 单元格赋值"。 五、设置字体 可以使用 `range.Font` 属性来设置字体,例如设置字体的大小、是否带...

    java代码生成excel表并下载

    本主题聚焦于“java代码生成excel表并下载”,这是一个关键的后端功能,允许用户自定义表格内容并选择下载路径。下面我们将深入探讨如何实现这一功能。 首先,Java中用于生成Excel文件的主要库是Apache POI项目。...

    jQuery实现动态给table赋值的方法示例

    本篇文章将深入探讨如何使用jQuery来动态地给HTML表格(table)赋值,通过一个具体的实例来展示相关技巧。 首先,我们需要一个基本的HTML结构,包含一个具有特定类和ID的table元素。在这个例子中,我们有一个layui...

    POI读取Excel合并单元格并储存

    在IT行业中,处理数据是日常任务之一,而Excel作为广泛使用的电子表格软件,其数据处理需求尤为常见。本文将深入探讨如何使用Java的Apache POI库来读取Excel文件,并处理其中合并单元格的数据,同时将这些数据存储到...

    Openxml 修改Excel指定单元格

    使用`SpreadsheetDocument`类,你可以打开一个现有的Excel文件。这通常涉及以下步骤: ```csharp using System.IO.Packaging; using DocumentFormat.OpenXml.Packaging; string filePath = "path_to_your_...

    java 读取excel表格 内容、图片、图片自动上传、图片上传后回调上传地址,并赋值到图片表格位置

    本示例主要涉及如何使用Java读取Excel表格的内容,包括文本数据和图片,并实现图片的自动上传以及上传成功后的回调功能,将返回的图片URL重新赋值到Excel中的对应位置。 首先,我们需要引入能够处理Excel的Java库,...

    C# 创建Excel 加Excel下拉框列,并且给下拉框动态赋值

    在本文中,我们将深入探讨如何使用C#编程语言来创建Excel文件,并且为其中的某一列设置下拉框,同时实现下拉框的动态赋值。这个过程涉及到Microsoft Office Interop库的应用,以及对Excel对象模型的理解。让我们一...

    动态给fastreport报表中的变量赋值

    在这个特定的问题中,我们要探讨的是如何在FastReport报表中动态地为变量赋值,这是一个常见的需求,尤其是在处理动态数据或者需要根据用户输入调整报告内容时。 首先,让我们理解FastReport的工作原理。FastReport...

    Excel表格任意单元格处插入页数

    以上两种方案均能实现在Excel表格的任意单元格处插入页数的功能,其中方案一通过定义“纵向页”、“横向页”、“总页”和“页眉”四个名称实现了更细致的控制。无论选择哪种方案,都需要通过定义名称的方式,利用...

    java导出excel复杂表头

    在Java开发中,导出Excel是一项常见的需求,尤其在数据报表和数据分析场景中。本示例涉及的主题是“java导出excel复杂表头”,这意味着我们要处理的不是简单的单级表头,而是包含多级或者多层次结构的表头。在描述中...

    如何对finereport报表的参数控件赋值

    在FineReport报表开发中,参数控件的动态赋值是一个常见需求,主要用于实现控件间的依赖关系,使得一个控件的值能够影响到其他控件的值。具体应用场景通常出现在报表的参数配置界面,其中当一个参数值发生变化时,...

    读取excel值替换文件内容

    使用POI API,你可以创建一个`Workbook`对象来代表Excel文件,然后通过`Sheet`对象访问工作表,再用`Row`和`Cell`对象获取具体单元格的值。例如: ```java FileInputStream fis = new FileInputStream("path_to_...

Global site tag (gtag.js) - Google Analytics