把a.xlsx追加到b.xlsx中时,怎么只追加a.xlsx的公式结果,而不是公式本身,把原本a.xlsx有公式的部分在追加后面变成空白的
时间: 2024-09-28 10:10:13 浏览: 39
Python代码源码-实操案例-框架案例-解决pandas.to excel()函数覆盖原有Sheet页的问题.zip
当您想要将a.xlsx的内容追加到b.xlsx中,特别是保留公式的结果而非公式本身时,通常需要对数据进行一些特殊处理。由于OpenPyXL库默认不会包含公式,而只是存储它们的结果,所以在大部分情况下,您可以直接将a.xlsx的数据追加到b.xlsx对应的单元格,公式结果会自动更新。
但是,如果你确实想保持原始文件的公式不变,同时只追加其计算结果,你需要先在a.xlsx中手动处理公式。这可以通过两步骤完成:
1. **临时保存公式结果**:
- 将a.xlsx中的含有公式的单元格替换为它们的计算结果,可以使用`openpyxl`库的`cell.value`属性获取公式计算得到的值。
- 然后保存这个临时文件为新的临时工作簿c.xlsx。
2. **追加计算结果显示到b.xlsx**:
- 使用`openpyxl`读取c.xlsx中的值,然后追加到b.xlsx的相应位置。
下面是一个简化的示例代码片段,假设已经有一个函数`evaluate_formulas()`可以计算并返回单元格的值:
```python
import openpyxl
def update_excel_with_results(test_path, activity_path):
# 读取a.xlsx,获取计算结果
wb_temp = openpyxl.load_workbook(test_path)
temp_ws = wb_temp.active
result_ws = openpyxl.Workbook()
# 对于所有包含公式的单元格,获取并保存结果
for row in temp_ws.iter_rows():
for cell in row:
if cell.has_formula:
cell.value = evaluate_formulas(cell)
# 将结果存入新的工作簿c.xlsx
result_ws.active = temp_ws
result_ws.save('c.xlsx')
# 现在你可以用openpyxl加载并追加c.xlsx到b.xlsx
wb_activity = openpyxl.load_workbook(activity_path)
result_ws = openpyxl.load_workbook('c.xlsx')
for sheet in result_ws.sheetnames:
ws_b = wb_activity.get_sheet_by_name(sheet)
ws_temp = result_ws.get_sheet_by_name(sheet)
ws_b.append(ws_temp.values[1:]) # 跳过标题行
# 更新活动工作簿并保存
wb_activity.save(activity_path)
```
注意,这个例子假设公式计算函数`evaluate_formulas()`已经存在,并能正确处理公式。实际操作可能会因为复杂的公式逻辑或Excel的具体特性有所不同。
阅读全文