[]
有时,在包含大量公式的工作表中,很难确定在进行计算时考虑了哪些单元格值或范围,或者如何计算结果。此外,如果修改了单元格值,哪些单元格会受到影响。因此,需要优先的和依赖的单元格或范围。GcExcel库在IRange接口中提供了getPrecedents和getDependents方法,这有助于在excel工作表中识别优先级和依赖的单元格或范围。
例如,单元格A1 =10, A2 = 20, B1 = Sum (A1+A2),则A1和A2是B1的引用单元格,用于计算B1的值。同样,B1是A1和A2的依赖单元格,其值是根据单元格A1和A2的值计算的。
请参阅以下示例代码以获取工作表中的引用区域
private static void DirectPrecedents() {
// Initialize workbook
Workbook workbook = new Workbook();
// Fetch default worksheet
IWorksheet worksheet = workbook.getWorksheets().get(0);
// Set Formula in Cell E2
worksheet.getRange("E2").setFormula("=sum(A1:A2, B4,C1:C3)");
// Set Value of Cells
worksheet.getRange("A1").setValue(1);
worksheet.getRange("A2").setValue(2);
worksheet.getRange("B4").setValue(3);
worksheet.getRange("C1").setValue(4);
worksheet.getRange("C2").setValue(5);
worksheet.getRange("C3").setValue(6);
// Get Precedent cells of Range E2
for (IRange item : worksheet.getRange("E2").getPrecedents()) {
item.getInterior().setColor(Color.GetPink());
}
// Saving workbook to Xlsx
workbook.save("36-Precedents.xlsx", SaveFileFormat.Xlsx);
下图展示了引用的单元格区域(粉色高亮显示)
请参阅以下示例代码以获取工作表中的引用其他单元格的公式区域。
private static void DirectDependents() {
// Initialize workbook
Workbook workbook = new Workbook();
// Fetch default worksheet
IWorksheet worksheet = workbook.getWorksheets().get(0);
// Set Value of Cell A1
worksheet.getRange("A1").setValue(100);
// Set Formula in Cell C1
worksheet.getRange("C1").setFormula("=$A$1");
// Set Formula in Range E1:E5
worksheet.getRange("E1:E5").setFormula("=$A$1");
// Get Dependent cells of Range A1
for (IRange item : worksheet.getRange("A1").getDependents()) {
item.getInterior().setColor(Color.GetLightGreen());
}
// Saving workbook to Xlsx
workbook.save("35-Dependents.xlsx", SaveFileFormat.Xlsx);
下图显示了引用单元格的公式区域(绿色高亮显示)。
通常使用多个引用的单元格区域来计算单元格公式。请参阅下面的示例代码,以获取工作表中的所有引用单元格区域。
private static void GetAllPrecedents() {
// 初始化工作簿
Workbook workbook = new Workbook();
//获取默认工作表
IWorksheet worksheet = workbook.getWorksheets().get(0);
//在单元格E2设置公式
worksheet.getRange("E2").setFormula("=sum(C1:C2)");
// 在单元格C1设置公式
worksheet.getRange("C1").setFormula("=B1");
// S在单元格B1设置公式
worksheet.getRange("B1").setFormula("=sum(A1:A2)");
//设置单元格值
worksheet.getRange("A1").setValue(1);
worksheet.getRange("A2").setValue(2);
worksheet.getRange("C2").setValue(3);
//获取E2的引用单元格
ArrayList list = new ArrayList();
for (IRange item : worksheet.getRange("E2").getPrecedents(true)) {
item.getInterior().setColor(Color.GetRed());
}
// 保存为xlsx文件
workbook.save("DirectIndirectPrecedents.xlsx", SaveFileFormat.Xlsx);
}
下图展示了E2单元格的所有引用信息
你可以使用getDependents方法获取单元格的直接和间接从属, 该方法提供了includeIndirect参数,该参数为true时,返回 目标单元格的直接和间接从属,为false时只返回直接从属。
参考以下示例代码以获取工作表中的所有从属
private static void DirectIndirectPrecedents() {
// Initialize workbook
Workbook workbook = new Workbook();
// Fetch default worksheet
IWorksheet worksheet = workbook.getWorksheets().get(0);
// Set Formula in Cell E2
worksheet.getRange("E2").setFormula("=sum(C1:C2)");
// Set Formula in Cell C1
worksheet.getRange("C1").setFormula("=B1");
// Set Formula in Cell B1
worksheet.getRange("B1").setFormula("=sum(A1:A2)");
// Set Value of Cells
worksheet.getRange("A1").setValue(1);
worksheet.getRange("A2").setValue(2);
worksheet.getRange("C2").setValue(3);
// Get Precedent cells of Range E2
ArrayList list = new ArrayList();
for (IRange item : worksheet.getRange("E2").getPrecedents(true)) {
item.getInterior().setColor(Color.GetRed());
}
// Saving workbook to Xlsx
workbook.save("DirectIndirectPrecedents.xlsx", SaveFileFormat.Xlsx);
}
获取关于单元格E2的所有引用的单元格区域(蓝色绿色高亮显示)
您还可以使用重载的getDependents方法来标识直接依赖项和间接依赖项,该方法提供includeIndirect参数。此参数设置为true时返回所有直接依赖项和间接依赖项。但是,其默认值为false,仅返回直接依赖项。
请参阅以下示例代码以获取工作表中的所有相关依赖。
private static void DirectIndirectPrecedents() {
// Initialize workbook
Workbook workbook = new Workbook();
// Fetch default worksheet
IWorksheet worksheet = workbook.getWorksheets().get(0);
// Set Formula in Cell E2
worksheet.getRange("E2").setFormula("=sum(C1:C2)");
// Set Formula in Cell C1
worksheet.getRange("C1").setFormula("=B1");
// Set Formula in Cell B1
worksheet.getRange("B1").setFormula("=sum(A1:A2)");
// Set Value of Cells
worksheet.getRange("A1").setValue(1);
worksheet.getRange("A2").setValue(2);
worksheet.getRange("C2").setValue(3);
// Get Precedent cells of Range E2
ArrayList list = new ArrayList();
for (IRange item : worksheet.getRange("E2").getPrecedents(true)) {
item.getInterior().setColor(Color.GetRed());
}
// Saving workbook to Xlsx
workbook.save("DirectIndirectPrecedents.xlsx", SaveFileFormat.Xlsx);
}
下图显示了单元格A1的所有依赖。