python之如何復(fù)制excel模板并保留表格樣式
python復(fù)制excel模板并保留表格樣式
需求
按照模板生成excel報(bào)表。
本地有一個(gè)模板Excel表,是xlsx格式。
需要把傳過(guò)來(lái)的數(shù)據(jù),按照模板表生成新的寫(xiě)入數(shù)據(jù)的報(bào)表。
情況
先嘗試了pandas,發(fā)現(xiàn)生成的新表并不會(huì)保留模板表中的樣式。查了各種處理excel的庫(kù)。
xlrd/xlwt/xlutils/win32/openpyxl等等,都有各種各樣問(wèn)題。
結(jié)果
使用openpyxl讀取模板表,再保存,可以完全保留樣式復(fù)制模板e(cuò)xcel,而且支持xlsx.
?import openpyxl ?df=openpyxl.load_workbook('costDay.xlsx') ?# wb=copy(df) ?df.save('de.xlsx')
其實(shí)還有個(gè)可以保留樣式的方式:
from xlrd import open_workbook df=open_workbook('costDay.xlsx',formatting_info=True)
formatting_info的參數(shù)默認(rèn)是False,默認(rèn)不讀取表格樣式。如果設(shè)置True的話(huà)就會(huì)讀取樣式。
但很坑的一點(diǎn)是居然不支持xlsx,只支持xls。遂放棄。
python如何復(fù)制excel的表格內(nèi)容及格式
python向excel寫(xiě)內(nèi)容時(shí),格式如保復(fù)用的問(wèn)題
如下圖
新寫(xiě)入的數(shù)據(jù),要與第一列保持一致
直接寫(xiě)數(shù)據(jù),效果是這樣的式的,顯然是不行。
# 定義一個(gè)函數(shù),把df寫(xiě)入excel的指定位置 # start_line:excel寫(xiě)入的起始行 # data_df:要寫(xiě)入的數(shù)組 def write_excel(filepath,start_line, data_df): # 打開(kāi)待寫(xiě)入文件 filePath =filepath tableAll = op.load_workbook(filePath) table1 = tableAll['Sheet1'] for c in range(data_df.shape[1]): for r in range(data_df.shape[0]): table1.cell(row=start_line, column=c + 2).value = data_df.columns[c] data = data_df.iloc[r, c] table1.cell(row=start_line + r + 2, column=c + 2).value = data # 以第一列復(fù)制格式 table1.cell(row=start_line + r + 2, column=c + 2).font = copy(table1.cell(row=start_line + r + 2, column=1).font) table1.cell(row=start_line + r + 2, column=c + 2).fill = copy(table1.cell(row=start_line + r + 2, column=1).fill) table1.cell(row=start_line + r + 2, column=c + 2).border = copy(table1.cell(row=start_line + r + 2, column=1).border) table1.cell(row=start_line + r + 2, column=c + 2).number_format = copy(table1.cell(row=start_line + r + 2, column=1).number_format) table1.cell(row=start_line + r + 2, column=c + 2).protection = copy(table1.cell(row=start_line + r + 2, column=1).protection) table1.cell(row=start_line + r + 2, column=c + 2).alignment = copy(table1.cell(row=start_line + r + 2, column=1).alignment) tableAll.save(filePath)
效果是這樣的
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
配置 Pycharm 默認(rèn) Test runner 的圖文教程
今天小編就為大家分享一篇配置 Pycharm 默認(rèn) Test runner 的圖文教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11python統(tǒng)計(jì)日志ip訪(fǎng)問(wèn)數(shù)的方法
這篇文章主要介紹了python統(tǒng)計(jì)日志ip訪(fǎng)問(wèn)數(shù)的方法,涉及Python操作日志文件及正則匹配的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-07-07Python數(shù)據(jù)分析23種Pandas核心操作方法總結(jié)
在本文中,作者從基本數(shù)據(jù)集讀寫(xiě)、數(shù)據(jù)處理和?DataFrame?操作三個(gè)角度展示了?23?個(gè)?Pandas?核心方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05PyTorch中的神經(jīng)網(wǎng)絡(luò) Mnist 分類(lèi)任務(wù)
這篇文章主要介紹了PyTorch中的神經(jīng)網(wǎng)絡(luò) Mnist 分類(lèi)任務(wù),在本次的分類(lèi)任務(wù)當(dāng)中,我們使用的數(shù)據(jù)集是 Mnist 數(shù)據(jù)集,這個(gè)數(shù)據(jù)集大家都比較熟悉,需要的朋友可以參考下2023-03-03解決PyCharm不運(yùn)行腳本,而是運(yùn)行單元測(cè)試的問(wèn)題
今天小編就為大家分享一篇解決PyCharm不運(yùn)行腳本,而是運(yùn)行單元測(cè)試的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Python 存儲(chǔ)字符串時(shí)節(jié)省空間的方法
這篇文章主要介紹了Python 存儲(chǔ)字符串時(shí)節(jié)省空間的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04Python3.4學(xué)習(xí)筆記之常用操作符,條件分支和循環(huán)用法示例
這篇文章主要介紹了Python3.4常用操作符,條件分支和循環(huán)用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python3.4常見(jiàn)的數(shù)學(xué)運(yùn)算、邏輯運(yùn)算操作符,條件分支語(yǔ)句,循環(huán)語(yǔ)句等功能與基本用法,需要的朋友可以參考下2019-03-03給Python的Django框架下搭建的BLOG添加RSS功能的教程
這篇文章主要介紹了給Python的Django框架下搭建的BLOG添加RSS功能的教程,示例代碼非常簡(jiǎn)單,需要的朋友可以參考下2015-04-04