如何在 pd.ExcelWriter 中使用 xlsxwrite 引擎在底部的 python 中编写新行?

Posted

技术标签:

【中文标题】如何在 pd.ExcelWriter 中使用 xlsxwrite 引擎在底部的 python 中编写新行?【英文标题】:How to write a new line in pd.ExcelWriter using xlsxwritter engine- in python at the bottom? 【发布时间】:2022-01-13 20:30:16 【问题描述】:

我有几个 pandas 数据框,我正在使用 ExcelWriter 创建一个 Excel 工作表。 我通常使用下面的命令

writer = pd.ExcelWriter(file_name, engine='xlsxwriter')

我的所有数据框都转到一个 Excel 表,我想在最后一个数据框之后写一个长句子。我的程序是自动化的,我每次都不知道数据框的确切长度。所以我不能使用像下面这样的东西。我的意思是我不能放像 'B44:F46' 之类的东西

import xlsxwriter
workbook = xlsxwriter.Workbook('hello.xlsx')
worksheet = workbook.add_worksheet()

## adding 5-6 data frames

header2 = workbook.add_format(
    'bold':     True,
    'align':    'center',
    'border':   6,
    'valign':   'vcenter',
    'fg_color': '#D7E4BC',
    'font_name':'Calibri',
    'font_size': 12

)

worksheet.merge_range('B44:F46', "CompanyName:ABC \n Country:USA", header2)


workbook.close()

有没有办法在 python 中做到这一点?

任何建议将不胜感激。提前致谢!!

【问题讨论】:

【参考方案1】:

您需要做一些事情来完成这项工作:

使用df.shapelen(df) 跟踪输出数据帧中的最后一行 在merge_range() 中使用(row, col) 语法,而不是A1 范围语法 在格式中添加text_wrap

这是一个工作示例:

import pandas as pd


# Create some Pandas dataframes from some data.
df1 = pd.DataFrame('Data 1': [11, 12])
df2 = pd.DataFrame('Data 2': [21, 22, 23])
df3 = pd.DataFrame('Data 3': [31, 32, 33, 34])

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('pandas_example.xlsx', engine='xlsxwriter')

start_row = 0

# Output the data frames and keep track of the start/end row.
for df in (df1, df2, df3):
    df.to_excel(writer, sheet_name='Sheet1', startrow=start_row, index=False)
    start_row += df.shape[0] + 1

# Get the xlsxwriter workbook and worksheet objects.
workbook = writer.book
worksheet = writer.sheets['Sheet1']

# Add a format
header2 = workbook.add_format(
    'bold':     True,
    'align':    'center',
    'border':   6,
    'valign':   'vcenter',
    'fg_color': '#D7E4BC',
    'font_name': 'Calibri',
    'font_size': 12,
    'text_wrap': True
)

# Write a merge range.
start_col = 0
end_col = 3

worksheet.merge_range(start_row, start_col, start_row + 1, end_col,
                      "CompanyName: ABC\nCountry: USA", header2)

# Close the Pandas Excel writer and output the Excel file.
writer.save()

输出:

【讨论】:

再次成为第一个回答有关他自己项目的问题的人 +1 Jon! 谢谢@KevinG。对于它的价值,我真的很想看到其他人的 xlsxwriter 答案,因为它表明他们已经设法偏离了文档。我通常只在没有完整答案或答案不明显时才会权衡。【参考方案2】:

获取数据帧中的行数(假设您有 2 个数据帧 df0 和 df1)

rows = len(df0.index)
rows += len(df1.index)

然后将它们添加到要添加最后一行的行中

worksheet.merge_range('B'+str(rows)+':F46', "CompanyName:ABC \n Country:USA", header2)

【讨论】:

以上是关于如何在 pd.ExcelWriter 中使用 xlsxwrite 引擎在底部的 python 中编写新行?的主要内容,如果未能解决你的问题,请参考以下文章

使用Pandas命名标头

一个dataframe只能储存一个excel子表吗

将数据框写入带有标题的excel

如何利用 pandas 批量合并 Excel?

如何利用 Python 批量合并 Excel?

pandas写入数据