我正在處理pivot-tabled XLSX文件並編寫一個腳本來將它們解析爲每個選項卡的新文件。openpyxl python3 - 格式化整行ellicits奇怪的行爲
由於openpyxl在默認情況下不支持數據透視表,因此我需要做一些工作來重新插入在複製期間丟失的數據透視「樣式」。
爲此,我遍歷每行和每列,在列0中查找值Total
。一旦找到,該行應更改爲全部爲bold=True
。
相反,我收到了不規則的行爲,有時在第一個None
之後加粗所有單元格。我的print('bolding totals')
消息顯示它正在評估每個行/單元格。我是否有骨頭並將我的縮進旋到環上?也許?
from openpyxl import Workbook
from openpyxl import load_workbook
from copy import deepcopy
wb = load_workbook(filename=r'input.xlsx')
# Print 1
sheetlist = wb.get_sheet_names()
print(sheetlist)
for i in range(len(sheetlist)-1):
dest_filename = r''+sheetlist[i]+'.xlsx'
new_wb = Workbook()
ws = wb.get_sheet_by_name(sheetlist[i])
new_wb.add_sheet(ws, 0)
for k in range(0, new_wb.worksheets[0].get_highest_row()):
print(new_wb.worksheets[0].cell(row=k, column=0).value)
# ignore empty cells
if new_wb.worksheets[0].cell(row=k, column=0).value is not None:
if 'Total' in new_wb.worksheets[0].cell(row=k, column=0).value:
for j in range(0, new_wb.worksheets[0].get_highest_column()):
print('bolding totals, '+str(k), str(j))
new_wb.worksheets[0].cell(
row=k, column=j).style.font.bold = True
elif 'Total' not in new_wb.worksheets[0].cell(row=k, column=0).value:
for j in range(0, new_wb.worksheets[0].get_highest_column()):
print('not bolding anything')
new_wb.worksheets[0].cell(
row=k, column=j).style.font.bold = False
# remove the blank sheet created in new_wb by openpyxl
new_wb.remove_sheet(new_wb.get_sheet_by_name('Sheet'))
print(new_wb.get_sheet_names())
new_wb.save(dest_filename)
break # set to break after one sheet for testing
print('finished')
在這一點上,我懷疑這是在風格openpyxl處理的錯誤。我跑了另一個非常簡單的編輯,並得到奇怪的行爲
如果我們有一個粗體/非粗體單元格的簡單佈局。 然後我們運行這個簡單的命令來更改一個單元:
>>> new_wb.worksheets[0].cell(row=10,column=0).style.font.bold = False
整個列輸出的變化,而不是單獨的細胞。
嗨,錯誤。我以前遇到過問題。我更容易重寫整個應用程序直接使用Excel,通過COM端口驅動它,而不是修復'openpyxl'。這是我的帖子,有一個答案。希望它有助於:http://stackoverflow.com/questions/18145313/openpyxl-highlighting-multiple-cells-when-one-of-them-is-selected-upon-closing-t –
我投票結束這個問題,儘管它寫得很好,而且很有趣,因爲:(a)它沒有答案,被接受或以其他方式; (b)與實際和期望產出的聯繫已經死亡; (c)OP近兩年未訪問SO; (d)現在可能已經修復了任何相關的openpyxl錯誤; (e)它仍然顯示爲一個開放的問題,即使它現在是無法迴避的。 –
@AleksanderLidtke我不記得有關這方面的錯誤報告。您的評論似乎意味着openpyxl是非常錯誤的,我認爲這不是一個公平的表示。當然,如果可以的話,直接使用Excel是非常好的。你可能也想看看xlwings這樣做。 –