Java生成EXCEL文档说明

POI版本 :3.0.2-FINAL
下载地址 : http://poi.apache.org
一般在项目中真正要实现这样一个表格的时候,例如项目需要制作报表等等,通常的做法都是事先把格式一切的东西都手动制作好(这个做好了的文件在实际的项目里我们称之为“数据模板”,简称“模板”),然后在Java应用中适当的时机把这个文件读进来修改,最后再另存到指定的位置或者传递给下一个处理者(例如以流的方式送给Servlet等等),这样其实POI具体做的事情就是向模板里写业务的数据,还是很方便快捷的。
一、 POI 读取 Excel 基本工作
   1. // 指定要读取的文件,本例使用上面生成的helloworld.xls
              FileInputStream readFile = new FileInputStream("c:/ceshi.xls");
       // 创建一个WorkBook,从指定的文件流中创建,即上面指定了的文件流
         HSSFWorkbook wb = new HSSFWorkbook(readFile);
       // 获取名称为“测试页”的sheet
       // 注意,如果不能确定具体的名称,可以用getSheetAt(int)方法取得Sheet
       //HSSFSheet st = wb.getSheet("测试页");
              HSSFSheet st = wb.getSheetAt(0);
     //创建样式表,样式表可以设置单元格的一些属性 比如背景色,锁定状态,行列宽高等
     HSSFCellStyle normalStyle = wb.createCellStyle();
     //以下列方式存储当前单元格样式
单元格对象.setCellStyle(normalStyle);
二、设置模板与建立行和列
1. 如果预先的模板有内容的话,在操作的时候则只需要读去当前单元格的内容以及样式,或者可以重新定义。(如果没有内容,又想以读去的方式来获取Excel的话,需要手动初始化模板,如给模板中需要用到的单元格设置边框或者背景色等)
例如
HSSFRow row = st.getRow(0);        //读取第一行
HSSFCell cell = row.getCell((short)0); //读取第一行第一个字段
2. 如果模板中无内容的话,则需要在代码中创建初始化行和列来达到目的
例如
HSSFRow row = st.createRow(0);         //创建第一行
HSSFCell cell = row.createCell((short)0); //以第一行为基础创建第一列
三、模板的只读单元格功能与 POI 关系
  1. 在Excel中可以设置某些单元格为锁定状态(即:只读状态),设置好后还不能生效,因为要通过点击 工具—保护—保护工作表,输入密码达到效果,在选择保护工作表项目中可以控制只读的属性(具体看需求):如不能修改样式名称,可以修改行列大小或者删除行列,还有个选项是选定锁定单元格,如果把这个钩选取消了,则只读时点击不到被设置只读保护的单元格,也不会出现不能修改属性的提示框。
  2. 如果我们需要这些只读的单元格的功能的话,则需要在模板中设置,通过POI来读取后再生成的EXCEL 也会保留此功能,还可以通过POI在读取模板后设置哪些字段为锁定状态:

          例:    HSSFCellStyle alterableStyle = wb.createCellStyle(); //获取当前单元格的样式对象

alterableStyle.setLocked(true);     //设定此单元格为锁定状态
       如果在选择模板EXCEL不需要设置只读的属性时候(即:默认属性)则可以不用在模板中选择保护工作表 ,同样可以在POI中实现
          例:
                      st.protectSheet(new String("333")); //当前工作表为保护状态 密码为333
(需知:设置只读属性的允许删除行和列的选项时,如果当前行或者列 有已经被设定为锁定的单元格时,则此列或者行不能被删除)
四、安全问题
由于模板需要受到保护,建议在建立模板的时候 设置保护工作表 另外最好可以找到工作以锁定模板的VBA工程窗口,这样POI读取模板后 生成的EXCELVBA工程窗口也自动被锁定, 以防止破解 模板的工作表密码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值