儲存格資料結構
儲存格位置
Univer Sheets 中的儲存格資料儲存在 IWorksheetData 的 cellData 欄位中。cellData 為二維 Map 結構,第一層與第二層索引分別代表列號與欄號;每一個儲存格是一個 ICellData 物件,包含儲存格值、樣式、型別等所有資訊。
cellData 的結構如下
interface IWorksheetData { cellData: { // 第 1 列(row) 0: { // 第 1 欄(column) 0: { v: 'A1' } // 第 2 欄 1: { v: 'B1' } } // 第 2 列 1: { // 第 1 欄 0: { v: 'A2' } // 第 2 欄 1: { v: 'B2' } } }}儲存格資訊
完整的儲存格資訊如下。
| 屬性 | 說明 |
|---|---|
| v | 儲存格的原始值 |
| s | 儲存格的樣式 id 或樣式物件 |
| t | 儲存格的型別 |
| p | 豐富文字,同時也是一個 📝 Univer Docs |
| f | 公式 |
| si | 公式 ID |
| custom | 自訂欄位 |
詳細了解 ICellData 各欄位的型別資訊。
儲存格原始值
cellData.v 儲存了儲存格的原始值,可以是字串或數字。有公式的儲存格,v 儲存公式的計算結果。
如下展示兩種不同的儲存格值。
interface IWorksheetData { cellData: { 0: { 0: { v: 'A1' } 1: { v: 1 } } }}儲存格樣式
cellData.s 儲存了儲存格的樣式 id 或樣式物件。
如果 s 是字串,表示樣式 id。Univer Sheets 支援對樣式做參照最佳化,將重複的樣式物件儲存在 IWorkbookData 的 styles 欄位中,為 Map 結構,每個 key 是樣式 id,value 是樣式物件。
請儘量避免使用帶透明度的顏色值(如 rgba),否則在啟用編輯狀態時,背景會透出下方儲存格的內容。
interface IWorkbookData { styles: { random_style_id_1: { fs: 12 bg: { rgb: '#ff0000' } } }}接著將 id 儲存在儲存格樣式中,以達到樣式重用的目的。
interface IWorksheetData { cellData: { 0: { 0: { v: 'A1' s: 'random_style_id_1' } 1: { v: 'B1' s: 'random_style_id_1' } } }}如果 s 是物件,則表示一個完整的儲存格樣式物件 IStyleData。
完整的樣式欄位如下。
| 屬性 | 說明 |
|---|---|
| ff | 字型 |
| fs | 字型大小 |
| it | 斜體 |
| bl | 粗體 |
| ul | 底線 |
| st | 刪除線 |
| ol | 上劃線 |
| bg | 背景顏色 |
| bd | 邊框 |
| cl | 字型顏色 |
| va | 上標下標 |
| tr | 文字旋转 |
| ht | 水平對齊方式 |
| vt | 垂直對齊方式 |
| tb | 截斷溢出 |
| pd | 內邊距 |
| n | 數字格式 |
詳細了解 IStyleData 各欄位的型別資訊。
字型
ff 是字串,表示字型名稱。
interface IStyleData { ff: 'Arial' // 字型名稱為 Arial}字型大小
fs 是數字,單位為 pt。
interface IStyleData { fs: 12 // 字型大小為 12 pt}斜體
it 是布林(數值),0 表示不斜體,1 表示斜體。
interface IStyleData { it: 1 // 斜體}粗體
bl 是布林(數值),0 表示非粗體,1 表示粗體。
interface IStyleData { bl: 1 // 粗體}底線
ul 是物件,表示底線樣式。
interface IStyleData { ul: { s: 1 // 是否顯示底線 c: 0 // 顏色是否跟隨字型顏色。當 `c` 為 1(TRUE)時,cl 不生效。預設值為 1 cl: { // 底線顏色 rgb: '#ff0000' } t: 0 // 底線類型 }}刪除線
st 是物件,表示刪除線樣式。
interface IStyleData { st: { s: 1 // 是否顯示刪除線 c: 0 // 顏色是否跟隨字型顏色。當 `c` 為 1(TRUE)時,cl 不生效。預設值為 1 cl: { // 刪除線顏色 rgb: '#ff0000' } t: 0 // 刪除線類型 }}上劃線
ol 是物件,表示上劃線樣式。
interface IStyleData { ol: { s: 1 // 是否顯示上劃線 c: 0 // 顏色是否跟隨字型顏色。當 `c` 為 1(TRUE)時,cl 不生效。預設值為 1 cl: { // 上劃線顏色 rgb: '#ff0000' } t: 0 // 上劃線類型 }}背景顏色
bg 是物件,表示背景顏色。
interface IStyleData { bg: { rgb: '#ff0000' // 背景顏色為紅色 }}邊框
bd 是物件,表示邊框樣式。
interface IStyleData { bd: { // 上邊框 t: { s: 0 // 邊框樣式 cl: { // 邊框顏色 rgb: '#ff0000' } } // 下邊框 b: { s: 0 // 邊框樣式 cl: { // 邊框顏色 rgb: '#ff0000' } } // 左邊框 l: { s: 0 // 邊框樣式 cl: { // 邊框顏色 rgb: '#ff0000' } } // 右邊框 r: { s: 0 // 邊框樣式 cl: { // 邊框顏色 rgb: '#ff0000' } } }}字型顏色
cl 是物件,表示字型顏色。
interface IStyleData { cl: { rgb: '#ff0000' // 字型顏色為紅色 }}上標下標
va 是數值列舉,1 表示正常,2 表示下標,3 表示上標。
interface IStyleData { va: 2 // 下標}文字旋转
tr 是物件,表示文字旋轉。
interface IStyleData { tr: { a: 0 // 文字旋轉角度 v: 0 // 是否垂直。1 表示垂直,0 表示水平。預設值為 0。當 v 為 1 時,a 無效 }}水平對齊方式
ht 是數值列舉,1 表示靠左,2 表示置中,3 表示靠右。
interface IStyleData { ht: 1 // 靠左}垂直對齊方式
vt 是數值列舉,1 表示頂端對齊,2 表示置中,3 表示底端對齊。
interface IStyleData { vt: 1 // 頂端對齊}截斷溢出
tb 是數值列舉,1 表示溢出,2 表示截斷,3 表示自動換行。
interface IStyleData { tb: 1 // 溢出}內邊距
pd 是物件,表示內邊距。
interface IStyleData { pd: { t: 0 // 上邊距 b: 0 // 下邊距 l: 0 // 左邊距 r: 0 // 右邊距 }}數字格式
n 是物件,其 pattern 欄位表示數字格式。數字格式是一個字串,請參考這裡。
當 n 為 null 或 pattern 為 null 時,表示一般格式。
import type { DEFAULT_TEXT_FORMAT_EXCEL } from '@univerjs/core'interface IStyleData { n: { pattern: DEFAULT_TEXT_FORMAT_EXCEL // 文字格式 }}關於在儲存格輸入以 0 開頭或可轉換為日期格式的數字時,不想被預設轉換
儲存格型別
cellData.t 是一個列舉 CellValueType,表示儲存格的型別。1 表示字串,2 表示數字,3 表示布林值,4 表示強制文字;未設定時 Univer 會自動辨識。
其中,若儲存格為布林型別,則 cellData.v 的值以 0 或 1 儲存;0 表示 false,1 表示 true。
interface IWorksheetData { cellData: { 0: { 0: { v: 'A1' t: 1 // 字串 } 1: { v: 1 t: 2 // 數字 } 2: { v: 1 // TRUE t: 3 // 布林值 } 3: { v: '012.0' t: 4 // 強制文字 } } }}可配置 disableForceStringAlert 和 disableForceStringMark 來禁用強制文字警告和標記,配置項位置見:
豐富文字
cellData.p 是物件,表示豐富文字,同時也是一個 Univer Doc。詳細了解 IDocumentData。
當 p 與 v 同時存在時,僅會顯示 p 的內容。
cellData.p.body.dataStream 是豐富文字的內容。
公式
cellData.f 是字串,表示公式。
interface IWorksheetData { cellData: { 0: { 0: { f: '=SUM(A1:B1)' // 加總公式 } } }}公式 ID
cellData.si 是字串,表示公式 ID。Univer Sheets 支援對公式做參照最佳化,儲存格中以 si 關聯上目前公式後,其他儲存格可以透過 si 參照到該公式。注意,帶有 si 的儲存格位置必須位於參照儲存格的右下角,否則匯出為 XLSX 時會出錯。
可透過 Facade API range.getFormulas() 取得實際公式。規則為先取得 si 對應的公式 f,再根據當前儲存格位置到參照位置的位移量計算實際公式。
interface IWorksheetData { cellData: { 0: { 0: { f: '=SUM(A1:B1)' // 加總公式 si: 'random_formula_id_1' // 目前公式的 id } 1: { si: 'random_formula_id_1' // 計算時取此 id 對應的公式 } } }}自訂欄位
cellData.custom 是物件,表示自訂欄位。可放入任何符合 JSON 格式的資料,用於自訂儲存一些額外資訊。
更新 custom 資料會覆蓋原有的 custom 資料;若在更新時需要保留原有的 custom 資料,請先取得並與新資料合併後再更新。
custom 欄位僅適用於部分特殊情境,儲存在該欄位中的資料可能因使用者的任何操作被覆蓋或刪除,請謹慎使用。
interface IWorksheetData { cellData: { 0: { 0: { custom: { key: 'value' } } } }}你覺得這篇文檔如何?