取excel欄位值採用下面2種。n為工作表sheet、中括號內為欄位座標例['B1']
n['B'+str(g)].value = 3.07
n.cell(row=2, column=g).value = 3.07
使用上方的語法,程式跑得很順,
採用下方的語法,一定會在w.save('p310b.xlsx') 此行出錯,
但是cell()理應是openpyxl的內部函數,為什麼會造成存款出錯???
註:cell()在別的程式是好好的。
報錯:
Traceback (most recent call last):
File "C:\Users\CathyMe\AppData\Local\Programs\Python\Python38\lib\site-package
s\openpyxl\utils\cell.py", line 110, in get_column_letter
return _STRING_COL_CACHE[idx]
KeyError: 23703
Traceback (most recent call last):
File "p310.py", line 39, in
w.save('p310b.xlsx') # p310b.xlsx
File "C:\Users\CathyMe\AppData\Local\Programs\Python\Python38\lib\site-package
s\openpyxl\workbook\workbook.py", line 407, in save
save_workbook(self, filename)
File "C:\Users\CathyMe\AppData\Local\Programs\Python\Python38\lib\site-package
s\openpyxl\writer\excel.py", line 293, in save_workbook
writer.save()下略。
完整程式碼如下
import openpyxl, sys, time
w = openpyxl.load_workbook('p310.xlsx')
s = w.sheetnames # ['Sheet']
n = w['Sheet']
print(n.max_row) # 23758
print(n.max_column) # 4
m = 0
for k in list(n['A']):
if k.value == 'Garlic':
m+=1
print(m) # 630
for g in range(2, n.max_row+1):
if n['A'+str(g)].value == 'Garlic':
#n['B'+str(g)].value = 3.07 # Garlic new cost 3.07
n.cell(row=2, column=g).value = 3.07
#if n['A'][g].value == 'Garlic':
#n.cell(row=2, column=g).value = 3.07 # Garlic new cost 3.07
#print(n['B'+str(g)].value) # Garlic origin cost 1.19
#sys.exit()
if n['A'+str(g)].value == 'Celery':
n['B'+str(g)].value = 1.19 # Celery new cost 1.19
w.save('p310b.xlsx') # p310b.xlsx
time.sleep(8) # 因為當機才加了這行,給ram緩衝時間,然而沒用
w = openpyxl.load_workbook('p310b.xlsx')
n = w['Sheet']
for g in range(1, n.max_row+1):
if n['A'+str(g)].value == 'Garlic':
print(n['B'+str(g)].value) # Garlic new cost 3.07
sys.exit()
Zero大大日安,我的電腦比較舊了,升不了級,所以可能是這方面的問題。(年初時跑這個還可以的)
@ iiuu 謝謝Houston :
等等, 升不了級, 表示問題沒解決吧? 怎會把我的回答設為最佳解答??
( 還是我誤解啥狀況? )
你先試試升級 pip 與 openpyxl 。
只要你跑得動 Python, 升級這兩個套件而不升 Python 應該是可行的, 因為這兩個不吃啥系統效能。
( 還是說,你不能升級 Python 且 Python 太舊而導致不能升級套件? 那我就沒轍了~ 得另等高明了~~ )
看起來是
File "C:\Users\CathyMe\AppData\Local\Programs\Python\Python38\lib\site-package
s\openpyxl\utils\cell.py", line 110, in get_column_letter
return _STRING_COL_CACHE[idx]
KeyError: 23703
不是 cell 寫值的問題