Python 创建新工作簿时保持Excel格式

Python 创建新工作簿时保持Excel格式,python,excel,pandas,format,openpyxl,Python,Excel,Pandas,Format,Openpyxl,我的代码: import os import glob import pandas as pd for csvfile in glob.glob(os.path.join('.', '*.csv')): df = pd.read_csv(csvfile) col_test = df['Test #'].tolist() col_retest = df['Retest #'].tolist() data = pd.read_excel('PATH') start_row = 4 f

我的代码:

import os
import glob
import pandas as pd


for csvfile in glob.glob(os.path.join('.', '*.csv')):
    df = pd.read_csv(csvfile)

col_test = df['Test #'].tolist()
col_retest = df['Retest #'].tolist()
data = pd.read_excel('PATH')
start_row = 4

for i, val in enumerate(col_y):
    data.iloc[start_row + i, 21] = val
    i += 1

writer = pd.ExcelWriter('output_c.xlsx')
data.to_excel(writer, 'NewSheet')
现在,这将创建一个新工作簿,将CSV数据输入到加载的工作表中

我想做的是做以下两件事之一:

  • 使用新的.csv数据将工作表保存到原始工作簿中

  • 或者从加载的工作簿中加载所有具有原始格式的工作表,以便它们都可以另存为新工作簿。这一点很重要,因为
    .csv
    数据中的值用于布尔逻辑语句,以填充工作簿中的另一个工作表


  • 如何在保留格式的同时做到这一点?

    不幸的是,常规工具无法真正修改或读取现有Excel文件的格式。我能想出一些解决办法,尽管它们都不漂亮

  • 使excel文件中的所有格式化工作表都成为引用隐藏工作表的活动公式,并使用未格式化数据,这样您就可以使用python生成.csv并将原始数据粘贴到excel中。缺点是这不是完全自动化的

  • 您可以阅读工作簿的每一页,然后将其与您添加的内容一起重新保存。缺点是您只读取数据,而不读取格式。你必须用软件包硬编码你的格式,这是非常乏味和不灵活的

  • 您可以使用api以编程方式在python中打开和操作Excel。基本上,您可以在excel中打开工作簿,然后使用该软件包中的命令(看起来很像VBA)修改工作簿。这也很乏味-特别是,它没有与pd.DataFrame.to_excel集成,因此您必须通过迭代数据帧向其提供数据。最简单的方法可能是编写一个VBA脚本来打开.csv并将其集成到工作簿中,然后在生成.csv后从python中调用该脚本


  • 正如Charlie Clark提到的,你可以用它来读/写你的excel文件。有几个库可用于读取excel文档,但ime openpyxl是最健壮的库,在使用pandas时最容易使用。它将保留excel文件中的任何格式(也保留宏)

    要打开文件,只需执行以下操作:

    Workbook = openpyxl.load_workbook(filename, read_only=False)
    Sheet = Workbook.get_sheet_by_name(sheetname)
    
    要将文件保存回原处,请执行以下操作:

    Workbook.save(outputfilename)
    
    您可以使用openpyxl或作为数据帧处理数据。如果添加任何新行/列,则需要格式化这些行/列。他们不会像在Excel中编辑一样自动采用文件其余部分的格式。Openpyxl有一个用于进行格式设置的工具,或者您可以使用以下方法复制相邻单元格的格式设置:

    NewCell.number_format = OldCell.number_format
    NewCell.alignment = copy(OldCell.alignment)
    

    欢迎来到堆栈溢出!您似乎在要求某人为您编写一些代码。堆栈溢出是一个问答网站,而不是代码编写服务。请学习如何编写有效的问题。openpyxl可用于编辑现有文件,通常会保留现有格式。