针对excel文件生成的类是:com.zhuozhengsoft.pageoffice.excelwriter
请参考PageOffice开发包里Samples4示例:
三、8、完全编程实现动态生成Excel文件(专业版、企业版)
一个完全用程序生成预算表的demo的源代码,演示了针对Excel文档生成所提供的大部分接口。
Border | Border 类,代表Excel中定义的边框对象。 |
Cell | Cell 类,代表Excel中定义的单元格对象,用来填充单元格数据及控制单元格格式。 |
DataField | DataField 类,代表PageOffice中定义的Excel表格对象里的字段对象。 |
DataFieldCollection | DataField 字段集合,代表 com.zhuozhengsoft.pageoffice.excelwriter.Table 中当前记录行。 |
Font | Font 类,代表Excel中定义的字体对象。 |
Sheet | Sheet 类,代表Excel中定义的工作表对象。 |
Table | Table 类,代表PageOffice中定义的Excel表格对象。 |
Workbook | Workbook 类代表一个Excel文档,用来动态输出数据到Excel文档并且控制其表格格式及编辑功能。 |
Workbook wb = new Workbook();
// 设置背景
Table backGroundTable = wb.openSheet("Sheet1").openTable("A1:P200");
backGroundTable.getBorder().setLineColor(Color.white);
// 设置标题
wb.openSheet("Sheet1").openTable("A1:H2").merge();//合并单元格
//打开表格并设置表格的行高
wb.openSheet("Sheet1").openTable("A1:H2").setRowHeight(30);
Cell A1 = wb.openSheet("Sheet1").openCell("A1");
//设置单元格的水平对齐方式
A1.setHorizontalAlignment(XlHAlign.xlHAlignCenter);
//设置单元格的垂直对齐方式
A1.setVerticalAlignment(XlVAlign.xlVAlignCenter);
//设置单元格的前景色
A1.setForeColor(new Color(0, 128, 128));
//给单元格赋值
A1.setValue("出差开支预算");
//设置字体:加粗、大小
wb.openSheet("Sheet1").openTable("A1:A1").getFont().setBold(true);
wb.openSheet("Sheet1").openTable("A1:A1").getFont().setSize(25);
// 画表头
Border C4Border = wb.openSheet("Sheet1").openTable("C4:C4").getBorder();
//设置表格边框的宽度、颜色
C4Border.setWeight(XlBorderWeight.xlThick);
C4Border.setLineColor(Color.yellow);
Table titleTable = wb.openSheet("Sheet1").openTable("B4:H5");
//设置表格边框的样式、宽度、颜色
titleTable.getBorder().setBorderType(XlBorderType.xlAllEdges);
titleTable.getBorder().setWeight(XlBorderWeight.xlThick);
titleTable.getBorder().setLineColor(new Color(0, 128, 128));
// 画表体
Table bodyTable = wb.openSheet("Sheet1").openTable("B6:H15");
bodyTable.getBorder().setLineColor(Color.gray);
bodyTable.getBorder().setWeight(XlBorderWeight.xlHairline);
Border B7Border = wb.openSheet("Sheet1").openTable("B7:B7").getBorder();
B7Border.setLineColor(Color.white);
Border B9Border = wb.openSheet("Sheet1").openTable("B9:B9").getBorder();
B9Border.setBorderType(XlBorderType.xlBottomEdge);
B9Border.setLineColor(Color.white);
Border C6C15BorderLeft = wb.openSheet("Sheet1").openTable("C6:C15").getBorder();
C6C15BorderLeft.setLineColor(Color.white);
C6C15BorderLeft.setBorderType(XlBorderType.xlLeftEdge);
Border C6C15BorderRight = wb.openSheet("Sheet1").openTable("C6:C15").getBorder();
C6C15BorderRight.setLineColor(Color.yellow);
C6C15BorderRight.setLineStyle(XlBorderLineStyle.xlDot);
C6C15BorderRight.setBorderType(XlBorderType.xlRightEdge);
Border E6E15Border = wb.openSheet("Sheet1").openTable("E6:E15").getBorder();
E6E15Border.setLineStyle(XlBorderLineStyle.xlDot);
E6E15Border.setBorderType(XlBorderType.xlAllEdges);
E6E15Border.setLineColor(Color.yellow);
Border G6G15BorderRight = wb.openSheet("Sheet1").openTable("G6:G15").getBorder();
G6G15BorderRight.setBorderType(XlBorderType.xlRightEdge);
G6G15BorderRight.setLineColor(Color.white);
Border G6G15BorderLeft = wb.openSheet("Sheet1").openTable("G6:G15").getBorder();
G6G15BorderLeft.setLineStyle(XlBorderLineStyle.xlDot);
G6G15BorderLeft.setBorderType(XlBorderType.xlLeftEdge);
G6G15BorderLeft.setLineColor(Color.yellow);
Table bodyTable2 = wb.openSheet("Sheet1").openTable("B6:H15");
bodyTable2.getBorder().setWeight(XlBorderWeight.xlThick);
bodyTable2.getBorder().setLineColor(new Color(0, 128, 128));
bodyTable2.getBorder().setBorderType(XlBorderType.xlAllEdges);
// 画表尾
Border H16H17Border = wb.openSheet("Sheet1").openTable("H16:H17").getBorder();
H16H17Border.setLineColor(new Color(204, 255, 204));
Border E16G17Border = wb.openSheet("Sheet1").openTable("E16:G17").getBorder();
E16G17Border.setLineColor(new Color(0, 128, 128));
Table footTable = wb.openSheet("Sheet1").openTable("B16:H17");
footTable.getBorder().setWeight(XlBorderWeight.xlThick);
footTable.getBorder().setLineColor(new Color(0, 128, 128));
footTable.getBorder().setBorderType(XlBorderType.xlAllEdges);
// 设置行高列宽
wb.openSheet("Sheet1").openTable("A1:A1").setColumnWidth(1);
wb.openSheet("Sheet1").openTable("B1:B1").setColumnWidth(20);
wb.openSheet("Sheet1").openTable("C1:C1").setColumnWidth(15);
wb.openSheet("Sheet1").openTable("D1:D1").setColumnWidth(10);
wb.openSheet("Sheet1").openTable("E1:E1").setColumnWidth(8);
wb.openSheet("Sheet1").openTable("F1:F1").setColumnWidth(3);
wb.openSheet("Sheet1").openTable("G1:G1").setColumnWidth(12);
wb.openSheet("Sheet1").openTable("H1:H1").setColumnWidth(20);
wb.openSheet("Sheet1").openTable("A16:A16").setRowHeight(20);
wb.openSheet("Sheet1").openTable("A17:A17").setRowHeight(20);
// 设置表格中字体大小为10
for (int i = 0; i < 12; i++) {//excel表格行号
for (int j = 0; j < 7; j++) {//excel表格列号
wb.openSheet("Sheet1").openCellRC(4 + i, 2 + j).getFont().setSize(10);
}
}
// 填充单元格背景颜色
for (int i = 0; i < 10; i++) {
wb.openSheet("Sheet1").openCell("H" + (6 + i)).setBackColor(new Color(255, 255, 153));
}
wb.openSheet("Sheet1").openCell("E16").setBackColor(new Color(0, 128, 128));
wb.openSheet("Sheet1").openCell("F16").setBackColor(new Color(0, 128, 128));
wb.openSheet("Sheet1").openCell("G16").setBackColor(new Color(0, 128, 128));
wb.openSheet("Sheet1").openCell("E17").setBackColor(new Color(0, 128, 128));
wb.openSheet("Sheet1").openCell("F17").setBackColor(new Color(0, 128, 128));
wb.openSheet("Sheet1").openCell("G17").setBackColor(new Color(0, 128, 128));
wb.openSheet("Sheet1").openCell("H16").setBackColor(new Color(204, 255, 204));
wb.openSheet("Sheet1").openCell("H17").setBackColor(new Color(204, 255, 204));
//填充单元格文本和公式
Cell B4 = wb.openSheet("Sheet1").openCell("B4");
B4.getFont().setBold(true);
B4.setValue("出差开支预算");
Cell H5 = wb.openSheet("Sheet1").openCell("H5");
H5.getFont().setBold(true);
H5.setValue("总计");
H5.setHorizontalAlignment(XlHAlign.xlHAlignCenter);
Cell B6 = wb.openSheet("Sheet1").openCell("B6");
B6.getFont().setBold(true);
B6.setValue("飞机票价");
Cell B9 = wb.openSheet("Sheet1").openCell("B9");
B9.getFont().setBold(true);
B9.setValue("酒店");
Cell B11 = wb.openSheet("Sheet1").openCell("B11");
B11.getFont().setBold(true);
B11.setValue("餐饮");
Cell B12 = wb.openSheet("Sheet1").openCell("B12");
B12.getFont().setBold(true);
B12.setValue("交通费用");
Cell B13 = wb.openSheet("Sheet1").openCell("B13");
B13.getFont().setBold(true);
B13.setValue("休闲娱乐");
Cell B14 = wb.openSheet("Sheet1").openCell("B14");
B14.getFont().setBold(true);
B14.setValue("礼品");
Cell B15 = wb.openSheet("Sheet1").openCell("B15");
B15.getFont().setBold(true);
B15.getFont().setSize(10);
B15.setValue("其他费用");
wb.openSheet("Sheet1").openCell("C6").setValue("机票单价(往)");
wb.openSheet("Sheet1").openCell("C7").setValue("机票单价(返)");
wb.openSheet("Sheet1").openCell("C8").setValue("其他");
wb.openSheet("Sheet1").openCell("C9").setValue("每晚费用");
wb.openSheet("Sheet1").openCell("C10").setValue("其他");
wb.openSheet("Sheet1").openCell("C11").setValue("每天费用");
wb.openSheet("Sheet1").openCell("C12").setValue("每天费用");
wb.openSheet("Sheet1").openCell("C13").setValue("总计");
wb.openSheet("Sheet1").openCell("C14").setValue("总计");
wb.openSheet("Sheet1").openCell("C15").setValue("总计");
wb.openSheet("Sheet1").openCell("G6").setValue(" 张");
wb.openSheet("Sheet1").openCell("G7").setValue(" 张");
wb.openSheet("Sheet1").openCell("G9").setValue(" 晚");
wb.openSheet("Sheet1").openCell("G10").setValue(" 晚");
wb.openSheet("Sheet1").openCell("G11").setValue(" 天");
wb.openSheet("Sheet1").openCell("G12").setValue(" 天");
//设置单元格包含的公式
wb.openSheet("Sheet1").openCell("H6").setFormula("=D6*F6");
wb.openSheet("Sheet1").openCell("H7").setFormula("=D7*F7");
wb.openSheet("Sheet1").openCell("H8").setFormula("=D8*F8");
wb.openSheet("Sheet1").openCell("H9").setFormula("=D9*F9");
wb.openSheet("Sheet1").openCell("H10").setFormula("=D10*F10");
wb.openSheet("Sheet1").openCell("H11").setFormula("=D11*F11");
wb.openSheet("Sheet1").openCell("H12").setFormula("=D12*F12");
wb.openSheet("Sheet1").openCell("H13").setFormula("=D13*F13");
wb.openSheet("Sheet1").openCell("H14").setFormula("=D14*F14");
wb.openSheet("Sheet1").openCell("H15").setFormula("=D15*F15");
for (int i = 0; i < 10; i++) {
//设置数据以货币形式显示
wb.openSheet("Sheet1").openCell("D" + (6 + i)).setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
wb.openSheet("Sheet1").openCell("H" + (6 + i)).setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
}
Cell E16 = wb.openSheet("Sheet1").openCell("E16");
E16.getFont().setBold(true);
E16.getFont().setSize(11);
E16.setForeColor(Color.white);
E16.setValue("出差开支总费用");
E16.setVerticalAlignment(XlVAlign.xlVAlignCenter);
Cell E17 = wb.openSheet("Sheet1").openCell("E17");
E17.getFont().setBold(true);
E17.getFont().setSize(11);
E17.setForeColor(Color.white);
E17.setFormula("=IF(C4>H16,\"低于预算\",\"超出预算\")");
E17.setVerticalAlignment(XlVAlign.xlVAlignCenter);
Cell H16 = wb.openSheet("Sheet1").openCell("H16");
H16.setVerticalAlignment(XlVAlign.xlVAlignCenter);
H16.setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
H16.getFont().setName("Arial");
H16.getFont().setSize(11);
H16.getFont().setBold(true);
H16.setFormula("=SUM(H6:H15)");
Cell H17 = wb.openSheet("Sheet1").openCell("H17");
H17.setVerticalAlignment(XlVAlign.xlVAlignCenter);
H17.setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
H17.getFont().setName("Arial");
H17.getFont().setSize(11);
H17.getFont().setBold(true);
H17.setFormula("=(C4-H16)");
// 填充数据
Cell C4 = wb.openSheet("Sheet1").openCell("C4");
C4.setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
C4.setValue("2500");
Cell D6 = wb.openSheet("Sheet1").openCell("D6");
D6.setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
D6.setValue("1200");
wb.openSheet("Sheet1").openCell("F6").getFont().setSize(10);
wb.openSheet("Sheet1").openCell("F6").setValue("1");
Cell D7 = wb.openSheet("Sheet1").openCell("D7");
D7.setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
D7.setValue("875");
wb.openSheet("Sheet1").openCell("F7").setValue("1");
PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);
poCtrl1.setWriter(wb);
poCtrl1.setServerPage("poserver.do"); //此行必须
String fileName = "test.xls";
//创建自定义菜单栏
poCtrl1.addCustomToolButton("全屏切换", "SetFullScreen()", 4);
poCtrl1.setMenubar(false);//隐藏菜单栏
poCtrl1.setOfficeToolbars(false);//隐藏Office工具栏
//打开文件
poCtrl1.webOpen("doc/" + fileName, OpenModeType.xlsNormalEdit, "");
可能有人会感觉上面的代码有点多,编程工作量大,可是当你对比了POI或JXL生成Excel文件的方案之后,就不会有这种感觉了。上面的代码生成的文件效果如下图所示:
:-:
就生成这个预算表来说,换用其他的任何组件来实现(包括开源和非开源的,当然也包括POI)都很难想象要写多少行代码。作为任何一个系统的开发人员工作的重点都应该放在具体的业务逻辑上,把大量的精力和编码工作放在用程序实现表格的绘制其实是很不明智,这个demo也只是展示了一下PageOffice是可以这样做的,但还有更好的、任何开源组件都没有或处理不好的方法,那就是使用现有的Excel文件模板。从上面的例子可以看出PageOffice 给Excel单元格赋值,也可以赋值公式,所以最好的办法就是对用户现有的Excel模板编程,直接对单元格赋值数据和公式,代码量会急速的减少,同样是生成上面的一个预算表,如果模板是下面这样的:
那么编写的代码就只剩下填充数据的代码了:
Workbook wb = new Workbook();
//填充单元格文本和公式
B6.setValue("飞机票价");
Cell B9 = wb.openSheet("Sheet1").openCell("B9");
B9.getFont().setBold(true);
B9.setValue("酒店");
Cell B11 = wb.openSheet("Sheet1").openCell("B11");
B11.getFont().setBold(true);
B11.setValue("餐饮");
Cell B12 = wb.openSheet("Sheet1").openCell("B12");
B12.getFont().setBold(true);
B12.setValue("交通费用");
Cell B13 = wb.openSheet("Sheet1").openCell("B13");
B13.getFont().setBold(true);
B13.setValue("休闲娱乐");
Cell B14 = wb.openSheet("Sheet1").openCell("B14");
B14.getFont().setBold(true);
B14.setValue("礼品");
Cell B15 = wb.openSheet("Sheet1").openCell("B15");
B15.getFont().setBold(true);
B15.getFont().setSize(10);
B15.setValue("其他费用");
wb.openSheet("Sheet1").openCell("C6").setValue("机票单价(往)");
wb.openSheet("Sheet1").openCell("C7").setValue("机票单价(返)");
wb.openSheet("Sheet1").openCell("C8").setValue("其他");
wb.openSheet("Sheet1").openCell("C9").setValue("每晚费用");
wb.openSheet("Sheet1").openCell("C10").setValue("其他");
wb.openSheet("Sheet1").openCell("C11").setValue("每天费用");
wb.openSheet("Sheet1").openCell("C12").setValue("每天费用");
wb.openSheet("Sheet1").openCell("C13").setValue("总计");
wb.openSheet("Sheet1").openCell("C14").setValue("总计");
wb.openSheet("Sheet1").openCell("C15").setValue("总计");
wb.openSheet("Sheet1").openCell("G6").setValue(" 张");
wb.openSheet("Sheet1").openCell("G7").setValue(" 张");
wb.openSheet("Sheet1").openCell("G9").setValue(" 晚");
wb.openSheet("Sheet1").openCell("G10").setValue(" 晚");
wb.openSheet("Sheet1").openCell("G11").setValue(" 天");
wb.openSheet("Sheet1").openCell("G12").setValue(" 天");
// 填充数据
Cell C4 = wb.openSheet("Sheet1").openCell("C4");
C4.setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
C4.setValue("2500");
Cell D6 = wb.openSheet("Sheet1").openCell("D6");
D6.setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
D6.setValue("1200");
wb.openSheet("Sheet1").openCell("F6").getFont().setSize(10);
wb.openSheet("Sheet1").openCell("F6").setValue("1");
Cell D7 = wb.openSheet("Sheet1").openCell("D7");
D7.setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
D7.setValue("875");
wb.openSheet("Sheet1").openCell("F7").setValue("1");
这就变成了一个简单的工作量的问题,不需要绞尽脑汁去计算怎么绘制表格才更合理,才能实现效果。
就视觉效果来说,PageOffice处理生成的表格,不管是表格边框的处理,还是单元格背景色,或者字体和对齐方式等等都处理的非常好,尤其对Excel公式的支持更是可圈可点,一般用户想要的结构比较复杂的报表都可以调用PageOffice来实现。
PageOffice产品优点: 文件生成的速度快,几乎是瞬间完成,还同时实现了文件在线打开、是否只读和打印的控制。
相关推荐
使用 PageOffice,可以快速生成 Word、Excel、PowerPoint 等office文档,满足了软件开发中对office文档处理的需求。 在本文档中,我们将通过实践示例,展示如何使用 PageOffice 在 JAVA 中动态导出 Word 文档。首先...
在这个页面中,你需要编写后台代码来控制PageOffice生成Excel表格。 在`excel.jsp`中,你可以使用PageOffice提供的API来操作Excel文件。以下是一段简单的示例代码,演示如何在空白Excel文件中创建一个表格: ```...
在这个实例中,我们将探讨如何利用PageOffice和其FileMaker标签控件在Java环境中实现Word文件的批量生成。 首先,PageOffice是一个集成在Java应用中的Office文档处理工具,它允许开发者直接在Web浏览器中打开、编辑...
Java编程调用PageOffice实现从空白的excel文件动态生成excel表格,设置公式并填充数据。 集成PageOffice不但能够实现在线编辑、保存真正的Office文档,而且还可以轻松实现Word、Excel文档的动态数据填充、格式控制和...
例如,一个在线报销系统可以利用PageOffice技术,根据用户输入的数据动态生成报销表格,然后发送给审批者或导出为Excel文件供用户下载。这种方式既避免了手动制作模板的繁琐,也简化了编程实现复杂格式报表的难度。 ...
在本项目中,我们将重点讨论如何使用PageOffice的FileMaker控件来动态填充Word模板并生成正式的Word文件。 首先,了解PageOffice的核心概念是至关重要的。PageOffice主要由服务器端组件和服务、客户端控件和...
除了批量转换Word文档,PageOffice还支持其他Office文档格式的处理,如Excel和PowerPoint。这使得它适用于多种场景,包括报表自动化生成、在线编辑和协作,以及自定义的业务流程自动化。 综上所述,PageOffice提供...
调用PageOffice还可以实现从空白的excel文件动态生成excel表格,设置公式并填充数据。 集成PageOffice不但能够实现在线编辑、保存真正的Office文档,而且还可以轻松实现Word、Excel文档的动态数据填充、格式控制和...
7. 下载Word文档:生成Word文档后,服务器端可以将其以文件流的形式发送给前端,前端利用axios的blob响应类型来接收这个文件流,并触发文件的下载操作。 以上就是Vue动态生成Word文档的基本实现流程,从构建用户...
在这个场景下,我们不再依赖POI,而是利用PageOffice的动态填充和创建功能来生成Word文档。 首先,要使用PageOffice,你需要在服务器端进行必要的配置。这包括安装PageOffice的服务器端程序,并在Web项目的"WebRoot...
使用的是PageOffice,除了提供Word/Excel动态数据填充,格式控制,Word/Excel用户输入提交,Word/Excel/PowerPoint/WPS等Office文档的在线打开、只读浏览、编辑、保存等功能外,还给在线协同办公内置了强大的支持...
Java语言利用POI读取excel文档,利用Freemarker建立word模板(带图片),excel每一行数据生成单个word文档,再利用POI合并成一个word文档(源码); 博客地址:...
Java篇中,主要阐述了PageOffice集成说明,动态生成Word文件的方法,以及如何在Maven项目中引用FileMaker组件。***篇则详细说明了如何在***环境中集成PageOffice,动态生成Word文档以及FileMaker组件的功能简介。 ...
在.NET框架中,读取和显示Excel文件是一个常见的任务,特别是在数据处理、报表生成或导入导出数据的场景中。本文将深入探讨如何使用.NET来完成这个任务,以标题和描述中提到的关键页面为基础,包括`BaseFunction.cs`...
PageOffice是一款强大的在线文档编辑组件,它能够无缝集成到各种Web应用程序中,提供对Word、Excel、PPT、PDF等常用文档类型的在线创建、编辑和保存功能。本示例"pageOfficeDemo"将详细介绍如何将PageOffice与Struts...
本示例将详细介绍如何在JSP中利用POI库生成Excel文件,并直接在浏览器中导出。 首先,确保在项目中已经引入了Apache POI的依赖库。POI提供了对Excel 2003(HSSF)和Excel 2007以上版本(XSSF)的支持。在这个示例中...
PageOffice是一款强大的Java组件,能够帮助开发者实现在Web环境中直接编辑、保存和打印各种Office文档,如Word、Excel、PowerPoint等。 **1. PageOffice组件介绍** PageOffice是基于Java的办公软件开发组件,它提供...
在Java开发中,PageOffice是一款强大的控件,用于在服务器端直接操作Word、Excel、PDF等各类文档,实现数据的读写与转换。PageOffice控件使得开发者无需安装任何Office软件,即可在Web环境下实现对Office文档的处理...
通过以上步骤,我们可以实现在JSP环境中动态生成并导出Excel文件,不仅提高了数据处理的灵活性,还增强了用户体验。无论是对于日常的数据管理还是数据分析场景,这一技术的应用都显得尤为重要且实用。
有时候,我们希望在不显示“文件下载”提示的情况下直接在浏览器中打开Word或Excel文件。这通常涉及到调整浏览器的MIME类型处理方式,或者在服务器端调整输出内容的方式。 六、JSP页面TABLE到Excel的转换 JSP页面上...