[]
        
(Showing Draft Content)

方案

方案是一组可以自动替换到工作表中的值,用于确定公式可能产生的结果。你可以在这些方案之间进行切换,以查看不同的结果。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 还提供了以下属性:

      当工作表受保护时,这些方法在 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 不支持方案