欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python之如何復(fù)制excel模板并保留表格樣式

 更新時(shí)間:2023年06月21日 11:11:14   作者:天才少女愛(ài)迪生  
這篇文章主要介紹了python之如何復(fù)制excel模板并保留表格樣式問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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)文章

最新評(píng)論