close

前一陣子因為要寫一個APP使用EXCEL作為紀錄DATA的資料庫

所以找了JXL這套API

 

但不是每次都是紀錄新的紀錄刷掉舊的紀錄

因此我需要可以繼續往下新增紀錄的功能

 

我嘗試了這套API中的 importSheet 以及 copySheet ,但都沒有見效(?

後來爬了許多文章發現了一個非常簡單又直觀的方法

邏輯大概是如下這樣

---------------------------------------------------------------------------------------------------------------
有兩個 Excel ,個別是 onlyRead.xls 以及 writable.xls
onlyRead.xls 主要作為儲存DATA使用
writable.xls    這個Excel主要是幫助覆寫與覆蓋所使用(後續會提

 

為什麼要分兩個Excel的原因是因為在使用JXL這套API中
有兩個不同的型態,分別為 Workbook 以及 WritableWorkbook

 

Workbook              是個只能讀取,並不能改寫其內容的一種型態 
WritableWorkbook 是個能夠改變、編寫其Excel內容的一種型態

 

就上述的說明,可以很明顯的知道哪個Excel要被賦與哪種型態
Workbook -> onlyRead.xls
WritableWorkbook -> Writable.xls

 

想要達到目標功能的邏輯其實就是:
讀取已經存在的檔案 -> 開一個新的可編輯的檔案並將已經存在的檔案的內容複製
到這個新檔案 -> 編輯這個新檔案 -> 把原先已存在的檔案用新開的檔案覆蓋掉

 

------------------------------------------------------------------------------------------------------------------

 

以下程式碼:(分為3個部份)

第一部份
先讀取已經存在的檔案,並將此 Workbook 叫做 onlyRead

 

第二部份
創建一個可以編輯的 WritableWorkbook ,叫做 writable,並將onlyRead的內容複製於writable
創建一個可以編輯的 sheet ,叫做 writableSheet
在想要新增或修改的地方呼叫 addCell()
結束編輯後要記得使用 write() 將剛剛所編輯的東西寫入 writable 這個 WritableWorkbook
記得寫入後若再繼續 addCell() 是沒有用的
寫入完成後把 writable 關閉

 

第三部份
此部份主要是做覆蓋的動作
剛剛在第二部份已經把 wirtable 關閉,目的是不佔空間
現在要關閉第一部份的 onlyRead ,原因是因為要覆蓋了
或沒有先將 onlyRead 關閉則會再執行時出現錯誤
至於「覆寫與覆蓋」的覆蓋就是再這個部份
其動作跟第二部份雷同
先創建一個只能讀取的 Workbook 叫做 onlyRead_2
這個onlyRead_2 就是第二部份的writable
再創建一個WritableWorkbook 叫做 writable_2
這個writable_2 就是第一部份的 onlyRead,並將onlyRead_2 的內容複製於writable_2
就可以寫入與關閉writable_2了

 

 

 

----------------------------------------------------------------------------------------------------
以下程式碼提供複製並測試用

        Workbook onlyRead = Workbook.getWorkbook(new File("/home/yuda/onlyRead.xls"));
        
        WritableWorkbook writable = Workbook.createWorkbook(new File("/home/yuda/writable.xls"),onlyRead);
        WritableSheet writableSheet = writable.getSheet(0);
        writableSheet.addCell(new Label(7,13,"asdfghjk"));
        writable.write();
        writable.close();
        
        
        onlyRead.close();
        Workbook onlyRead_2 = Workbook.getWorkbook(new File("/home/yuda/writable.xls"));
        WritableWorkbook writable_2 = Workbook.createWorkbook(new File("/home/yuda/onlyRead.xls"),onlyRead_2);
        writable_2.write();
        writable_2.close();

arrow
arrow
    全站熱搜

    魚大 發表在 痞客邦 留言(0) 人氣()