在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.