jxl在生成excel的时候,可以提供带保护的excel,防止用户篡改。看例子:
/**
* 创建excel文件
* @param file
*/
public static void getExcelModel(File file){
try {
String[] title = {"史籍语料","ID","唯一标示符号","标题级别","新增条目名","主题词","分类"};
// 创建Excel工作薄
WritableWorkbook wwb=Workbook.createWorkbook(file);
//定义excel标题单元格的样式
WritableFont wf = new WritableFont(WritableFont.ARIAL, 15,WritableFont.BOLD); // 定义格式 字体 下划线 斜体 粗体 颜色
WritableCellFormat wcf = new WritableCellFormat(wf); // 单元格定义
wcf.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式
//定义卷次标题的样式
WritableFont wfJuanci=new WritableFont(WritableFont.ARIAL, 13, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, ColourUtil.getNearestColour("#7030A0"));
WritableCellFormat wcfJuanci=new WritableCellFormat(wfJuanci);
//定义卷标题的样式
WritableFont wfJuan=new WritableFont(WritableFont.createFont("宋体"), 12, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, ColourUtil.getNearestColour("#008000"));
WritableCellFormat wcfJuan=new WritableCellFormat(wfJuan);
//定义篇标题的样式
WritableFont wfPian=new WritableFont(WritableFont.createFont("宋体"), 11, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, ColourUtil.getNearestColour("#92D050"));
WritableCellFormat wcfPian=new WritableCellFormat(wfPian);
//定义章标题的样式
WritableFont wfZhang=new WritableFont(WritableFont.createFont("宋体"), 10, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, ColourUtil.getNearestColour("#0000FF"));
WritableCellFormat wcfZhang=new WritableCellFormat(wfZhang);
//定义节标题的样式
WritableFont wfJie=new WritableFont(WritableFont.createFont("宋体"), 9, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, ColourUtil.getNearestColour("#66FFFF"));
WritableCellFormat wcfJie=new WritableCellFormat(wfJie);
WritableSheet sheet = wwb.createSheet("内容结构", 0);//设置excel的第一个工作簿的名字
Label label;
for(int i=0;i
// Label(x,y,z) 代表单元格的第x+1列,第y+1行, 内容z
// 在Label对象的子对象中指明单元格的位置和内容
label = new Label(i,0,title[i],wcf);
// 将定义好的单元格添加到工作表中
sheet.addCell(label);
sheet.setColumnView(i, 20); // 设置列的宽度
}
sheet.getSettings();//得到excel工作簿的设置对象
sheet.getSettings().setProtected(true);//设置excel文件的保护
sheet.getSettings().setPassword("123456");//设置excel文件的保护密码
// 写入数据
wwb.write();
// 关闭文件
wwb.close();
} catch (Exception e) {
// TODO: handle exception
System.out.println("导出excel文件出错");
JOptionPane.showMessageDialog(null,"导出excel文件出错");
e.printStackTrace();
}
}
这样创建的excel只能看,不能改。如果要改只能取消保护,并且输入正确的密码。
受保护excel的读取,excel保护机制只是在excel软件做了限制,并没有深层的进行限制。所以还是可以通过程序更改的,不需要密码。看例子:
private static void updateExcel(File file){
try {
Workbook book = Workbook.getWorkbook(file);//读取一个excel文件对象,便于以后读取
WritableWorkbook wwb = Workbook.createWorkbook(file, book);//得到正在读取文件的创建对象,便于以后修改
// 读取第一张工作表
WritableSheet sheet = wwb.getSheet(0) ;
for(int i=0;i System.out.println(sheet.getCell(0, i).getContents()); } Label label=new Label(0, 0, "啊啊啊");//修改其第一个单元格的内容,通过单元格覆盖的方法进行修改 sheet.addCell(label);//加入单元格,相当于覆盖 book.close(); wwb.write() ; wwb.close() ; System.out.println("更新完成!") ; } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } 主方法: public static void main(String[] args) { //getExcelModel(new File("C:\\Users\\Administrator\\Desktop\\lock.xls")); updateExcel(new File("C:\\Users\\Administrator\\Desktop\\lock2.xls")); }