使用jxl.jar操作Excel,效率提高
2009-12-01 17:47
633 查看
一次银行项目中,因为要做到全英文界面,手头的多语言和翻译的英文文档要一一匹配过来,起初我耐着性子2个小时也处理不到200个,是在是太慢了,在自己的百宝箱子里找了下,随即用jxl.jar写了一段代码,处理将2个Excel的多语言文件整合到一起,保证不出错和速度,并且标注那些事程序处理过的多语言。代码不到一个小时写完,本来3个人需要近2天的工作量,不到三分钟就over。偷懒真的是程序员第一美德,如何运用我们已知的知识,来简化我们日常的工作量,提高效率,这是我从这件事情上获得的收获,下面将代码献丑,一起学习jxl,熟练操作Excel,我想有一天我们再次处理Excel中的数据的时候,不头痛
测试需要2个Excel,2个Excel必须保证有2列数据,如,1.xls里有A列B列第一行数据分别是A1,TEST1,那么2.xls必须保证有2列数据,假如C列和D列的任意一行有数据A1,HELLO , A1是替换的关键字,我截了个图,附件1.jpg是源数据,3.jpg是修改前,2.jpg是修改后的数据。1.jgp是1.xls中数据 ,3.jpg和2.jpg都是2.xls
1.JPG:
源数据 1.xls
3.JPG:
修改前2.xls
2.JPG:
修改后 2.xls
1.公共读取Excel方法类:
2.修改Excel类:
完毕,例子需要jxl.jar包支持,1.4以上的 不要超过2.0
最后推荐一个博客作者关于jxl.jar的一个例子:http://playboy1987228.javaeye.com/blog/434671
测试需要2个Excel,2个Excel必须保证有2列数据,如,1.xls里有A列B列第一行数据分别是A1,TEST1,那么2.xls必须保证有2列数据,假如C列和D列的任意一行有数据A1,HELLO , A1是替换的关键字,我截了个图,附件1.jpg是源数据,3.jpg是修改前,2.jpg是修改后的数据。1.jgp是1.xls中数据 ,3.jpg和2.jpg都是2.xls
1.JPG:
源数据 1.xls
3.JPG:
修改前2.xls
2.JPG:
修改后 2.xls
1.公共读取Excel方法类:
/** * */ package com.vteam.mul; import java.io.File; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Set; import jxl.Cell; import jxl.CellType; import jxl.LabelCell; import jxl.Sheet; import jxl.Workbook; /** * @作者 Jarvis * @创建日期 Nov 19, 2009 * @版本 V 1.0 */ public class ReadExcel { /** * @param args */ private String ExcelPath ; private HashMap ExcelMap ; private int column1 ;//指定读取列1 从0 开始 private int column2 ;//指定读取列2 从0 开始 private int rowStart;//读取起始行下标 从0 开始 private String sheetno; public ReadExcel(){ } public ReadExcel(String ExcelPath){ this.ExcelPath = ExcelPath ; } /** * 读取Excel 按照sheet名称顺序读取 * 需要设置Excel路径ExcelPath,读取起始行rowStart,读取的2列column1和column2 * @return */ public HashMap Readexcel(){ try { ExcelMap = new HashMap();//存储 中文key-英文value File file = new File(this.ExcelPath); Workbook rwb = Workbook.getWorkbook(file); String[] sheets = rwb.getSheetNames();//获取所有的sheet名称 // Sheet st = rwb.getSheet(this.getSheetNo()) ;//下标获取表名,从0开始 for(int i = 0 ; i< sheets.length ; i++){ if("page".equals(sheets[i])){ continue ; } Sheet st = rwb.getSheet(sheets[i]);//sheet名称获取方式 int row = st.getRows(); // /得到该sheet的行数 int starrow = this.rowStart ; Cell key = null ; Cell value = null ; LabelCell labelkey = null ; LabelCell labelvalue = null ; while(starrow < row ){ key = st.getCell(this.getColumn1(),starrow);//第一个参数代表列 第二个参数代表行 value = st.getCell(this.getColumn2(),starrow); //通用的获取cell值的方式,返回字符串 String keyStr = key.getContents(); String valueStr = value.getContents(); //获得cell具体类型值的方式 if(key.getType() == CellType.LABEL) { labelkey = (LabelCell)key; keyStr = labelkey.getString(); } if(value.getType() == CellType.LABEL) { labelvalue = (LabelCell)value; valueStr = labelvalue.getString(); } ExcelMap.put(keyStr,valueStr );//存储中文-英文 starrow ++ ;//递增 } System.out.println("从Excel文件:< "+this.ExcelPath+" >的sheet:["+sheets[i]+"]读取多语言共<"+starrow+">行"); } rwb.close(); //关闭 }catch(Exception e){ e.printStackTrace(); } return ExcelMap ; } public static void main(String[] args) { // TODO Auto-generated method stub ReadExcel re = new ReadExcel(); re.setExcelPath("E:/HK_CMBzl/CSPS_CMBHK_MUL_091119.xls"); re.setColumn1(3);//读取列1 re.setColumn2(5);//读取列 2 re.setRowStart(1);//读取起始行 HashMap map = re.Readexcel(); Set set = map.keySet(); Iterator it = set.iterator(); while(it.hasNext()){ String key = (String)it.next(); System.out.println(">> "+map.get(key)); } } // setter && getter-------------------start public String getExcelPath() { return ExcelPath; } public void setExcelPath(String excelPath) { ExcelPath = excelPath; } public HashMap getExcelMap() { return ExcelMap; } public void setExcelMap(HashMap excelMap) { ExcelMap = excelMap; } public int getColumn1() { return column1; } public void setColumn1(int column1) { this.column1 = column1; } public int getColumn2() { return column2; } public void setColumn2(int column2) { this.column2 = column2; } public int getRowStart() { return rowStart; } public void setRowStart(int rowStart) { this.rowStart = rowStart; } //setter && getter-------------------end }
2.修改Excel类:
/** * */ package com.vteam.mul; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Set; import jxl.Cell; import jxl.CellType; import jxl.LabelCell; import jxl.Sheet; import jxl.Workbook; import jxl.format.UnderlineStyle; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; /** * @作者 Jcuckoo * @创建日期 Nov 19, 2009 * @版本 V 1.0 */ public class WriteExcel { /** * @param args */ private String ExcelPath ;//英文Excel路劲 private String MulPath ; //多语言文件路径 private HashMap MulExcel ;//读取写入Excel文本内容 private int Mcolumn1 ;//指定被修改Excel读取列1 从0 开始 private int Mcolumn2 ;//指定被修改Excel读取列2 从0 开始 private int MrowStart;//读取修改起始行下标 从0 开始 private int Rcolumn1 ;//指定数据来源Excel读取列1 从0 开始 private int Rcolumn2 ;//指定数据来源Excel读取列2 从0 开始 private int RrowStart;//读取起始行下标 从0 开始 public WriteExcel(){ } public WriteExcel(String ExcelPath){ this.ExcelPath = ExcelPath ; } //setter && getter-------------------start public String getExcelPath() { return ExcelPath; } public void setExcelPath(String excelPath) { ExcelPath = excelPath; } public HashMap getMulExcel() { return MulExcel; } public void setMulExcel(HashMap mulExcel) { MulExcel = mulExcel; } public int getMcolumn1() { return Mcolumn1; } public void setMcolumn1(int mcolumn1) { Mcolumn1 = mcolumn1; } public int getMcolumn2() { return Mcolumn2; } public void setMcolumn2(int mcolumn2) { Mcolumn2 = mcolumn2; } public int getMrowStart() { return MrowStart; } public void setMrowStart(int mrowStart) { MrowStart = mrowStart; } public int getRcolumn1() { return Rcolumn1; } public void setRcolumn1(int rcolumn1) { Rcolumn1 = rcolumn1; } public int getRcolumn2() { return Rcolumn2; } public void setRcolumn2(int rcolumn2) { Rcolumn2 = rcolumn2; } public int getRrowStart() { return RrowStart; } public void setRrowStart(int rrowStart) { RrowStart = rrowStart; } public String getMulPath() { return MulPath; } public void setMulPath(String mulPath) { MulPath = mulPath; } //setter && getter-------------------end public void ModifyExcel(){ try{ System.out.println("--------读取英文Excel开始,加载中 ... ..."); ReadExcel rexceleng = new ReadExcel(); rexceleng.setExcelPath(this.getExcelPath()); rexceleng.setColumn1(this.getRcolumn1());//读取列1 rexceleng.setColumn2(this.getRcolumn2());//读取列2 rexceleng.setRowStart(this.getRrowStart());//读取起始行 HashMap engmap = rexceleng.Readexcel();//读取英文Excel System.out.println("--------读取英文Excel结束... ..."); System.out.println("... ....读取多语言Excel开始,加载中... ..."); ReadExcel rexcel = new ReadExcel(); rexcel.setExcelPath(this.getMulPath()); rexcel.setColumn1(this.Mcolumn1);//读取列1 rexcel.setColumn2(this.Mcolumn2);//读取列2 rexcel.setRowStart(this.MrowStart);//读取起始行 HashMap mulmap = rexcel.Readexcel();//读取Excel System.out.println("... ....读取多语言Excel结束... ..."); mulmap = mapCompare(engmap,mulmap);//英文转换开始 File efile = new File(this.getMulPath()); // Excel获得文件 Workbook wb = Workbook.getWorkbook(efile); String[] sheets = wb.getSheetNames() ; System.out.println("修改Excel开始,请等待... ..."); // 打开一个文件的副本,并且指定数据写回到原文件 WritableWorkbook book = wb.createWorkbook(efile, wb); for(int j = 0 ; j < sheets.length ; j ++){ WritableSheet sheet = book.getSheet(sheets[j]); int rows = sheet.getRows(); int rowst = this.getMrowStart() ; Cell celltemp = null ; while(rowst < rows ){ celltemp = sheet.getCell(this.Mcolumn1,rowst); String teStr = null ; if(celltemp.getType() == CellType.LABEL){//类型匹配 LabelCell labelkey = (LabelCell)celltemp; teStr = labelkey.getString(); } if((teStr != null || teStr != "") && mulmap.get(teStr)!= null ){ //替换英文为红色字体 WritableFont wfc = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false, UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED); WritableCellFormat wcfFC = new WritableCellFormat(wfc); Label label = new Label(this.getMcolumn2() ,rowst , (String)mulmap.get(teStr),wcfFC ); //修改指定第Mcolumn2的数据 sheet.addCell(label); } rowst ++ ; } } book.write(); book.close(); wb.close(); System.out.println("修改Excel结束... ..."); } catch(Exception e) { e.printStackTrace(); } } /** * 将英文map的数据复制到多语言map **/ public HashMap mapCompare(HashMap engMap , HashMap Mulmap){ HashMap map = new HashMap(); Set engset = engMap.keySet();//遍历英文源map Iterator engit = engset.iterator(); int i = 0; while(engit.hasNext()){ String engkey = (String)engit.next(); String mulstr = (String)Mulmap.get(engkey); if(mulstr != null || mulstr != "" ){ map.put(engkey, engMap.get(engkey)); i++; Mulmap.remove(engkey);//找到匹配的英文后移除操作 }else{ Mulmap.remove(engkey); } } Mulmap.clear();//匹配结束 多语言Map清空 System.out.println("共找到 【 "+i+" 】 个匹配的中文多语言已翻译为英文"); return map ; } public static void main(String[] args) { // TODO Auto-generated method stub WriteExcel writeexcel = new WriteExcel(); writeexcel.setExcelPath("E:/1.xls");//英文Excel路径 writeexcel.setMulPath("E:/2.xls");//多语言Excel路径 writeexcel.setRcolumn1(0);//英文Excel 读取列1 下表 从0开始 writeexcel.setRcolumn2(1);//英文Excel 读取列2 下表 从0开始 writeexcel.setRrowStart(0);//英文Excel 起始行 下标 从0开始 writeexcel.setMcolumn1(0);//多语言Excel 读取列1 下表 从0开始 writeexcel.setMcolumn2(1);//多语言Excel 读取列2 下表 从0开始 writeexcel.setMrowStart(0);//多语言Excel 起始行 下标 从0开始 writeexcel.ModifyExcel(); } }
完毕,例子需要jxl.jar包支持,1.4以上的 不要超过2.0
最后推荐一个博客作者关于jxl.jar的一个例子:http://playboy1987228.javaeye.com/blog/434671
相关文章推荐
- 使用jxl.jar操作Excel
- Jxl.jar操作excel使用总结
- Excel学习2_使用jxl.jar操作Excel之使用createSheet(String,int)要注意int的编号
- 使用jxl.jar来进行excel操作
- 使用jxl.jar操作Excel之使用createSheet(String,int)要注意的地方
- Java使用jxl.jar操作Excel
- Java操作Excel使用jxl.jar--读取Excel
- 使用jxl.jar进行Excel操作将实例属性存入表中
- java 使用jxl 操作Excel
- 使用apache 提供的jxl.jar 导出excel
- 使用jxl.jar处理excel文档,创建的excel文件不能写入数据
- java使用jxl简单操作Excel
- java使用jxl工具导入导出excel操作
- 使用jxl操作Excel
- 使用JAVA EXCEL API(jxl.jar)读写excel文件
- jxl.jar ---EXCEL操作工具包
- Java解释Excel数据(jxl.jar包的使用)
- android 使用数据库事务提高操作效率
- jxl.jar包简介/java操作excel jxl.jar
- jxl的使用总结(java操作excel)