您的位置:首页 > 其它

POI操作Excel:密码保护和公式再计算

2009-09-18 21:45 686 查看
Excel一个典型的功能就是可以设置各种各样的计算公式。因此我们在用POI操作Excel的时候,如何使Excel里面的公式再计算?
如果是针对某一个cell单元来说的话,可以用HSSFCell.setCellFormula对该cell设置计算公式。新生成的Excel中设置计算公式的那个cell就是计算好的值了。

如果要使整个sheet里面的所有计算公式都重新计算一遍的话,可以用HSSFSheet.setForceFormulaRecalculation(true)方法。这样设置后,这个sheet里面的计算公式都能再计算了。

同时,为了保护个人信息等,我们可能需要对这个Excel文件加密保护。这个时候可以用HSSFWorkbook.writeProtectWorkbook( String
password, String username )
方法。

示范代码如下:模板文件(d:/FormulaRecalculation.xls)有一个公式:A2=A1+B1。 A1初期值为1,B1初期值为2,A2的自动计算结果为3。
public static void main(String[] args) {

FileOutputStream fileOut = null;

try {

// 创建一个工作薄

HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(

"d:/FormulaRecalculation.xls"));

// 取得第一个sheet

HSSFSheet sheet1 = wb.getSheetAt(0);

// 取得第一个sheet的第一行

HSSFRow row1 = sheet1.getRow(0);

// 取得第一个sheet的第一行的第一个cell

HSSFCell cell1 = row1.getCell(0);

// 直接赋

cell1.setCellValue("10");

// 取得第一个sheet的第一行的第二个cell

HSSFCell cell2 = row1.getCell(1);

// 设置计算式


cell2.setCellFormula("A1 + 100");

//设置密码保护·

wb.writeProtectWorkbook("password", "owner");

// 设置强制执行再计

sheet1.setForceFormulaRecalculation(true);

// 写入excel文件

fileOut = new FileOutputStream("d:/workbook.xls");

wb.write(fileOut);

fileOut.close();

} catch (IOException io) {

io.printStackTrace();

System.out.println("erorr : " + io.getMessage());

} finally {

if (fileOut != null) {

try {

fileOut.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

上面程序中的执行结果:

A1直接赋值为10,结果为10

B1设置了计算公式A1+100,结果为110

A2的计算A1+B1,结果为120。

这里需要注意的是如果模板文件的工具->选项中的计算公式属性没有设置为"自动"的话,这个地方的A2是不会自动计算的,结果还是初始值3
上面的代码中如果没有sheet1.setForceFormulaRecalculation(true)这个设置的话,执行结果如下:

A1直接赋值为10,结果为10

B1设置了计算公式A1+100,结果为110

A2的计算是A1+B1,但这个计算公式不会自动计算,因此结果还是初始值3
上面的代码由于设置了保护密码,因此生成的workbook.xls文件打开的时候需要输入密码password。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: