如何使用Pycel编译含跨工作表依赖的多工作表Excel文件?
首先明确:Pycel完全支持处理跨工作表的单元格依赖——正如@Stephen Rauch所说,它的核心是针对单个单元格工作的,不管这些单元格属于工作簿里的哪一个工作表,只要存在依赖关系,Pycel就能追踪到。
你遇到的空图表问题,本质是因为默认情况下ExcelCompiler不会主动加载所有工作表的所有单元格,它采用的是按需加载的逻辑:只有当你明确要求评估某个单元格时,它才会回溯加载这个单元格的所有上游依赖(包括其他工作表里的单元格)。你直接调用plot_graph()时没有指定目标单元格,它只会检查默认的Sheet1,而这个工作表是空的,所以生成了空图表。
下面是解决这个问题的具体步骤:
1. 指定单个目标单元格
先确定你关心的核心结果单元格(比如某个工作表里的最终计算值),通过evaluate()方法让Pycel加载它的所有依赖。举个例子,假设你要追踪Sheet2!A1的完整依赖链:
import pycel excel = pycel.ExcelCompiler('excelcompiler.xlsx') # 触发依赖加载:评估目标单元格 excel.evaluate('Sheet2!A1') # 现在绘制包含跨表依赖的图表 excel.plot_graph()
执行这段代码后,Pycel会自动加载所有影响Sheet2!A1的单元格,不管它们在哪个工作表里,生成的图表也会包含这些跨工作表的依赖关系。
2. 批量处理多个目标单元格
如果你的能源评级工具里有多个关键输出单元格,可以一次性遍历评估它们:
import pycel excel = pycel.ExcelCompiler('excelcompiler.xlsx') # 列出所有需要追踪的核心结果单元格 target_cells = ['EnergyRating!B10', 'CarbonEmissions!C5', 'Summary!A1'] # 逐个评估,触发依赖加载 for cell in target_cells: excel.evaluate(cell) # 生成包含所有目标单元格依赖的图表 excel.plot_graph()
3. 验证已加载的单元格
你可以通过known_cells()方法查看Pycel已经加载的所有单元格,确认跨工作表的依赖是否被正确捕获:
for cell in excel.known_cells(): print(cell)
针对你的场景的小建议
对于爱尔兰国家建筑能源评级工具这类复杂的Excel模型,建议先梳理清楚核心的输出单元格(比如最终的能源评级等级、碳排放总量等),以这些单元格为起点让Pycel回溯加载依赖。这样既能保证编译出的Python代码只包含必要的计算逻辑,也能准确捕获所有跨工作表的计算关系,完美适配你后续用于都柏林建筑政策模拟的需求。
内容的提问来源于stack exchange,提问作者rdmolony

