创建新工作簿时在Excel中保留格式

时间:2017-12-11 19:30:15

标签: 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

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数据输入到加载的工作表中。

我想要做的是做两件事之一:

  1. 将包含新.csv数据的工作表保存到原始工作簿。

  2. 或者使用原始格式加载已加载工作簿中的所有工作表,以便将它们全部保存为新工作簿。这很重要,因为.csv数据中的值在布尔逻辑语句中用于填充工作簿中的另一个工作表。

  3. 如何在保持格式化的同时做到这一点?

2 个答案:

答案 0 :(得分:0)

正如Charlie Clark所说,您可以使用OpenPyXL来读取/写入您的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或作为pandas数据帧处理数据。如果添加任何新行/列,则需要格式化这些行/列。他们不会自动采用文件其余部分的格式,例如在Excel中编辑。 Openpyxl有styles system来进行格式化,或者您可以使用以下内容复制相邻单元格的格式:

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

答案 1 :(得分:-1)

不幸的是,普通工具实际上无法修改或读取现有Excel文件的格式。我可以想到一些解决方案,但它们都不是很漂亮。

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

  2. 您可以阅读工作簿的每个工作表,然后使用添加的内容重新保存。缺点是你只是阅读数据,而不是格式。您必须使用xlsxwriter包对您的格式进行硬编码,这非常繁琐且不灵活。

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