保存ex表格保错
import xlwings as xwfrom 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['上市']
# 定义要填充公式的列
tjval1 = ['e', 'k']
# 处理每一列
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()} 列公式已转换为数值。")
# 清空 'Sheet1' 内容
workbook = load_workbook(file_path)
if 'Sheet1' in workbook.sheetnames:
sheet1 = workbook['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' 内容已清空。")
tengke 发表于 2024-12-26 11:14
Traceback (most recent call last):
File "D:\软 ...
出现这个错误是因为程序在尝试保存 Excel 文件时,文件可能仍然是打开状态,或者由于文件的权限设置,无法对其进行写入。这可能发生在文件刚刚被打开或正在被其他程序(如 Excel)占用的情况下。
以下是一些解决方法:
1. **检查文件是否被占用**:确保文件没有在 Excel 等程序中被打开。如果是,请先关闭该文件。
2. **更改代码先后顺序**:确保先关闭使用 `xlwings` 打开的 Excel 文件,再使用 `openpyxl` 进行保存。
3. **检查文件权限**:确保您的程序对该文件具有写入权限。
4. **使用不同的文件路径进行保存**:在保存文件时,尝试将其保存到一个新的文件路径,确保它不被占用。
根据您的代码应该调整一下顺序,确保 `xlwings` 工作簿关闭后再使用 `openpyxl`:
# 保存 Excel 工作簿并退出
excel_workbook.save()
excel_workbook.close()
app.quit()
# 使用 openpyxl 重新打开以便修改
workbook = load_workbook(file_path)
# 获取 Sheet1 工作表对象
sheet1 = workbook.active# 假设是第一个工作表
# 清空 '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)
print("所有公式已成功转换为数值,且 'Sheet1' 内容已清空。")
确保 `xlwings` 相关的内容在使用 `openpyxl` 之前已经完成并关闭。这样您就不会在文件仍被占用时尝试打开它进行保存操作。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 根据您提供的代码来看,可能存在以下几个问题:
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
# 定义要填充公式的列
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 小助理,如未能正确解答您的问题,请继续追问。 Traceback (most recent call last):
File "D:\软件\djangoProject\app\删除shell文件.py", line 52, in <module>
workbook.save(file_path)
File "D:\软件\djangoProject\venv\lib\site-packages\openpyxl\workbook\workbook.py", line 386, in save
save_workbook(self, filename)
File "D:\软件\djangoProject\venv\lib\site-packages\openpyxl\writer\excel.py", line 291, in save_workbook
archive = ZipFile(filename, 'w', ZIP_DEFLATED, allowZip64=True)
File "C:\Users\huawei\AppData\Local\Programs\Python\Python37\lib\zipfile.py", line 1240, in __init__
self.fp = io.open(file, filemode)
PermissionError: Permission denied: 'C:\\Users\\huawei\\Desktop\\上市集团资产.xlsx'
页:
[1]