HotXLS 文件

TXLSWorkbookViewer 元件

TXLSWorkbookViewer 是一個 VCL 控制項,不需 Microsoft Excel 或 COM 自動化,就能顯示兩種活頁簿引擎的工作表

活頁簿來源

導覽

控制項提供水平與垂直捲軸、滑鼠滾輪捲動、滑鼠拖曳、Shift 範圍延伸、方向鍵、Home、Page Up、Page Down 與 Tab 導覽

GoToCell 選取列與欄,SelectRange 選取矩形,NextWorksheet 與 PreviousWorksheet 切換工作表,SelectedRange 則暴露正規化後的 A1 參照

編輯與計算

把 Editable 設為 True,即可允許 F2、雙擊、可列印字元鍵、Delete 與資料編輯列編輯;受保護工作表上的鎖定儲存格仍維持唯讀

BeginEdit、CommitEdit 與 CancelEdit 控制就地編輯器,EditSelectedCell 與 FormulaBarText 則支援外部的資料編輯列

提交的編輯會辨識公式、布林值、整數、浮點數、文字與空白輸入,接著重算相依公式,並讓條件格式與分頁快取失效

Undo 與 Redo 使用 O(1) 有界環狀歷史;UndoLimit 可控制容量,設為 0 則停用歷史

Delete 或 ClearSelectedRange 會以單一交易清除選取範圍; Ctrl+C 與 CopySelectedRange 複製 Unicode Tab 分隔文字,而 Ctrl+V、 PasteSelectedRange與 PasteText 則在選取範圍左上角貼上矩形文字區塊,並只有一筆復原項目

保護與結構預檢會在變更前整體拒絕被封鎖的範圍;復原與重做在兩種模型中都保留原生 rich text、公式快取、樣式與缺漏儲存格,每次歷史操作都執行相同的保護檢查

既有的陣列公式、資料表區域,以及與合併儲存格相交的多儲存格貼上會被拒絕;單一合併錨點編輯與整個合併範圍的清除會保留合併幾何,部分合併範圍的清除則被拒絕

共用的 TXLSWorkbookEditHistory 引擎也可以在沒有控制項的情況下具現化;座標、生命週期、計算與操作上限規則請見無頭編輯交易

公式參照選取

當宿主公式編輯器正在收集工作表參照時呼叫 BeginReferencePick;在呼叫 EndReferencePick 之前,每次選取變更都會帶著目前的 A1 範圍觸發 OnReferencePick

算繪

檢視器使用每張工作表的欄寬、列高與格式化顯示文字,算繪傳統的實心填滿與字型樣式,並提供可設定的標題、格線與選取色彩

對 XLSX 工作表,檢視器還會算繪條件填滿、字型色彩與強調、數值格式、色階、具方向性的正負資料橫條、漸層、框線、座標軸、隱藏值,以及所有內建圖示集系列

檢視器為作用中工作表快取一份備妥的條件格式求值器,捲動與選取重繪時不會重新掃描活頁簿;在附加的活頁簿中變更值、公式、範圍或條件規則之後,請呼叫 RefreshConditionalFormats

XLSX 算繪檢查稀疏儲存格與區間樣式疊加層時,不會為空座標建索引,因此捲動不會具體化可見的空白儲存格,也不會擴大工作表儲存

列印預覽

把 PrintPreview 設為 True,即可透過 PDF 頁面幾何與計數共用的 TXLSPaginationModel 顯示作用中工作表

PreviewPage 為 1 起始,並限制在 PreviewPageCount 內;預覽作用時,方向鍵、Page Up、Page Down、Home、End、滑鼠滾輪與垂直捲動指令都在邏輯頁面之間導覽

PaginationModel 暴露快取的模型,SavePreviewPageAsMetafile 把所選邏輯頁寫成 EMF,RefreshPagination 則在值、尺寸、列印設定、分頁、標題或繪圖變更後重建快取

事件

Delphi 範例

Viewer := TXLSWorkbookViewer.Create(Self);
Viewer.Parent := Self;
Viewer.Align := alClient;
Viewer.XlsxWorkbook := Workbook;
Viewer.Editable := True;
Viewer.SelectRange(2, 1, 5, 3);
Caption := Viewer.SelectedRange;
Viewer.GoToCell(2, 3);
Viewer.FormulaBarText := '=A1*2';
Viewer.Undo;
Viewer.Redo;
Viewer.RefreshConditionalFormats;
Viewer.PrintPreview := True;
Viewer.PreviewPage := 1;
Viewer.SavePreviewPageAsMetafile('Preview.emf');
Viewer.GoToCell(12, 4);
Caption := Viewer.WorksheetName + ': ' + Viewer.SelectedCellText;

完整示範執行期建立檢視器、開檔與工作表控制的範例,請看 Demo\Delphi\WorkbookViewer