[]
CalcReference 封装一个或多个作为计算引用使用的工作表范围。可以使用此类检查引用是否跨越多个区域、是否引用其他工作簿或是否表示 3D 引用,并检索所引用的 IRange 对象或其值。
CustomFunction function = new CustomFunction(
"REFVALUES",
FunctionValueType.Object,
new Parameter[] { new Parameter(FunctionValueType.Object, true, false) }) {
public Object evaluate(Object[] arguments, ICalcContext context) {
CalcReference reference = (CalcReference) arguments[0];
return reference.getValues();
}
};
Workbook.AddCustomFunction(function);
worksheet.getRange("A1:B2").setValue(new Object[][] {{1, 2}, {3, 4}});
worksheet.getRange("C1").setFormula2("=REFVALUES(A1:B2)");
Object result = worksheet.getRange("C1").getValue();
final booleanfinal booleanfinal intfinal Object
CustomFunction function = new CustomFunction(
"REFRANGECOUNT",
FunctionValueType.Number,
new Parameter[] { new Parameter(FunctionValueType.Object, true, false) }) {
public Object evaluate(Object[] arguments, ICalcContext context) {
CalcReference reference = (CalcReference) arguments[0];
return reference.getRangeCount();
}
};
Workbook.AddCustomFunction(function);
worksheet.getRange("A1:B2").setValue(new Object[][] {{1, 2}, {3, 4}});
worksheet.getRange("C1").setFormula("=REFRANGECOUNT(A1:B2)");
Object rangeCount = worksheet.getRange("C1").getValue();
CustomFunction function = new CustomFunction(
"ISEXTERNALREF",
FunctionValueType.Boolean,
new Parameter[] { new Parameter(FunctionValueType.Object, true, false) }) {
public Object evaluate(Object[] arguments, ICalcContext context) {
CalcReference reference = (CalcReference) arguments[0];
return reference.getIsExternalReference();
}
};
Workbook.AddCustomFunction(function);
worksheet.getRange("A1:B2").setValue(new Object[][] {{1, 2}, {3, 4}});
worksheet.getRange("C1").setFormula("=ISEXTERNALREF(A1:B2)");
Object external = worksheet.getRange("C1").getValue();
true;否则为 false。
CustomFunction function = new CustomFunction(
"IS3DREF",
FunctionValueType.Boolean,
new Parameter[] { new Parameter(FunctionValueType.Object, true, false) }) {
public Object evaluate(Object[] arguments, ICalcContext context) {
CalcReference reference = (CalcReference) arguments[0];
return reference.getIs3DReference();
}
};
Workbook.AddCustomFunction(function);
worksheet.getRange("A1:B2").setValue(new Object[][] {{1, 2}, {3, 4}});
worksheet.getRange("C1").setFormula("=IS3DREF(A1:B2)");
Object is3D = worksheet.getRange("C1").getValue();
true;否则为 false。
CustomFunction function = new CustomFunction(
"REFRANGES",
FunctionValueType.Number,
new Parameter[] { new Parameter(FunctionValueType.Object, true, false) }) {
public Object evaluate(Object[] arguments, ICalcContext context) {
CalcReference reference = (CalcReference) arguments[0];
return reference.getRanges().size();
}
};
Workbook.AddCustomFunction(function);
worksheet.getRange("A1:B2").setValue(new Object[][] {{1, 2}, {3, 4}});
worksheet.getRange("C1").setFormula("=REFRANGES(A1:B2)");
Object rangeCount = worksheet.getRange("C1").getValue();
在自定义函数求值逻辑中使用此方法,可获取 CalcReference 参数所表示的值。
CustomFunction function = new CustomFunction(
"REFVALUES",
FunctionValueType.Object,
new Parameter[] { new Parameter(FunctionValueType.Object, true, false) }) {
public Object evaluate(Object[] arguments, ICalcContext context) {
CalcReference reference = (CalcReference) arguments[0];
return reference.getValues();
}
};
Workbook.AddCustomFunction(function);
worksheet.getRange("A1:B2").setValue(new Object[][] {{1, 2}, {3, 4}});
worksheet.getRange("C1").setFormula2("=REFVALUES(A1:B2)");
Object result = worksheet.getRange("C1").getValue();