尝试使用Python 3.11向Excel的下一个空单元格添加值
我最近开始学习Python,把它当作一种爱好。现在我想做一个密码管理器,但为了保存一些变量,我需要打开Excel文件,把变量的数据复制到A列和B列的下一个空行里。
我现在尝试了这个方法,但没有成功:
value3 = v3.get()
value2 = v2.get()
folderPath = "C:\Password Manager"
if not os.path.exists(folderPath):
os.makedirs(folderPath)
filename = "Encrypted_Passwords.xlsx"
filePath = os.path.join(folderPath, filename)
print(filePath)
open(filePath, "w+")
wb = openpyxl.load_workbook(filePath)
ws = wb.active
for i in range (ws.max_row):
if ws.cell(row=i, column=1).value == None:
ws.cell(row=i, column=1).value = value2
ws.cell(row=i, column=2).value = value3
如果有人能帮我,我会非常感激,因为我已经为这个问题纠结了好几天。
2 个回答
0
这里是关于openpyxl中worksheet.max_row的文档链接:worksheet.max_row
如果你想在空行中写入值,你需要从 rowIndex = ws.max_row + 1
开始,而不是从 0
循环到 ws.max_row
。
例如,下面的代码可以正常工作:
ws.cell(row=ws.max_row + 1, column=1).value = value2
ws.cell(row=ws.max_row + 1, column=2).value = value3
如果你真的需要用一个循环来检查每一行,你可以把 for i in range(ws.max_row)
改成 for i in range(1, 1000)
:
import openpyxl
import os
value3 = v3.get()
value2 = v2.get()
folderPath = "C:\Password Manager"
# if not os.path.exists(folderPath):
# os.makedirs(folderPath)
filename = "Encrypted_Passwords.xlsx"
filePath = os.path.join(folderPath, filename)
print(filePath)
# open(filePath, "w+")
wb = openpyxl.load_workbook(filePath)
ws = wb.active
for i in range(1, 1000):
if ws.cell(row=i, column=1).value is None:
ws.cell(row=i, column=1).value = value2
ws.cell(row=i, column=2).value = value3
break
wb.save(filePath)
如果你需要交替输入一组密码到A列和B列,可以试试下面的循环:
import openpyxl
import os
passwords = ["password1", "password2", "passw@rd3", "password4", "passowrd5"]
folderPath = "C:\Password Manager"
filename = "Encrypted_Passwords.xlsx"
filePath = os.path.join(folderPath, filename)
print(filePath)
wb = openpyxl.load_workbook(filePath)
ws = wb.active
rowIdx = ws.max_row + 1
for i in range(0, len(passwords), 2):
ws.cell(row=rowIdx, column=1).value = passwords[i]
if i >= len(passwords) - 1:
break
ws.cell(row=rowIdx, column=2).value = passwords[i+1]
rowIdx += 1
wb.save(filePath)
1
如果你使用Openpyxl的'append'功能,它会把值添加到电子表格中下一个未使用的行。
比如说,你可以多次运行这段代码,每次运行时,value2和value3的值都会被添加到表格的末尾。
import os
import openpyxl
folderPath = "C:\Password Manager"
filename = "Encrypted_Passwords.xlsx"
value3 = 'password1'
value2 = 'password2'
if not os.path.exists(folderPath):
os.makedirs(folderPath)
filename = "Encrypted_Passwords.xlsx"
filePath = os.path.join(folderPath, filename)
print(filePath)
wb = openpyxl.load_workbook(filePath)
ws = wb.active
### Append the values as a list
ws.append([value3, value2])
wb.save(filePath)
使用Openpyxl的append功能时,值需要放在一个列表(或字典)里。当你用列表时,每个元素会被放到下一个列里,所以对于 [value3, value2]
来说,value3
会放在A列,value2
会放在B列,依此类推,列表中的所有元素都会这样处理。而且总是放在下一个空行上。
顺便提一下,ws.max_row和append会把“最大行”视为最后一行中有值的单元格,而这个值不能是(Python中的)None。所以如果你只在A列填了5行,但Z列填了10行,那么下一个未使用的行就是第11行(ws.max_row会等于10)。