您好,登錄后才能下訂單哦!
這篇文章主要講解了“分析openpyxl庫,遇到批量合并單元格的問題”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“分析openpyxl庫,遇到批量合并單元格的問題”吧!
from openpyxl import Workbook from openpyxl import load_workbook from openpyxl.styles import NamedStyle, Border, Side, Alignment # 創(chuàng)建一個(gè)工作薄 wb = Workbook() # 創(chuàng)建一個(gè)工作表(注意是一個(gè)屬性) table = wb.active # excel創(chuàng)建的工作表名默認(rèn)為sheet1,一下代碼實(shí)現(xiàn)了給新創(chuàng)建的工作表創(chuàng)建一個(gè)新的名字 table.title = 'test' # 合并C1 D1 # 法一 # table.merge_cells('C1:D1') # table.cell(row = 1,column = 3,value = 'pdf/mp3鏈接') # 法二 table.merge_cells(start_row=1, start_column=3, end_row=1, end_column=4) table.cell(1, 3).value = '合并2個(gè)單元格' # 法一不適合批量添加 for i in range(2,10): table.merge_cells(start_row=i, start_column=3, end_row=i, end_column=4)
效果如下:
補(bǔ)充:python操作excel --openpyxl里的關(guān)于merge的一些bug
開始新的工作不久,工作內(nèi)容依然是數(shù)據(jù)相關(guān)
新工作數(shù)據(jù)輸出模式是用excel,大概是每天導(dǎo)出新數(shù)據(jù)并用excel體現(xiàn),同時(shí)要保留之前的數(shù)據(jù)。
我來之前,同時(shí)寫好了許多sql,然后就從Navicat里面復(fù)制粘貼到excel中。
我目前在做關(guān)于這個(gè)的自動(dòng)化腳本,使用的庫是openpyxl,下面說說關(guān)于這個(gè)的幾個(gè)小bug。
1- 在 2.5.x版本中,當(dāng)你合并單元格的時(shí)候
使用的是merge_cells(),然后,當(dāng)你合并多個(gè)單元格的時(shí)候,之前合并的單元格的邊框會(huì)消失。這個(gè)問題我再官網(wǎng)找到解決方案,稍有復(fù)雜,但是只要你更新到2.6.x版本,這個(gè)問題自動(dòng)解決。
2- 2.6x版本中,使用unmerge_cell() 解開合并單元格后,除了左上角可以寫入,其他被解開的單元格無法寫入,會(huì)提示說 ‘read_only'這類的。
例如:你的 ("A1:D4") 是合并的,當(dāng)你使用 work_sheet.unmerge_cell("A1:D4")后,會(huì)解開合并,
然后你卻只能給A1賦值,不能給A2,A3,A4,B1....賦值,提示如下
=== > - Openpyxl ['MergedCell' object attribute 'hyperlink' is read-only]
我嘗試改用delete直接刪除,然而這種方法只能刪除內(nèi)容,格式還是被鎖定的。
找了很久沒有結(jié)局方法,只好慢慢看源碼。
大概是說,接觸合并后,代碼默認(rèn)其他單元格應(yīng)該是空值且不能被賦新值,也許是因?yàn)橛X得解開只有要再合并??(不明白設(shè)疑初衷)
處理方法如下,大概思想是格式化該單元格的屬性,即取消的read_only屬性。
大概在源碼的中workshet.py文件的大約620做添加如下代碼:(# autho...開始,大家自己對照源碼添加吧~~~)
........................ if cr.coord not in self.merged_cells: raise ValueError("Cell range {0} is not merged".format(cr.coord)) self.merged_cells.remove(cr) # Deletes the MergedCellRange. # del self._merged_cell_range[cr.bounds] # autho : watson # aim : deal with the bug about umerger # describe : Add the following five lines of code to format the attribute. min_col, min_row, max_col, max_row = cr.bounds for row in range(min_row, max_row + 1): for col in range(min_col, max_col + 1): if col == min_col and row == min_row: continue del self._cells[(row, col)] def append(self, iterable): """Appends a group of values at the bottom of the current sheet. ........................
感謝各位的閱讀,以上就是“分析openpyxl庫,遇到批量合并單元格的問題”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對分析openpyxl庫,遇到批量合并單元格的問題這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。