在簡報中使用 C++ 套用圖表工作表公式
概述
圖表工作表是簡報中圖表背後的資料來源。它儲存類別與系列名稱,以及圖表顯示的數值。在 Aspose.Slides 中,這個工作表可透過圖表資料工作簿取得,讓您以程式方式操作圖表資料。
本文章說明如何在圖表資料中使用工作表公式,使儲存格值能自動計算與更新,而不必手動輸入。內容包括指派公式、使用 A1 以及 R1C1 兩種參照方式、重新計算工作簿公式,並說明在簡報圖表工作表中支援的常數、運算子、儲存格參照與預定義函式。
關於簡報中的圖表試算表公式
簡報中的 圖表試算表(或圖表工作表)是圖表的資料來源。圖表試算表包含資料,這些資料會以圖形方式呈現在圖表上。當您在 PowerPoint 中建立圖表時,系統會自動為該圖表建立對應的工作表。所有圖表類型皆會建立工作表:折線圖、長條圖、旭日圖、圓餅圖等。要在 PowerPoint 中查看圖表試算表,只需雙擊圖表:

圖表試算表包含圖表元素的名稱(類別名稱:Category1、系列名稱)以及對應於這些類別與系列的數值資料表。預設情況下,建立新圖表時,圖表試算表資料會以預設資料填入。之後您可以手動在工作表中變更資料。
通常,圖表會呈現複雜資料(例如財務分析、科學分析),其儲存格可能需要根據其它儲存格或動態資料計算得出。若手動計算儲存格值並硬寫入,日後變更將變得困難。若變更某個儲存格的值,所有依賴該儲存格的儲存格也必須同步更新。此外,表格資料可能依賴其他表格的資料,形成需要以簡易彈性方式更新的複雜簡報資料結構。
簡報中的 圖表試算表公式 是用來自動計算與更新圖表試算表資料的表達式。公式定義了某個儲存格或一組儲存格的資料計算邏輯。圖表試算表公式可以是數學公式或邏輯公式,使用:儲存格參照、數學函式、邏輯運算子、算術運算子、轉換函式、字串常數等。公式的定義寫入儲存格,而該儲存格本身不包含單純的值。公式計算後的結果會回傳並賦值給儲存格。簡報中的圖表試算表公式與 Excel 公式相同,且支援相同的預設函式、運算子與常數。
在 Aspose.Slides 中,圖表試算表由
ChartData::get_ChartDataWorkbook() 方法的
IChartDataWorkbook 類型表示。
可以使用
IChartDataCell::set_Formula() 方法指派或變更公式。
Aspose.Slides 支援的公式功能包括:
- 邏輯常數
- 數值常數
- 字串常數
- 錯誤常數
- 算術運算子
- 比較運算子
- A1 風格儲存格參照
- R1C1 風格儲存格參照
- 預定義函式
通常,試算表會儲存上一次計算的公式結果。若簡報載入後圖表資料未變更,IChartDataCell.get_Value() 會回傳這些值。若試算表資料已變更,讀取 ChartDataCell.get_Value() 時會拋出 CellUnsupportedDataException,因為無法保證未解析公式的儲存格值的正確性。
將圖表試算表公式加入簡報
首先,使用 IShapeCollection::AddChart() 在新簡報的第一張投影片加入圖表。圖表的工作表會自動建立,並可透過 ChartData::get_ChartDataWorkbook() 方法存取:
auto presentation = System::MakeObject<Presentation>();
auto chart = presentation->get_Slides()->idx_get(0)->get_Shapes()->AddChart(ChartType::ClusteredColumn, 150.0f, 150.0f, 500.0f, 300.0f);
auto workbook = chart->get_ChartData()->get_ChartDataWorkbook();
// ...
接著使用 Object 類型的
IChartDataCell.set_Value() 方法寫入儲存格值,您可以傳入任何型別的值:
workbook->GetCell(0, u"F2")->set_Value(System::ObjectExt::Box<double>(-2.5));
workbook->GetCell(0, u"G3")->set_Value(System::ObjectExt::Box<double>(6.3));
workbook->GetCell(0, u"H4")->set_Value(System::ObjectExt::Box<int32_t>(3));
要在儲存格寫入公式,請使用
IChartDataCell::set_Formula() 方法:
注意:此方法用於設定 A1 風格的儲存格參照。
若要設定 R1C1 風格的公式參照,可使用
IChartDataCell::set_R1C1Formula() 方法:
然後讀取 B2 與 C2 儲存格的值時,會自動計算出結果:
auto value1 = cell1->get_Value(); // 7.8
auto value2 = cell2->get_Value(); // 2.1
邏輯常數
您可以在儲存格公式中使用 FALSE 與 TRUE 這類邏輯常數:
數值常數
數字可使用一般或科學記號表示法建立圖表試算表公式:
字串常數
字串(或文字)常數是固定不變的值,例如日期、文字、數字等:
錯誤常數
當公式無法計算出結果時,會在儲存格中顯示錯誤代碼。每種錯誤都有對應的代碼:
- #DIV/0! - 公式嘗試除以零。
- #GETTING_DATA - 儲存格的值仍在計算中。
- #N/A - 資訊缺失或不可用。可能原因包括:公式使用的儲存格為空、存在多餘空格、拼寫錯誤等。
- #NAME? - 找不到某個儲存格或公式物件的名稱。
- #NULL! - 公式中有錯誤的語法,例如使用了「,」或空格取代冒號 (:)。
- #NUM! - 公式中的數值無效、過長或過小等。
- #REF! - 無效的儲存格參照。
- #VALUE! - 值類型不符合預期,例如將字串賦予數值儲存格。
算術運算子
您可以在圖表工作表公式中使用所有算術運算子:
| 運算子 | 含義 | 範例 |
|---|---|---|
| + (加號) | 加法或單元正號 | 2 + 3 |
| - (減號) | 減法或負號 | 2 - 3 -3 |
| * (星號) | 乘法 | 2 * 3 |
| / (斜線) | 除法 | 2 / 3 |
| % (百分號) | 百分比 | 30% |
| ^ (插入符號) | 次方 | 2 ^ 3 |
注意:若需變更計算順序,請將優先計算的部分加上括號。
比較運算子
您可以使用比較運算子比較儲存格的值。使用這些運算子比較時,結果會是 TRUE 或 FALSE 的邏輯值:
| 運算子 | 含義 | 範例 |
|---|---|---|
| = (等於) | 相等 | A2 = 3 |
| <> (不等於) | 不相等 | A2 <> 3 |
| > (大於) | 大於 | A2 > 3 |
| >= (大於等於) | 大於等於 | A2 >= 3 |
| < (小於) | 小於 | A2 < 3 |
| <= (小於等於) | 小於等於 | A2 <= 3 |
A1 風格儲存格參照
A1 風格儲存格參照 適用於欄位以字母標示(如 “A"),列以數字標示(如 “1")的工作表。A1 風格參照可依下表使用:
| 儲存格參照 | 範例 | ||
|---|---|---|---|
| 絕對 | 相對 | 混合 | |
| 儲存格 | $A$2 | A2 | A$2 $A2 |
| 列 | $2:$2 | 2:2 | - |
| 欄 | $A:$A | A:A | - |
| 範圍 | $A$2:$C$4 | A2:C4 | $A$2:C4 A$2:$C4 |
以下為在公式中使用 A1 風格儲存格參照的範例:
R1C1 風格儲存格參照
R1C1 風格儲存格參照 適用於列與欄皆以數字標示的工作表。R1C1 風格參照可依下表使用:
| 儲存格參照 | 範例 | ||
|---|---|---|---|
| 絕對 | 相對 | 混合 | |
| 儲存格 | R2C3 | R[2]C[3] | R2C[3] R[2]C3 |
| 列 | R2 | R[2] | - |
| 欄 | C3 | C[3] | - |
| 範圍 | R2C3:R5C7 | R[2]C[3]:R[5]C[7] | R2C3:R[5]C[7] R[2]C3:R5C[7] |
以下為在公式中使用 R1C1 風格儲存格參照的範例:
預定義函式
以下是可在公式中使用的預定義函式,可簡化實作。這些函式封裝了最常用的運算,例如:
- ABS
- AVERAGE
- CEILING
- CHOOSE
- CONCAT
- CONCATENATE
- DATE (1900 日期系統)
- DAYS
- FIND
- FINDB
- IF
- INDEX (參照形式)
- LOOKUP (向量形式)
- MATCH (向量形式)
- MAX
- SUM
- VLOOKUP
常見問題
是否支援將外部 Excel 檔案作為含公式圖表的資料來源?
是。Aspose.Slides 支援外部工作簿作為圖表的資料來源,讓您使用簡報外部的 XLSX 公式。
圖表公式是否能以工作表名稱引用同一工作簿內的工作表?
是。公式遵循標準 Excel 參照模型,您可以引用同一工作簿內或外部工作簿的其他工作表。若為外部參照,請使用 Excel 語法加入路徑與工作簿名稱。