Java 生成 EXCEL POI文档说明
一般在项目中 真正要实现这样一个表格的时候,例如项目需要制作报表等等,通常的做法都是事先把格式一切的东西都手动制作好(这个做好了的文件在实际的项目里我们称之为 “ 数据模板 ” ,简称 “ 模板 ” ),然后在 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关系
- 在Excel中可以设置某些单元格为锁定状态(即:只读状态),设置好后还不能生效,因为要通过点击 工具—保护—保护工作表,输入密码达到效果,在选择保护工作表项目中可以控制只读的属性(具体看需求):如不能修改样式名称,可以修改行列大小或者删除行列,还有个选项是选定锁定单元格,如果把这个钩选取消了,则只读时点击不到被设置只读保护的单元格,也不会出现不能修改属性的提示框。
- 如果我们需要这些只读的单元格的功能的话,则需要在模板中设置,通过POI来读取后再生成的EXCEL 也会保留此功能,还可以通过POI在读取模板后设置哪些字段为锁定状态:
例
HSSFCellStyle alterableStyle = wb.createCellStyle(); //获取当前单元格的样式对象
alterableStyle.setLocked(true); //设定此单元格为锁定状态
如果在选择模板EXCEL不需要设置只读的属性时候(即:默认属性)则可以不用在模板中选择保护工作表 ,同样可以在POI中实现
例
st.protectSheet(new String("333")); //当前工作表为保护状态 密码为333
(需知:设置只读属性的允许删除行和列的选项时,如果当前行或者列 有已经被设定为锁定的单元格时,则此列或者行不能被删除)
四 安全问题
由于模板需要受到保护,建议在建立模板的时候 设置保护工作表 另外最好可以找到工作以锁定模板的VBA工程窗口,这样POI读取模板后 生成的EXCELVBA工程窗口也自动被锁定, 以防止破解 模板的工作表密码