我就廢話不多說了,大家還是直接看代碼吧~
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.styles import NamedStyle, Border, Side, Alignment
# 創(chuàng)建一個工作薄
wb = Workbook()
# 創(chuàng)建一個工作表(注意是一個屬性)
table = wb.active
# excel創(chuàng)建的工作表名默認為sheet1,一下代碼實現(xiàn)了給新創(chuàng)建的工作表創(chuàng)建一個新的名字
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個單元格'
# 法一不適合批量添加
for i in range(2,10):
table.merge_cells(start_row=i, start_column=3, end_row=i, end_column=4)
效果如下:
補充:python操作excel --openpyxl里的關(guān)于merge的一些bug
開始新的工作不久,工作內(nèi)容依然是數(shù)據(jù)相關(guān)
新工作數(shù)據(jù)輸出模式是用excel,大概是每天導出新數(shù)據(jù)并用excel體現(xiàn),同時要保留之前的數(shù)據(jù)。
我來之前,同時寫好了許多sql,然后就從Navicat里面復制粘貼到excel中。
我目前在做關(guān)于這個的自動化腳本,使用的庫是openpyxl,下面說說關(guān)于這個的幾個小bug。
1- 在 2.5.x版本中,當你合并單元格的時候
使用的是merge_cells(),然后,當你合并多個單元格的時候,之前合并的單元格的邊框會消失。這個問題我再官網(wǎng)找到解決方案,稍有復雜,但是只要你更新到2.6.x版本,這個問題自動解決。
2- 2.6x版本中,使用unmerge_cell() 解開合并單元格后,除了左上角可以寫入,其他被解開的單元格無法寫入,會提示說 ‘read_only'這類的。
例如:你的 ("A1:D4") 是合并的,當你使用 work_sheet.unmerge_cell("A1:D4")后,會解開合并,
然后你卻只能給A1賦值,不能給A2,A3,A4,B1....賦值,提示如下
=== > - Openpyxl ['MergedCell' object attribute 'hyperlink' is read-only]
我嘗試改用delete直接刪除,然而這種方法只能刪除內(nèi)容,格式還是被鎖定的。
找了很久沒有結(jié)局方法,只好慢慢看源碼。
大概是說,接觸合并后,代碼默認其他單元格應(yīng)該是空值且不能被賦新值,也許是因為覺得解開只有要再合并??(不明白設(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.
........................
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- 解決使用openpyxl時遇到的坑
- python openpyxl 帶格式復制表格的實現(xiàn)
- python openpyxl篩選某些列的操作
- python中openpyxl和xlsxwriter對Excel的操作方法
- 詳解Python openpyxl庫的基本應(yīng)用
- python openpyxl模塊的使用詳解
- Python openpyxl 無法保存文件的解決方案