第19章. 微软的Excel 电子表格应用程序支持
Seam也支持微软的Excel ?电子表格应用程序的电子表格生成,通过卓越的JExcelAPI库。生成的文档是与微软的Excel ?电子表格应用程序95, 97, 2000, XP and 2003版兼容的。 目前库功能的一个有限子集被暴露,但是最终目标是能做库允许的任何事情。有关其能力和局限性更多的信息请参考JExcelAPI文档
19.1. 微软的Excel ?电子表格应用程序支持
微软的Excel ?电子表格应用程序jboss-seam-excel.jar。这个JAR包含微软的Excel ?电子表格应用程序JSF控件, 其常被用来构建可以渲染文档的视窗,以及DocumentStore组件,其提供渲染的文档给用户。 为了包括微软的Excel ?电子表格应用程序支持在你的应用程序中, 连同jxl.jar文件 和jboss-seam-excel.jar文件包含在你的WEB-INF/lib目录中。此别,你需要在你的web.xml文件中配置DocumentStore servlet 。
微软的Excel ?电子表格应用程序Seam模块需要作为视窗技术的Facelets的使用。还加上,它需要seam-ui包的使用。
examples/excel项目在实践中包含了一个微软的Excel ?电子表格应用程序支持例子。它演示了正确地部署包,并且也显示了暴露的功能。
支持其它类的微软的Excel ?电子表格应用程序的电子表格API的自定义模块变得非常容易。实现工作簿接口,并在components.xml中注册。
<excel:excelFactory>
<property name=”implementations”>
<key>myExcelExporter</key>
<value>my.excel.exporter.ExcelExport</value>
</property>
</excel:excelFactory>
并用组件标签注册excel命名空间
xmlns:excel=http://jboss.com/products/seam/excel
然后,设置UIWorkbook类型到myExcelExporter ,那么你自己的输入器就会被使用。默认是”jxl”,但使用类型”csv”,增加了对CSV(Comma Separated value)的支持。
看章节18.6 “配置iText”有关怎么配置文档servlet支持.xls文档的信息。
如果你在IE下(尤其对https)访问生成的文件有问题,确定你在浏览器中没有使用了严格的约束(看http://www.nwnetworks.com/iezones.htm/),在web.xml中也没有太严格的安全约束,或者两者的组合。
19.2. 创建一个简单的工作薄
工作表支持的基本用法是简单; 它使用了熟悉的<h:dataTable>,并且你能绑定一个List, Set, Map, Array或者DataModel。
<e:workbook xmlns:e=”http://jboss.com/products/seam/excel”>
<e:worksheet>
<e:cell column=”0” row=”0” value=”Hello world!”/>
</e:worksheet>
</e:workbook>
这是非常无用的,所以让我们看一个更通用的案例:
<e:workbook xmlns:e=”http://jboss.com/products/seam/excel”>
<e:worksheet value=”#{data}” var=”item”>
<e:column>
<e:cell value=”#{item.value}”/>
</e:column>
</e:worksheet>
</e:workbook>
首先我们有一个顶级的工作簿元素,它作为容器提供,并且没有任何属性。 子元素工作表有两个属性; value=”#{data}” 是EL绑定到数据, var=”item” 是当前项目的名字。嵌套在工作表内的是一个单列,并且它内部的单元最终绑定了在当前迭代项目内的数据。
这就是你知道得开始转储你的数据到工作表的全部了。
工作簿是工作表和样式表链接的顶层父类。
<e:workbook>
属性
· type —使用的输出模块定义。其值是字符串,可以是"jxl" or "csv"之一。默认是"jxl"。
· templateURI —一个模板,应使用来作为工作表的基础,值是一个字符串(URL)。
· arrayGrowSize —内存数量,通过它增加分配来存储工作簿数据的内存数量。对于在一个WAS内部读取许多小工作簿的进程,减少默认大小可能是有必要的,默认值是一兆字节。值是一个数(字节)。
· autoFilterDisabled —自动过滤将禁止吗?值为一个布尔值。
· cellValidationDisabled —单元格校验将忽略吗?值为一个布尔值。
· characterSet —字符集。这只在电子表格读取时使用,在写入时无效。值是一个字符串(字符集编码)。
· drawingsDisabled —制图将禁止吗?值为一个布尔值。
· excelDisplayLanguage —语言,产生的文件显示使用。值是一个字符串(两个字符ISO 3166国家代码)。
· excelRegionalSettings —产生的excel文件的区域设置值是一个字符串(两个字符ISO 3166国家代码)。
· formulaAdjust —公式将调整吗?值是一个布尔值。
· gcDisabled —垃圾回收将禁止吗?值是一个布尔值。
· ignoreBlanks —忽略空格吗?值是一个布尔值。
· initialFileSize —在读取工作表时,分配来存储工作簿数据的初始内存数量。对于在一个WAS内部读取许多小工作簿的进程,减少默认大小可能是有必要的,默认值是五兆字节。值是一个数(字节)。
· locale —使用的地区,通过JExcelApi产生电子表格。涉及到产生的excel文件的语言和区域时,设置此值是无效的。值是一个字符串。
· mergedCellCheckingDisabled —合并单元格检查将禁止吗?值是一个布尔值。
· namesDisabled —处理的名字将禁止吗?值是一个布尔值。
· propertySets —所有属性集随工作被拷贝将启用(比如宏)吗?放弃启用这个功能会导致JXL处理使用更多的内存。值是一个布尔值。
· rationalization —在写下表之前,单元格格式将被合理化吗?值是一个布尔值。默认为true。
· supressWarnings —警告将被抑制吗? 由于在登录版2.4的改变,现在,这会对跨越JVM(依赖于使用的注册器的类型)行为设置警告。值是一个布尔值
· temporaryFileDuringWriteDirectory —与useTemporaryFileDuringWrite 设置联合使用来设置临时对象目录。此值可以为空,在这种情况,常规系统使用默认目录代替。值是一个字符串(临时文件将写入的目录)
· useTemporaryFileDuringWrite —在产生工作簿期间临时文件将被使用。如果没有使用,工作簿会完全运行在内存。设置这个标志涉及到内存使用和性能之间的权衡评估。值是一个布尔值。
· workbookProtected —工作簿将被保护吗?值是一个布尔值。
· filename —用来下载的文件名。值是一个字符串。如果你映射DocumentServlet到一些模板,此文件的扩展名也必须匹配,请不要这样。
· exportKey —一个key,根据它在事件作用域中存储结果数据到一个DocumentData对象。
子元素
· <e:link/> —零或多个样式表链接。 (见章节Section 19.14.1, “样式表链接” )。
· <e:worksheet/> —零或多个工作簿。(见章节 19.4, “工作簿” )。
Facets
· 无
<e:workbook> <e:worksheet> <e:cell value="Hello World" row="0" column="0"/> </e:worksheet> <e:workbook>定义用一个工作表定义一个工作簿,并且一个问候名放在A1单元。
工作表是工作簿的孩子,又是列的父亲,并且它们也可以包含工作表命令明确地设置单元、公式、图象和超链接。它们是构成工作簿的页面。
<e:worksheet>
· value —一个返回数据的EL表达式。值是一个字符串。这个表达式的目的是审查一个可迭代。注意,如果目标是一个映射,迭代是越过Map.Entry entrySet()执行, 所经在你的引用中你应该使用一个.key或 .value到目标 。
· var —当前行的迭代器变量名,稍后可以在单元格值属性中引用。值是一个字符串。
· name —工作表名。值是一个字符串。默认成Sheet#,这儿#是该工作表的索引。如果给定的工作表名存在,这个表被选定。这可以用来合并几个数据集到单一的工作表,只要为它们定义同样的名字就可以了(使用startRow 和 startCol确保它们不占据同样的空间)。
· startRow —定义数据的开始行。值为数字。用来设置数据在与左上角相比较的其它地方(如果单一工作表有多个数据集,尤其有用)。默认值为0。
· startColumn —定义数据的开始列。值为数字。用来设置数据在与左上角相比较的其它地方(如果单一工作表有多个数据集,尤其有用)。默认值为0。
· automaticFormulaCalculation —公式将要自动计算吗?值为一个布尔值。
· bottomMargin —下边距。值为数字(inches)。
· copies —复制的份数。值为数字。
· defaultColumnWidth —默认的列宽。值为数字(字符*256)。
· defaultRowHeight —默认行高。值为数字(点的1/20ths)
· displayZeroValues —零值将要显示吗?值为布尔值。
· fitHeight —工作表将要被打印到页面的纵向数。值为数字。
· fitToPages —打印将符合页面吗? 值为布尔。
· fitWidth —工作表将要被打印到页面的横向数。值为数字。
· footerMargin —所有页脚的边距。值为数字(inches)。
· headerMargin —所有页眉的边距。值为数字(inches)。
· hidden —工作表将要被隐藏吗?值为布尔。
· horizontalCentre —工作表将要被水平居中吗?值为布尔。
· horizontalFreeze —行所在的边被水平冻结吗?值为数字。
· horizontalPrintResolution —水平打印的解析度。值为数字。
· leftMargin —左边距. 值为数字(inches)。
· normalMagnification —标准放大系数(不放大或比例系数)值为数字(百分比)。
· orientation —打印这个工作表的纸的方向。值是字符“landscape”或“portrait”(横或纵)。
· pageBreakPreviewMagnification —分页预览的放大系数(不放大或比例系数). 值为数字(百分比)。
· pageBreakPreviewMode —用预览方式显示页面?值为布尔。.
· pageStart —开始打印的页面数。值为数字。
· paperSize —打印此页使用的纸张大小。值是字符"a4", "a3", "letter", "legal" 等之一(见 jxl.format.PaperSize ).
· password —工作表的密码。值为字符。
· passwordHash —密码散列- 仅用在复制工作表时。值为字符。
· printGridLines —将要打印网格线吗?值为布尔。
· printHeaders —将要打印页眉吗? 值为布尔。
· sheetProtected —将工作表保护吗(read-only只读)? (值为布尔。
· recalculateFormulasBeforeSave —在工作表被保存时将要重计算公式吗?值为布尔。假
· rightMargin —右边距. 值为数字(inches)。
· scaleFactor —用来打印此表时的放大系数。值为数字(百分比)。
· selected —在工作簿打开时,将要选此工作表吗?值为布尔。
· showGridLines —将要显示网格线吗?值为布尔。
· topMargin —上边距。值为数字(inches)。
· verticalCentre —垂直居中吗?值为布尔。
· verticalFreeze —行所在的边被垂直冻结吗?值为数字。
· verticalPrintResolution —垂直打印的解析度。值为数字。值为数字。
· zoomFactor —缩放系数。不要混淆缩放系数(相对屏幕视图)与比例系数()。Do not confuse zoom factor (which relates to the on screen view) with scale factor (它指打印的比例系数). 值是数字((percentage)
子元素
· <e:printArea/> —定义的零个或多个打印区域。(见章节19.11, “打印区和标题” )。
· <e:printTitle/> —定义的零个或多个打印标题(见章节19.11, “打印区和标题” )。
· <e:headerFooter/> —定义的零个或多个页眉/页脚 (见章节 19.10, “页眉和页脚” )。.
· 零个或多个工作表命令 (见章节 19.12, “工作表命令” ).
Facets
· header—会被放在数据块顶部的内容,在列标题的上面。 (如果有的话)
· footer—会被放在数据块底部的内容,在列页脚的下面。 (如果有的话)
<e:workbook> <e:worksheet name="foo" startColumn="1" startRow="1"> <e:column value="#{personList}" var="person"> <f:facet name="header"> <e:cell value="Last name"/> </f:facet> <e:cell value="#{person.lastName}"/> </e:column> </e:worksheet> <e:workbook>用名字 "foo"定义一个工作表, 开始在B2。
列是工作表的子元素,又是单元格、图象、公式和超链接的父元素。它们是控制工作表数据迭代的结构。格式见章节 19.14.5, “列设置”。
<e:column>
属性
· 无
子元素
· <e:cell/> —零或多个单元格(见章节19.6, “单元格” ).
· <e:formula/> —零或多个公式(见章节 19.7, “公式” ).
· <e:image/> —零或多个图象(见章节19.8, “图象” ).
· <e:hyperLink/> —零或多个超链接(见章节19.9, “超链接” ).
Facets
· header —这个 facet可以包含一个<e:cell> , <e:formula> , <e:image> 或r <e:hyperLink> ,会被用来作为列的标题。
· footer —这个 facet可以包含一个<e:cell> , <e:formula> , <e:image> 或 <e:hyperLink> ,会被用来作为列页脚。
<e:workbook> <e:worksheet> <e:column value="#{personList}" var="person"> <f:facet name="header"> <e:cell value="Last name"/> </f:facet> <e:cell value="#{person.lastName}"/> </e:column> </e:worksheet> <e:workbook>用一个标题和一个迭代输出定义一个列。
单元格嵌套在列的里面(为迭代)或在工作表的内部(为使用column或row的属性直接布置),且负责值的输入(但通常包括数据表的var属性的EL表达式,并且它们可以包含字体或其它格式和预定义模板)。
<e:cell>
属性
· column —列,用来放置单元格的地方。默认的是内部计数器。值为数字。注意,值是基于0的。
· row —行,用来放置单元格的地方。默认的是内部计数器。值为数字。注意,值是基于0的。
·
相关资源:中文版Excel.2007公式与函数应用宝典 2/2