標籤:java 通訊錄 備份 jxl
前段時間我哥備份手機通訊錄備份的是xls表格格式,然後現在匯入不進去了,用各種軟體都是錯誤。我匯出為vcard的(尾碼是vcf),以文本格式開啟看了下,發現vcard是很有格式規範的,頓時覺得有戲了。可以嘗試將excel表格轉換成vcard格式,然後匯入。
BEGIN:VCARDN:;移動客服;;;;;;TEL;CELL:10086STARRED:FalseUID:514VERSION:3.0REV:20140602END:VCARD
很明顯的格式,第二行就是姓名,tel那一行就是號碼。
而儲存的那個表格格式如下:
這樣的話,其實就很簡單了,只要把vcf格式裡面的姓名和號碼填充一下就可以了,而那個UID我則直接給的是迴圈數。
大體思路有了,再給實現。
1.讀取xls,直接用的是很老的jxl包,現在貌似已經不更新了。而一開始用這個動作表格的時候,提示Unable to recognize OLE stream,度娘告訴我,這是因為:
你是用什麼2007 ? jxl目前停止更新了,不能讀寫 excel2007如果你要讀寫就用 apache POI ,差不多的用法支援 2003、2007 網上有很多執行個體。
無語,然後直接用wps開啟xls,另存新檔老版本的xls,ok。
2,jxl的文法,
參考這篇
jxl動作表格基礎文法
3,buffer寫檔案
這部分可以參看網路上很多東西。
jxl.jar的百度網盤串連:戳我下載
直接給出代碼吧,
類名:Oper.java
package core;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import jxl.Cell;import jxl.Sheet;import jxl.Workbook;import jxl.read.biff.BiffException;public class Oper {void test(){BufferedWriter out;try {out = new BufferedWriter(new FileWriter(new File("res/test.txt")));out.write("hello"+"\r\n"+"hello");out.close();} catch (IOException e) {e.printStackTrace();}}void work(){try {Workbook book=Workbook.getWorkbook(new File("res/3.xls"));BufferedWriter out=new BufferedWriter(new FileWriter(new File("res/out.vcf")));//get the first sheetSheet sheet=book.getSheet(0);for(int i=0;i<231;i++){Cell cell1=sheet.getCell(0,i);String name=cell1.getContents();Cell cell2=sheet.getCell(1,i);String phone1=cell2.getContents();Cell cell3=sheet.getCell(2,i);String phone2=cell3.getContents();String phone;if(phone1.equals(""))phone=phone2;else phone=phone1;out.write("BEGIN:VCARD\r\n"+"N:;"+name+";;;;;;\r\n"+"TEL;CELL:"+phone+"\r\nUID:"+i+"\r\n"+"VERSION:3.0\r\nREV:20140602\r\nEND:VCARD\r\n");out.write(name);}out.close();book.close();} catch (BiffException | IOException e) {System.out.println("not find");e.printStackTrace();}}public static void main(String[] args) {new Oper().work();}}
我已經用wps查看過了,有231行資料,所以迴圈了231次。
讀入的檔案在工程目錄下/res/3.xls,輸出是/res/out.vcf.然後,通過各種手機小幫手就能夠匯入目錄了。