【问题标题】:Appending rows in excel xlswriter在excel xlsxwriter中追加行
【发布时间】:2017-12-19 14:40:36
【问题描述】:

我创建了一个 xls 文件,我在其中将一些用户输入写入单元格。到目前为止一切顺利,该程序有效;它写了第一行。但是当我再次运行程序而不是将其写入第一个行之上的行时。我正在尝试了解如何使其将新行附加到 excel 表中保存并关闭它等

import xlsxwriter

workbook = xlsxwriter.Workbook("test.xlsx",)
worksheet = workbook.add_worksheet()

row = 0
col = 0

worksheet.write(row, col,     'odhgos')
worksheet.write(row, col + 1, 'e/p')
worksheet.write(row, col + 2, 'dromologio')
worksheet.write(row, col + 3, 'ora')


row += 1
worksheet.write_string(row, col,     odigosou)
worksheet.write_string(row, col + 1, dromou)
worksheet.write_string(row, col + 2, dromologio)
worksheet.write_string(row, col + 3, ora)

workbook.close()

使用我创建的这段代码,我可以在文件中写入内容,但是如何让它在现有工作表中追加一行。我看过的所有教程,我研究过的所有说明,都不起作用;我显然做错了什么,但我无法发现它。

【问题讨论】:

  • 您不能使用xlsxwriter 附加到现有文件。您可以做的是读取文件,将其写入新文件,然后在其上追加。你可以使用openpyxl,它可以在本地执行此操作,或者使用xlrd 之类的内容读取数据。
  • poo..... 我现在真的很愚蠢,非常感谢你,伙计 4 天的工作又回到了 0 :D 你不喜欢编码吗?再次非常感谢你:)
  • 如果您正在运行上面的脚本,您可能会收到此错误:NameError: name 'odigosou' 。如果您在所有 worksheet.write_string()'s 中引用第三个参数,您的脚本应该产生两行。

标签: python excel xlsxwriter


【解决方案1】:

如果文件不存在,则通过创建文件来避免 FileNotFound 错误的另一种解决方案:

from openpyxl import Workbook
from openpyxl import load_workbook

filename = "myfile.xlsx"
new_row = ['1', '2', '3']

# Confirm file exists. 
# If not, create it, add headers, then append new data
try:
    wb = load_workbook(filename)
    ws = wb.worksheets[0]  # select first worksheet
except FileNotFoundError:
    headers_row = ['Header 1', 'Header 2', 'Header 3']
    wb = Workbook()
    ws = wb.active
    ws.append(headers_row)

ws.append(new_row)
wb.save(filename)

# Note: if you're adding values from a list, you could instead use:
# new_row = ""
# new_row += [val for val in list]
# Similarly, for adding values from a dict:
# new_row = ""
# new_row = += [val for val in mydict['mykey'].values()]

【讨论】:

    【解决方案2】:

    问题:...如何在现有工作表中追加一行

    使用openpyxl的解决方案,例如:

    from openpyxl import load_workbook
    
    new_row_data = [
        ['odhgos', 'e/p', 'dromologio', 'ora'],
        ['odigosou', 'dromou', 'dromologio', 'ora']]
    
    wb = load_workbook("test/test.xlsx")
    # Select First Worksheet
    ws = wb.worksheets[0]
    
    # Append 2 new Rows - Columns A - D
    for row_data in new_row_data:
        # Append Row Values
        ws.append(row_data)
    
    wb.save("test/test.xlsx")
    

    使用 Python 测试:3.4.2 - openpyxl:2.4.1 - LibreOffice:4.3.3.2

    【讨论】:

    • 工作得很好,也在 python 2.7 下。无法理解为什么此响应未标记为正在解决
    • 但是即使我手动删除行它也会附加最后一行,它不接受并且仍然添加上一个最后一行,就像它没有被删除一样
    • @stovfl : 你有没有验证过如果Excel文件是公式化的,它是否能正常工作?
    • @MustafaUçar 您必须删除整行,而不仅仅是行的内容。
    猜你喜欢
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2020-07-23
    • 2016-08-18
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多