重慶網(wǎng)站建設推廣seo網(wǎng)站排名助手
目錄
一、現(xiàn)象
二、分析
三、思考過程
五、解決
六、參考鏈接
一、現(xiàn)象
在excel里面輸入內(nèi)容,如 2023-2-17 12:00 保存后,傳回后端的數(shù)據(jù)被轉(zhuǎn)化成了 數(shù)值類型,這顯然是一種困擾。
如圖所示
二、分析
查閱了文檔和一些博客發(fā)現(xiàn)
Luckysheet在存儲數(shù)字類型的內(nèi)容時,支持多種格式轉(zhuǎn)換,所以需要保留原始值來做更多處理,比如同樣一個數(shù)字1
,設置成百分比格式就是"100%"
,設置成兩位小數(shù)數(shù)字就是"1.00"
,
還有一個原因是日期和時間格式的內(nèi)容原始值會存儲為一個數(shù)字,默認情況下,Luckysheet把1900-1-1 0:00:00
存儲為1
,把1900-1-1 0:00:00
以后的每一個時刻存儲為該時刻與1900-1-1 0:00:00
這個時刻的差值(以天為單位)。比如44127
就表示2020-10-23
這一天。
三、思考過程
1、查明文檔后我們知道,解決這個辦法的方式就是將數(shù)據(jù)轉(zhuǎn)化為"純文本"。將每一個cell 進行設置
{m: r.value, // 設置顯示值v: r.value, // 設置原始值// 設置為純文本模式,避免設置日期 e.g. 2020-08-29時,編輯模式彈出個日期選擇器ct: {//單元格值格式fa: "@", //格式名稱為自動格式t: "s", //格式類型為數(shù)字類型},// tb: 2, // 文本超出格子,自動換行。自動編輯模式撐開高度時,高度會變得很高}
2、一開始我的想法是利用?cellRenderBefore ,這個鉤子去初始化所有單元格的格式。后來我驚人的發(fā)現(xiàn),沒有值的單元格是沒有這個屬性的,不知道咋說,反正就是折騰半天不好使,尤其是復制來的數(shù)據(jù)格式還會被覆蓋 絕望
3、然后突然看到了上面的一個方法,是呢完全可以在更新數(shù)據(jù)后去轉(zhuǎn)化格式呀,cellUpdated。于是開始輾轉(zhuǎn)于此方法。然后一個新的想法誕生在我的腦子里,那就是... 完全可以最后【保存】的時候,對單元格里面的數(shù)據(jù)進行遍歷,替換他們的原有格式!!!
五、解決
在保存的時候,利用 let excelData = window.luckysheet.flowdata();? 獲取當前sheet里面的所有數(shù)據(jù)。打印出來你會看到熟悉且充滿希望的數(shù)據(jù)結(jié)構(gòu)。ct!!!!?
?接下來就遍歷替換就好了😎 so easy
excelData.map((item) => {if (item) {item.map((ll) => {if (ll) {ll.m = ll.m, ll.v = ll.m, ll.ct = {fa: "@",t: "s",};}});}});
成功替換,數(shù)據(jù)回顯成功! 🧩 記得?m 和 v 都用顯示值。
六、參考鏈接
?單元格 | Luckysheet文檔