[]
单变量求解(Goal Seek)操作根据期望或已知的结果为公式提供输入值。为了执行目标搜索操作,GcExcel 在 IRange 接口中提供了 goalSeek 方法,该方法使用 goal 和 changingCell 参数来执行操作。
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");
求解前 | 求解后 |
---|---|
type=danger
GcExcel 与 Excel 的计算,在某些情况下可能会存在精细度不一致的情况。