Java利用jxl.jar操做Excel文件的方法——把兩列相同的數據掃描輸出到新的Excel文件中

最近公司在作數據庫方面的改造,其中有兩個核心庫,能夠把它們分別命名成A側庫和B側庫,改造的目的是把AB的庫整合成一個庫,其中表名相同的表要進一步處理,可是每一個庫中都有上千張表,若是單憑本身逐一查看(即便利用工具)是至關費力的。忽然想到之前玩過JXL,因此能夠用它寫不到百行的代碼搞定這個事情。本文共分兩部分,第一部分主要介紹JAVA利用JXL操做Excel進行讀寫操做的方法,若是有JXL使用經驗的能夠略過;第二部分對第一部分所說的功能進行整合,其核心無非是對文件的讀寫,只不過這種文件格式比較特殊罷了。java

第一部分 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。優化

相關文章
相關標籤/搜索