java-web-PIO实现自动生成excel录入模板(实现下拉列表框)[

本文介绍了在web开发中如何使用POI组件生成包含下拉列表的Excel录入模板。通过分析两种方案,选择了使用Excel内置的'数据有效性'功能来创建下拉列表,避免了复杂性和宏的使用问题。代码示例展示了如何动态创建带有数据字典的Excel模板。
摘要由CSDN通过智能技术生成

在web开发当中,经常用pio组件实现操作excel文件的功能:创建工作薄,工作表,将数据库表数据导出到excel文件或者从excel文件导入到当前web项目的数据库.那么,如何用pio方便实用地生成一个excel录入模板呢?
    b/s结构的系统要求用户端具备上网条件.可现实环境往往导致用户暂时不具备上网条件,这样一来,用excel事先生成一个录入模板就显得尤为重要了.
    首先,用excel制作录入模板有以下几个好处:
    1.excel环境已经相当普遍,用户熟悉操作;
    2.用excel输入数据不需要再安装部署其他软件,符合瘦客户端的设计理念;
    3.移植性强.

    录入模板的制作要求:
    1.生成基本的行列表格模式:
     用户在输入数据时,模板要提供一些数据项,供其直观地输入.比如:姓名,性别,住址等.这些条目是灵活的,要求动态生成.
    2.生成含有下拉列表框的输入模式:
     有一些含有数据字典的项目,如:民族,政治面貌等.并且这些数据项目是灵活的,系统要动态生成.
    3.具体布局样式先暂时不考虑

    在生成下拉列表框时,有两个方案:

    1)写一个动态生成录入界面的vba函数,存入固定的模板文件;
     web服务端在生成exel文件之前,将此含有vba代码的模板文件复制重命名.再用pio功能打开此文件,将基本输入项目从描述系统表的结构表信息中读出,动态写入excel"录入"sheet的单元格;同时将当前待录入项目的数据字典项目写入单独的"代码"sheet当中.用户在实际使用当中,启动此excel文件,vba自动运行并根据事先写入单元格的数据生成录入界面(一些文本框,下拉列表combobox等)

    2)不使用vba,直接利用"数据有效性"功能实现基本的下拉列表输入功能.

分析:第1)种方案,较复杂,并且用户在实际使用当中可能遭遇"屏蔽宏"功能的情形出现,不易维护;
     第2)种方案,较简单,但通用性强,因为"数据有效性"是excel的基本功能,所以不用运行宏代码.
结论:决定先执行第2)种方案,时机成熟再试探第1)种方案!

步骤:先建立一个生成excel字节流的类,再建立一个action类.

示例代码:
package com.mycom.server.excel;
 
import java.io.ByteArrayOutputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.HSSFDataValidation;

public class ExcelCreate {
 private static Logger log = Logger.getLogger(ExcelCreate.

以下是使用Apache POI在Word文档中生成表格和行的示例代码: ``` import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; import org.apache.poi.xwpf.usermodel.*; public class GenerateTableAndRowInWord { public static void main(String[] args) throws Exception { // 创建一个新的文档对象 XWPFDocument document = new XWPFDocument(); // 创建一个带有表格的段落 XWPFParagraph paragraph = document.createParagraph(); // 创建一个3行3列的表格 XWPFTable table = paragraph.createTable(3, 3); // 设置表格样式 table.getCTTbl().addNewTblPr().addNewTblW().setW(BigInteger.valueOf(8000)); // 创建表格标题行 XWPFTableRow headerRow = table.getRow(0); headerRow.getCell(0).setText("序号"); headerRow.getCell(1).setText("姓名"); headerRow.getCell(2).setText("年龄"); // 创建表格数据行 List<String[]> dataList = new ArrayList<String[]>(); dataList.add(new String[]{"1", "张三", "18"}); dataList.add(new String[]{"2", "李四", "20"}); dataList.add(new String[]{"3", "王五", "22"}); for (String[] data : dataList) { XWPFTableRow dataRow = table.createRow(); for (int i = 0; i < data.length; i++) { dataRow.getCell(i).setText(data[i]); } } // 保存文档 FileOutputStream out = new FileOutputStream("tableAndRow.docx"); document.write(out); out.close(); document.close(); } } ``` 在上述代码中,我们首先创建了一个空的Word文档对象,然后创建了一个段落,并在段落中创建了一个3行3列的表格。接着,我们设置了表格的样式,并创建了表格的标题行和数据行。表格标题行的内容为“序号”、“姓名”和“年龄”,数据行的内容则从一个包含3个元素的数组中获取。最后,我们将文档保存到磁盘上。 如果你需要在表格和行中循环生成数据,可以先将数据存储在一个集合中,然后使用循环语句从集合中获取数据并生成表格行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值