python - 使用 openpyxl 保存已编辑的 .xslx 工作表
问题描述
我一直在尝试使用 python 编辑 .xslx 工作表,并且我已经成功地能够更改单元格的值,但是当我使用 openpyxl 中的保存命令,关闭程序并打开 excel 电子表格时,没有保存任何更改。我附上了下面的代码,如果你能帮助我,我将不胜感激。我已经尝试阅读其他 stackoverflow 帖子,但是当我尝试他们建议的内容时它仍然不起作用,所以我转向在这里创建我的第一篇帖子。
def editStock(choice, edit, stockSymbol):
sheet = setup()
stockRow = getStockRow(stockSymbol)
if choice == 7 or choice == 3 or choice == 2 or choice == 1:
print("Before")
print(sheet.cell(row = stockRow, column = choice).value)
sheet.cell(row = stockRow, column = choice).value = edit
print("After")
print(sheet.cell(row = stockRow, column = choice).value)
else:
sheet.cell(row = stockRow, column = choice).value = float(edit)
workbook = getWorkBook()
workbook.save(filename="Stocks.xlsx")
这是我的setup()
:
def setup():
directory = "C:\\Users\\shrey\\Desktop"
directory = directory.lower()
os.chdir(directory)
spreadname = "Stocks.xlsx"
workbook = openpyxl.load_workbook(spreadname)
sheet = workbook["Sheet1"]
return sheet
这是我getWorkBook()
的参考:
def getWorkBook():
directory = "C:\\Users\\shrey\\Desktop"
directory = directory.lower()
os.chdir(directory)
spreadname = "Stocks.xlsx"
workbook = openpyxl.load_workbook(spreadname)
return workbook
这是我打电话时的输出editStock()
:
Before
None
After
Dec-21-2021
并证明它不起作用:日期没有改变
抱歉,图像不是很清晰,但 2021 年 12 月 21 日应该在“TSLA”之后
解决方案
实际上,您可能应该制作一个单独的测试脚本并共享整个内容,因为您可能发布了完全正确工作的方法,并且人们通常会在堆栈溢出时要求它(我不能只是抓取您的代码并运行它;通常应该是这样)
我写了这个小脚本来看看是怎么回事,对我来说它工作得很好。但我注意到有两张名为 Sheet1 的工作表。因此,请确保您正在查看不同的工作表(选项卡)。一旦我弄清楚了,数据就显示得很好。
此代码在我运行时有效(包括文件是否已存在):
import os
import openpyxl
spreadname = "Stocks.xlsx"
sheetname = "THISONE"
if not os.path.exists(spreadname):
workbook = openpyxl.Workbook()
workbook.create_sheet(title=sheetname)
else:
workbook = openpyxl.load_workbook(spreadname)
sheet = workbook[sheetname]
c1 = sheet.cell(row=3, column=6)
c1.value = 123.456
c2 = sheet['B9']
c2.value = 456.321
workbook.save(spreadname)
具体来说,它会创建一个名为“THISONE”的工作表,并且数据就在那里。
推荐阅读
- node.js - 在单存储库中使用 Lerna 对多个 Node 应用程序进行 Dockerizing
- r - 忽略特定警告,但不忽略 R 中的其他警告
- c++ - 在 C++ 类中初始化静态值彼此相等
- sharepoint-online - 我们可以使用逻辑应用来获取 Sharepoint 在线网站上的点击次数吗
- qt - Qt Creator:没有可用的文档
- asp.net-core - 异步等待返回任务 Null .Net Core
- javascript - 循环遍历 v-for 中的数组子集
- docker - PhpStorm + Docker 正在复制供应商文件
- r - 在R中将周末日期更改为工作日日期
- django - 作为认证用户的 django-allauth 测试请求