根据您提供的代码来看,可能存在以下几个问题:
1. `tjval1` 未定义:这会导致代码无法运行。`tjval1` 应该是一个包含列名的列表,用于表示要在哪些列应用公式。
2. `excel_sheet.range(cell).formula = formula` 用法错误:需要指定工作表。
3. 清空 'Sheet1' 的方法需要获取正确的工作表对象。
以下是一些修复和改进:
import xlwings as xw
from openpyxl import load_workbook
import os
file_path = r'C:\Users\huawei\Desktop\上市.xlsx'
# 检查文件是否存在
if not os.path.exists(file_path):
print(f"文件 {file_path} 不存在!")
exit()
# 使用 xlwings 打开 Excel 文件
app = xw.App(visible=False) # 不显示 Excel 窗口
excel_workbook = app.books.open(file_path)
# 假设第一个工作表
excel_sheet = excel_workbook.sheets[0]
# 定义要填充公式的列
tjval1 = ['C', 'D'] # 这里假设要填充的列是 C 列和 D 列
# 处理每一列
for col in tjval1:
# 添加 VLOOKUP 公式
for row in range(4, 19): # 从第 4 行到第 18 行
cell = f"{col.upper()}{row}" # 使用大写字母列名
formula = f"=VLOOKUP(B{row},Sheet1!A:B,2,FALSE)"
excel_sheet.range(cell).formula = formula
# 让 Excel 计算所有公式
excel_workbook.app.calculate()
# 将公式结果转换为数值
for row in range(4, 19): # 从第 4 行到第 18 行
cell = f"{col.upper()}{row}"
value = excel_sheet.range(cell).value # 获取计算后的值
excel_sheet.range(cell).value = value # 将计算后的值写回单元格
print(f"{col.upper()} 列公式已转换为数值。")
# 使用 openpyxl 重新打开以便修改
workbook = load_workbook(file_path)
# 获取 Sheet1 工作表
sheet1 = workbook['Sheet1']
# 清空 'Sheet1' 内容
for row in sheet1.iter_rows(min_row=1, max_col=sheet1.max_column, max_row=sheet1.max_row):
for cell in row:
cell.value = None # 将每个单元格的值设置为空
print("Sheet1 的内容已清空。")
# 保存修改后的文件
workbook.save(file_path)
# 保存 Excel 工作簿并退出
excel_workbook.save()
excel_workbook.close()
app.quit()
print("所有公式已成功转换为数值,且 'Sheet1' 内容已清空。")
请确保 `tjval1` 中填入了待填公式的列。以上代码假设您要将公式应用于 C 列和 D 列,您可以根据实际需要调整。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |