首页 > 解决方案 > 写入 excel - Python

问题描述

我是新手,我会感谢我的代码的一些帮助。我已经写了这个函数:

    def write_captions_to_excel_file(self, filenames, titles, indexs, description_path):
        print('writing to excel')
        workbook = Workbook(os.path.join(description_path, 'all_captions.xlsx'))
        worksheet = workbook.add_worksheet()
        firstrow = 0
        worksheet.write(firstrow, 0, 'Image name')  # 3 --> row number, column number, value
        worksheet.write(firstrow, 1, 'Titles')
        worksheet.write(firstrow, 2, 'Description')
        row = indexs + 1
        worksheet.write(row, 0, filenames)
        origin_title = titles.h1.getText()
        worksheet.write(row, 1, origin_title.capitalize())
        print(origin_title.capitalize())
        worksheet.write(row, 2, '')
        sleep(3)
        workbook.close()

问题是我多次调用该函数,第一次给我第 0 行和第 1 行的结果,然后当它再次运行时,它给我第 0 行和第 2 行的结果,第 1 行结果已被删除。别人的电话也一样。

我认为每次我调用它从工作簿开始创建的函数时,我都会丢失以前的数据。如何避免这种情况?

正如我在文档中看到的那样,XlsxWriter 仅设计为文件编写器。它无法读取或修改现有的 Excel 文件。

谢谢

标签: python-3.xxlsxwriter

解决方案


欢迎来到 SO!

你说的对。您不能使用 xlsx 编写器附加数据。但是你可以修改你的代码来做你想做的事情。

我的建议是,与其多次调用该函数,不如将数据存储在一个数组中并将列表传递给函数并迭代该列表以一次性写入整个文档。这种方式在时间上是经济的,它会给你更多的可读性。

示例代码将像,

import os
import xlsxwriter

def write_captions_to_excel_file(data_list, description_path, headers):
    workbook = xlsxwriter.Workbook(os.path.join(description_path, 'all_captions.xlsx'))
    worksheet = workbook.add_worksheet()
    for row, data in enumerate(data_list):
        for col, header in enumerate(headers):
            if header == 'Titles':
                text_to_write = data[header]
            else:
                text_to_write = data[header].h1.getText().capitalize()
            worksheet.write(row+1, col, text_to_write)


def some_function():
    headers = ['Image name', 'Titles', 'Description']
    description_path = 'some/path/to/file'
    filenames = ['x', 'y', 'z']
    titles = ['z', 'y', 'x']
    data_list = []
    for i, j in enumerate(filenames):
        combined_dict = dict()
        combined_dict['Image name'] = j
        combined_dict['Titles'] = titles[i]
        data_list.append(combined_dict)
    write_captions_to_excel_file(data_list, description_path, headers)

希望这可以帮助!随时对任何澄清发表评论。

干杯!


推荐阅读