下面我就以JavaScript為案例來展示,實現純前端讀取和匯出excel檔案。
一、讀取EXCEL
讀取excel主要是透過方法來實現,返回一個叫的物件,type主要取值如下:
1.1讀取本地檔案程式碼:
1.2 讀取網路檔案:
解讀workbook:
裡面有什麼東西呢,我們打印出來看一下:
可以看到,裡面儲存了所有的sheet名字,然後則儲存了每個sheet的具體內容(我們稱之為)。每一個是透過類似這樣的鍵值儲存每個單元格的內容,我們稱之為單元格物件():
每一個表示一張表格,只要不是開頭的都表示普通,否則,表示一些特殊含義,具體如下:
單元格物件
每一個單元格是一個物件(),主要有、、、、等欄位(詳見這裡):
根據確定excel的範圍,再根據確定單元格合併(如果有),最後輸出整個table,比較麻煩,幸運的是,外掛自身已經寫好工具類給我們直接使用,無需我們自己遍歷,工具類輸出主要包括如下:
常用的主要是或者,轉csv的話會忽略格式、單元格合併等資訊,所以複雜表格可能不適用。轉html的話會保留單元格合併,但是生成的是程式碼,而不是,需要對錶格進行一些定製時不太方便,所以具體還是要視情況來採用合適的工具類。
二、生成excel
匯出分為2種,一種是基於現有excel修改,一種是全新生成,前者比較簡單,我們這裡著重講後者
2.1自己手寫程式碼生成
匯出excel檔案,主要是如何生成一個,我們這裡寫一個最簡單的csv轉excel示例:
拿到上面的blob物件就可以直接下載了。
2.2 利用官方工具生成
其實上面這些程式碼都不需要我們手寫,官方已經提供好了現成的工具類給我們使用,主要包括:
以aoa_to_sheet為例:
下面我就以JavaScript為案例來展示,實現純前端讀取和匯出excel檔案。
一、讀取EXCEL
讀取excel主要是透過方法來實現,返回一個叫的物件,type主要取值如下:
: 以base64方式讀取;: BinaryString格式(byte n is data.charCodeAt(n)): UTF8編碼的字串;: nodejs Buffer;: Uint8Array,8位無符號陣列;: 檔案的路徑(僅nodejs下支援);獲取work book物件1.1讀取本地檔案程式碼:
1.2 讀取網路檔案:
解讀workbook:
裡面有什麼東西呢,我們打印出來看一下:
可以看到,裡面儲存了所有的sheet名字,然後則儲存了每個sheet的具體內容(我們稱之為)。每一個是透過類似這樣的鍵值儲存每個單元格的內容,我們稱之為單元格物件():
每一個表示一張表格,只要不是開頭的都表示普通,否則,表示一些特殊含義,具體如下:
:表示所有單元格的範圍,例如從A1到F8則記錄為;:存放一些單元格合併資訊,是一個數組,每個陣列由包含和構成的物件組成,表示開始,表示結束,表示行,表示列;單元格物件
每一個單元格是一個物件(),主要有、、、、等欄位(詳見這裡):
t:表示內容型別,表示string型別,表示number型別,表示boolean型別,表示date型別,等等v:表示原始值;f:表示公式,如;h:HTML內容w:格式化後的內容r:富文字內容根據確定excel的範圍,再根據確定單元格合併(如果有),最後輸出整個table,比較麻煩,幸運的是,外掛自身已經寫好工具類給我們直接使用,無需我們自己遍歷,工具類輸出主要包括如下:
常用的主要是或者,轉csv的話會忽略格式、單元格合併等資訊,所以複雜表格可能不適用。轉html的話會保留單元格合併,但是生成的是程式碼,而不是,需要對錶格進行一些定製時不太方便,所以具體還是要視情況來採用合適的工具類。
二、生成excel
匯出分為2種,一種是基於現有excel修改,一種是全新生成,前者比較簡單,我們這裡著重講後者
2.1自己手寫程式碼生成
匯出excel檔案,主要是如何生成一個,我們這裡寫一個最簡單的csv轉excel示例:
拿到上面的blob物件就可以直接下載了。
2.2 利用官方工具生成
其實上面這些程式碼都不需要我們手寫,官方已經提供好了現成的工具類給我們使用,主要包括:
: 這個工具類最強大也最實用了,將一個二維陣列轉成sheet,會自動處理number、string、boolean、date等型別資料;: 將一個直接轉成sheet,會自動識別和並將其轉成對應的單元格合併;: 將一個由物件組成的陣列轉成sheet;以aoa_to_sheet為例: