本人新手原创,有错误多指教。
在处理翻译后的国际化文件时,key和键要同时导入,一条条导入比较非常浪费时间,而且还很容易出错。利用jxl.jar可以非常容易的替换excel的单元格,从而用自动生成新的excel资源文件,再通过Excel的宏脚本可以导出为XXX.properties文件。
package com.ylz.dealExcel;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public class DealExcelDemo {
/**
* 此程序只支持office2003或以下版本,如果是2003以上版本需另存为2003版本,并确保保存时没有相关规则,
* 要有必须清楚,否则会报空指针异常
*/
public static void main(String[] args) throws Exception{
//设置工作区的编码
WorkbookSettings ws = new WorkbookSettings();
ws.setEncoding("ISO-8859-1");
//获取文件输入流
InputStream is1 = new FileInputStream(new File("D:\\en.xls"));
InputStream is2 = new FileInputStream(new File("D:\\zh.xls"));
//Workbook是只读对象,所以要修改必须创建其副本
Workbook wb1 = Workbook.getWorkbook(is1, ws);
Workbook wb2 = Workbook.getWorkbook(is1, ws);
is1.close();
is2.close();
//创建可写的workbook副本(本程序中将en.xls修改为en1.xls)
WritableWorkbook ww1 = wb1.createWorkbook(new File("D:\\en1.xls"));
WritableWorkbook ww2 = wb1.createWorkbook(new File("D:\\zh1.xls"));
//获取excel的第一个sheet
WritableSheet sh1 = ww1.getSheet(0);
WritableSheet sh2 = ww2.getSheet(0);
Label lab = null;
//遍历en1中的资源(未修改的副本)
for(int i = 0;i < sh2.getRows();i++){
//遍历zh1.xls中的资源
for (int j = 0; j < sh1.getRows(); j++) {
//将zh1副本中第二列的每一行与en1中第二列的比较,en1中只要有与之相等的,进入条件
if(sh1.getCell(1, j).getContents().trim().equals(sh2.getCell(1, i).getContents().trim())){
//获取zh1中第三列i行的内容
String s = sh2.getCell(2,i).getContents();
//存入label中,准备替换en1副本中第三行第j列的内容
lab = new Label(2,j,s);
//en1副本中用s替换原来单元格内容
sh1.addCell(lab);
}
}
}
//将修改保存到workbook(必须)
ww1.write();
ww2.write();
//释放内存
ww1.close();
ww2.close();
}
}