如何等待,直到Excel继续使用win32com之前计算公式
我有一个win32com Python脚本,将多个Excel文件合并到一个电子表格中,并将其保存为PDF。
它现在的工作原理是输出几乎全是#NAME?
因为在计算Excel文件的内容(可能需要一分钟)之前输出该文件。
我如何强制工作簿计算值并等到完成之后再继续?
excel = win32.Dispatch('Excel.Application') # moving stuff to this spreadsheet wb1 = excel.Workbooks.Open(filepath1) ws1 = excel.ActiveSheet # from this spreadsheet wb2 = excel.Workbooks.Open(filepath2) ws2 = excel.ActiveSheet # supposedly this should do it, but I haven't seen results ws1.EnableCalculation = True ws2.EnableCalculation = True ws1.Calculate ws2.Calculate wb1.Cells(2, 4).Value = wb2.Cells(1,1).Value # doing stuff with values # right here I need it to wait and calculate everything # so when I export it, I see the values, not the formula or "#NAME?" wb1.Save() ws1.ExportAsFixedFormat(0, r'C:\filename.pdf') wb1.Close(True) wb2.Close(True) excel.Application(Quit)
我曾经为单元格工作过的一件愚蠢的事情,但不是为了图表,而是通过整个工作表的值设置自己,以便公式被数值覆盖。
但是,图表仍然没有更新到它们的值。
range = ws1.UsedRange num_rows = range.Row + range.Rows.Count - 1 num_cols = range.Column + range.Columns.Count - 1 for i in range(1, num_rows ): for j in range(1, num_cols ): ws1.Cells(i, j).Value = ws1.Cells(i, j).Value
你必须小心地使用()语法来调用函数:
ws1.Calculate() ws2.Calculate()
这将计算两个工作表的所有单元格。 看起来,每个函数只有在完成所有计算后才会返回,这是您想要的效果,所以除非我误解了您的问题,修复应该是足够的。
从我上面的评论:
问题最终成为别的东西,我在这里回答: https : //stackoverflow.com/a/25495515/2374028
如果您使用任何types的脚本语言,包括Python的win32com,它不会自动包含加载项,我的计算使用加载项,所以它只是跳过它们。