[]
        
(Showing Draft Content)

单变量求解

单变量求解(Goal Seek)操作根据期望或已知的结果为公式提供输入值。为了执行目标搜索操作,GcExcel 在 IRange 接口中提供了 goalSeek 方法,该方法使用 goalchangingCell 参数来执行操作。

goal 参数指定了期望的输出结果,而 changingCell 参数指定了其值将被改变的单元格。

goalSeek 方法是一个布尔型的方法,当找到对应的值时返回 true。如果没有找到该值,方法将返回 false,并且 changingCell 的值将保持不变。

为了确保使用 goalSeek 方法时得到正确结果,你必须遵循以下指导原则:

  • 调用此方法的 IRange 或 changingCell 参数必须是一个单一的单元格。

  • 调用此方法的 IRange 必须包含一个公式。

  • 调用此方法的 IRange 内的公式必须得出数值结果。

  • changingCell 参数不能包含公式。

参考以下示例代码,使用 goalSeek 方法来找出三月份缺失的费用,通过设置目标值为 150000 并将 changingCell 设置为 B3:

// Create a new workbook.
var workbook = new Workbook();

// Set MaximumIterations and MaximumChange.
workbook.getOptions().getFormulas().setMaximumIterations(1000);
workbook.getOptions().getFormulas().setMaximumChange(0.000001);

var activeSheet = workbook.getActiveSheet();
            
// Add row header titles.
activeSheet.getRange("A1:A4").setValue(new String[] { "January Expense", "February Expense", "March Expense", "Average" });

// January Expense.
activeSheet.getRange("B1").setValue(100000);
activeSheet.getRange("B1").setNumberFormat("$#,##0");

// February Expense.
activeSheet.getRange("B2").setValue(180000);
activeSheet.getRange("B2").setNumberFormat("$#,##0");
            
// March Expense.
activeSheet.getRange("B3").setNumberFormat("$#,##0");
            
// Average of all three monthly expenses.
activeSheet.getRange("B4").setFormula("=AVERAGE(B3,B2,B1)");
activeSheet.getRange("B4").setNumberFormat("$#,##0");

// Calculate the value of cell B3 using the GoalSeek method.
activeSheet.getRange("B4").goalSeek(150000, activeSheet.getRange("B3"));

activeSheet.getRange("A1:B4").autoFit();

// Save the Excel file.
workbook.save("GoalSeek.xlsx");

求解前

求解后

image

image

限制

type=danger

GcExcel 与 Excel 的计算,在某些情况下可能会存在精细度不一致的情况。