[]
方案是一组可以自动替换到工作表中的值,用于确定公式可能产生的结果。你可以在这些方案之间进行切换,以查看不同的结果。GcExcel 允许你使用 IWorksheet 接口的 getScenarios 方法来创建并保存不同的方案。
GcExcel 提供了以下方法来添加和处理方案:
IScenarios 接口的 add 方法会创建一个新的方案,并将其添加到当前工作表可用的方案列表中。Add 方法包含以下参数,可用于定义方案:
name:方案的名称。
changingCells:一个 Range 对象,它指向方案中的可变单元格。这些值与可变单元格一一对应。如果可变单元格是 "B2:C3",则相应的值应按 B2、C2、B3、C3 的顺序给出。
values:一个值列表,其中包含可变单元格的方案值。如果此参数为 null,则方案值将是可变单元格中的当前值。
comment:一个字符串,用于指定方案的注释文本。如果此参数为 null,GcExcel 将自动添加作者姓名(即“Document Solutions for Excel”)和日期。
locked:锁定方案以防止更改。默认值为 True。
hidden:隐藏方案。默认值为 False。
注意:GcExcel 还提供了以下属性:
IProtectionSettings 接口的 setAllowEditingScenarios 方法,用于设置是否可以在受保护的工作表上编辑方案。
当工作表受保护时,这些方法在 Microsoft Excel 中可以使用,但在 GcExcel 中使用时没有任何限制。你可以根据 IWorksheet 接口的 setProtection 方法以及这两个方法的值来自定义操作。
IScenario 接口的 show 方法用于显示方案。此方法会将工作表中的值替换为可变单元格的值,并且引用这些可变单元格的公式将重新计算。如果计算引擎已关闭,则公式不会重新计算。
IScenario 接口的 delete 方法用于删除方案。
IScenario 接口的 changeScenario 方法用于更改方案,使其具有一组新的可变单元格和方案值。
注意:Microsoft Excel 最多支持 32 个可变单元格,但 GcExcel 没有此限制。因此,当使用 Microsoft Excel 且可变单元格超过 32 个时,无法打开“可变单元格”对话框。
参考以下示例代码,在工作表中创建并添加方案:
// 创建一个新的工作簿。
var workbook = new Workbook();
// 打开一个 Excel 文件。
workbook.open("What-If-Analysis-Scenarios.xlsx");
// 获取活动工作表。
var worksheet = workbook.getActiveSheet();
// 创建并添加不同的方案,这些方案代表不同的折扣率。
// 创建一个折扣率较低的方案。
// 可变单元格为 D2:D6。
List<Object> lessDiscountRatesValues = Arrays.asList(0.05, 0.02, 0.03, 0.02, 0.05);
var lessDiscountRates = worksheet.getScenarios().add("Less Discount Rates", worksheet.getRange("D2:D6"), lessDiscountRatesValues);
// 创建一个正常折扣率的方案。
// 可变单元格为 D2:D6。
List<Object> normalDiscountRatesValues = Arrays.asList(0.1, 0.05, 0.05, 0.05, 0.1);
var normalDiscountRates = worksheet.getScenarios().add("Normal Discount Rates", worksheet.getRange("D2:D6"), normalDiscountRatesValues);
// 创建一个无折扣销售的方案。
// 可变单元格为 D2:D6。
List<Object> sellingWithoutDiscountValues = Arrays.asList(0, 0, 0, 0, 0);
var sellingWithoutDiscount = worksheet.getScenarios().add("Selling Without Discount", worksheet.getRange("D2:D6"), sellingWithoutDiscountValues);
// 创建一个批量销售的方案。
// 可变单元格为 E2:E6。
List<Object> bulkQuantitySoldValues = Arrays.asList(1000, 1000, 1000, 1000, 1000);
var bulkQuantitySold = worksheet.getScenarios().add("Bulk Quantity Sold", worksheet.getRange("E2:E6"), bulkQuantitySoldValues);
// 保存工作簿。
workbook.save("CreateScenarios.xlsx");
参考以下示例代码,修改“Less Discount Rates”方案中可变单元格的值:
// 修改“Less Discount Rates”方案中可变单元格 D3 的值。
lessDiscountRatesValues.set(1, 0.04);
lessDiscountRates.changeScenario(worksheet.getRange("D2:D6"), lessDiscountRatesValues);
可变单元格“D3”的值从“0.02”更新为“0.04”。
修改前 | 修改后 |
---|---|
参考以下示例代码,显示“Less Discount Rates”方案:
// 显示“Less Discount Rates”方案。
worksheet.getScenarios().get("Less Discount Rates").show();
参考以下示例代码,显示“Normal Discount Rates”方案:
// 显示“Normal Discount Rates”方案。
worksheet.getScenarios().get("Normal Discount Rates").show();
参考以下示例代码,删除“Less Discount Rates”方案:
// 删除“Less Discount Rates”方案。
worksheet.getScenarios().get("Less Discount Rates").delete();
参考以下示例代码,隐藏“Less Discount Rates”方案:
// 创建一个折扣率较低的方案,并在工作表受保护时隐藏该方案。
List<Object> lessDiscountRatesValues = Arrays.asList(0.05, 0.02, 0.03, 0.02, 0.05);
var lessDiscountRates = worksheet.getScenarios().add("Less Discount Rates", worksheet.getRange("D2:D6"), lessDiscountRatesValues, null, false, true);
// 或者
// 在工作表受保护时隐藏“Less Discount Rates”方案。
worksheet.getScenarios().get("Less Discount Rates").setHidden(true);
参考以下示例代码,防止“Less Discount Rates”方案被更改:
// 创建一个折扣率较低的方案,并在工作表受保护时防止该方案被更改。
List<Object> lessDiscountRatesValues = Arrays.asList(0.05, 0.02, 0.03, 0.02, 0.05);
var lessDiscountRates = worksheet.getScenarios().add("Less Discount Rates", worksheet.getRange("D2:D6"), lessDiscountRatesValues, null, true);
// 或者
// 在工作表受保护时防止“Less Discount Rates”方案被更改。
worksheet.getScenarios().get("Less Discount Rates").setLocked(true);
参考以下示例代码,为“Less Discount Rates”方案添加注释:
// 为方案添加注释:“Created by Document Solutions for Excel”。
List<Object> lessDiscountRatesValues = Arrays.asList(0.05, 0.02, 0.03, 0.02, 0.05);
var lessDiscountRates = worksheet.getScenarios().add("Less Discount Rates", worksheet.getRange("D2:D6"), lessDiscountRatesValues, "Created by Document Solutions for Excel");
限制
GcExcel 不支持以下功能:
方案摘要
合并方案
SJS 和 SSJSON 文件中的方案,因为 SpreadJS 不支持方案