如何使用Python编程将行程序添加到现有的Excel表格?

4
尽管存在各种Python Excel操作库和资源,但我仍无法找到特定的解决方案。目前,我有一个模板Excel文件,其中存在一个表格。我想编写一个Python程序来填充这个表格。这是否可能使用任何现有的Excel库?模板Excel文件有一个带有空表格的工作表(第一张截图)。我想通过编程从其他地方填充表格中的一些数据。例如。

Initial Excel empty table

data = [("TS0001", "1.0 Administration", "Root", "vdouk", "15/09/19", 8.0, "example 1"),
        ("TS0002", "1.0 Administration", "Root", "vdouk", "16/09/19", 3.0, "example 2"),
        ("TS0003", "4.0 Simulations", "Root", "vdouk", "16/09/19", 5.0, "example 3")]

因此,我最终希望看起来像第二个屏幕截图。总条目和小计是从适当的Excel单元格函数(已定义)自动计算的。最后,请注意,该表格是从工作簿的其他部分引用的,这意味着它是一个命名数据源(在Excel名称管理器中可见),因此定义新表会在其他地方引起问题。 有人能指导我找到最合适的解决方案吗?

Final table example

这是工作逻辑。

  1. 打开现有的 Excel 文件。
  2. 不要更改任何格式。
  3. 不要删除任何现有数据。
  4. 使用新行更新 Excel 文件:
    1. 将所有新行插入到标题行正下方。
    2. 确保这将新行作为现有表格的一部分。
  5. 保存并关闭 Excel 文件。

更新

现在,我正在使用 openpyxl。我所做的解决方法是编辑模板 .xlsx 并向表格添加空行。然后,我使用 openpyxl 编写与我的数据元组数量相同的行。表格总计似乎有效,但其他一些 Excel 宏似乎出现问题。


1
保证现有 Excel 工作簿的所有功能的忠实度得以保留的唯一方法是使用 Excel 自身打开它。您可以通过各种方式自动化此过程。如果您想将 Python 作为脚本语言,则我的建议是使用 xlwings - John Y
现在,我正在使用openpyxl。我的解决方法是编辑模板.xlsx并向表格中添加10K个空行。然后,我使用openpyxl写入与我的数据元组相同数量的行。表格总计似乎有效,但其他一些Excel宏似乎出现了问题。我需要再仔细研究一下。我可能会使用xlwings。我想知道win32com接口是否能解决这个问题。 - Vagos Duke
1
如果您熟悉直接使用win32com,那是一个非常好的选择。当在Windows上运行时,xlwings本身就使用win32com。 - John Y
3个回答

1
你不能使用现有的Python模块更新Excel文件,但是你可以使用Openpyxl模块覆盖现有文件。
通过Openpyxl模块的帮助,你可以将现有工作表读入内存中,追加新内容,并将其保存回同一文件:
from openpyxl import load_workbook
#Open an xlsx 
wb = load_workbook(filename = 'data.xlsx')
#Get the current Active Sheet
ws = wb.get_active_sheet()
#ws = wb.get_sheet_by_name("Sheet1")
# Get the row and column index in which you are going to write
ws.cell(1,1).value = 'your_value'
# save() will override existing file 
wb.save('data.xlsx')

0
也许你可以使用xltpl - 一个Python模块,用于从xls/x模板生成xls/x文件。
使用你的Excel文件作为模板来生成新文件。

-1
你可以使用Python模块xlsxwriter。 例如
import xlsxwriter

workbook = xlsxwriter.Workbook('hello.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write('A1', 'Hello world')
workbook.close()

5
XlsxWriter不能与现有文件一起使用,这是这里的要求之一。 - jmcnamara
有多个用于处理Excel工作簿的Python模块,但不幸的是,它们中没有一个支持更新现有工作簿。 其中一个模块是Openpyxl,但它实际上会覆盖现有文件。 因此,您必须按照以下步骤操作:
  1. 使用xlrd模块将现有文件读入内存
  2. 读取文件并在内存中创建数据结构
  3. 将其写入新的Excel文件(具有相同的文件名)并保存它。 或者使用Openpyxl模块的save()方法覆盖文件。
- Sachin
1
感谢您的建议@Sachin。然而,真正的问题并不是保存位置(或覆盖)。文件保存在其他位置是可以接受的。问题是如何编辑Excel文件以保留和正确更新内部结构,同时不会破坏任何内容,更具体地说,表格内部结构。 - Vagos Duke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接