最近公司在做数据库方面的改造,其中有两个核心库,可以把它们分别命名成A侧库和B侧库,改造的目的是把AB的库整合成一个库,其中表名相同的表要进一步处理,但是每个库中都有上千张表,如果单凭自己逐一查看(即使利用工具)是相当费力的。突然想到以前玩过JXL,所以可以用它写不到百行的代码搞定这个事情。本文共分两部分,第一部分主要介绍JAVA利用JXL操作Excel进行读写操作的方法,如果有JXL使用经验的可以略过;第二部分对第一部分所说的功能进行整合,其核心无非是对文件的读写,只不过这种文件格式比较特殊罢了。
第一部分 JAVA利用JXL操作Excel的基本方法
准备工作:下载jxl.jar并加入到build path中;一个包括两列数据的excel文件放到项目的根目录即可。
无论是.txt还是.xls,其实说白了还是文件,对其进行处理无非就是文件的读写操作,没什么可说的。详见代码:
读取excel:
import java.io.File; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; public class ReadFromExcel { public static void main(String args[]) { try { Workbook book = Workbook.getWorkbook( new File( " read.xls " )); // 获得第1个工作表对象 Sheet sheet = book.getSheet( 0 ); // 得到第1列第1行的单元格 Cell cell1 = sheet.getCell( 0 , 0 ); // 得到第2列第1行的单元格 Cell cell2 = sheet.getCell( 1 , 0 ); int rows = sheet.getRows(); int counter = 0 ; for ( int i = 0 ; i < rows; i ++ ) { cell1 = sheet.getCell( 0 , i); for ( int j = 0 ; j < rows; j ++ ) { cell2 = sheet.getCell( 1 , j); if (cell1.getContents().equals(cell2.getContents())) { System.out.println(cell2.getContents()); counter ++ ; } } } System.out.println( " counter= " + counter); book.close(); } catch (Exception e) { System.out.println(e); } } }
写入excle:
import java.io.File; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; public class WriteToExcel { public static void main(String args[]) { try { WritableWorkbook wbook = Workbook.createWorkbook( new File( " write.xls " )); WritableSheet wsheet = wbook.createSheet( " 第一页 " , 0 ); // 在第1行第1列添加“00” wsheet.addCell( new Label( 0 , 0 , " 00 " )); // 在第1行第2列添加“10” wsheet.addCell( new Label( 1 , 0 , " 10 " )); wbook.write(); wbook.close(); } catch (Exception e) { System.out.println(e); } } }
第二部分 把两列中相等的数据扫描出来并输出到控制台并写到新的excel中
其实就是简单的两层循环,由于时间仓促,可优化的地方仍然很大,时间复杂度可以从n2到nlogn,有兴趣的同学可以研究下merge算法!详见代码:
import java.io.File; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; public class EqualMerge { public static void main(String args[]) { try { WritableWorkbook toBook = Workbook.createWorkbook( new File( " result.xls " )); WritableSheet toSheet = toBook.createSheet( " 第一页 " , 0 ); Workbook fromBook = Workbook.getWorkbook( new File( " test.xls " )); Sheet sheet = fromBook.getSheet( 0 ); Cell cell1; Cell cell2; int rows = sheet.getRows(); int counter = 0 ; for ( int i = 0 ; i < rows; i ++ ) { cell1 = sheet.getCell( 0 , i); for ( int j = 0 ; j < rows; j ++ ) { cell2 = sheet.getCell( 1 , j); if (cell1.getContents().equals(cell2.getContents())) { System.out.println(cell2.getContents()); toSheet.addCell( new Label( 0 , counter, cell2 .getContents())); counter ++ ; } } } toBook.write(); fromBook.close(); toBook.close(); } catch (Exception e) { System.out.println(e); } } }
总结一下:这个只是个原型,如果想要需要更复杂的功能这种架构并不是合理的,但是应付简单的操作足够了,还有就是excel有两个相关的函数也可实现类似的功能:IF和EXACT。