如何使用 python 动态设置 excel sheet 的 50 个列值

How can I set 50 column values of excel sheet dynamically using python

实际上,我正在尝试从第 1 列到第 50 列(即 A 列到 AZ 列)写入“测试”字符串值。

我最多可以写第 26 列(即 Z 列),下面是我的代码:-

import pandas as pd

writer = pd.ExcelWriter("Sharath.xlsx", engine='xlsxwriter')
df1 = pd.DataFrame()
df1.to_excel(writer, sheet_name='Sheet1', header=True, index=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']

merge_format = workbook.add_format({
            'bold': True,
            'text_wrap': True,
            'border': 2,
            'align': 'center',
            'valign': 'vcenter'})

for i in range(0, 26):
    columnmerge = chr(ord('A') + i) + '{}:' + chr(ord('A') + i) + '{}'
    worksheet.set_column(chr(ord('A') + i) + ':' + chr(ord('A') + i), 20)
    worksheet.merge_range(columnmerge.format(2, 4), "Test1", merge_format)


workbook.close()
print("Excel file is closed")

writer.save()
print("Excel file is saved")
print("Report generation completed")

如果我尝试第 27 列(即 AA 列),我会遇到以下错误:-

Traceback (most recent call last):
  File "D:\test2.py", line 18, in <module>
    worksheet.set_column(chr(ord('A') + i) + ':' + chr(ord('A') + i), 20)
  File "C:\Python39\lib\site-packages\xlsxwriter\worksheet.py", line 120, in column_wrapper
    _, col_1 = xl_cell_to_rowcol(cell_1)
  File "C:\Python39\lib\site-packages\xlsxwriter\utility.py", line 121, in xl_cell_to_rowcol
    col_str = match.group(2)
AttributeError: 'NoneType' object has no attribute 'group'

任何人都可以帮助我动态地编写最多 50-100 列的字符串。

提前致谢!

设置列宽并使用列号合并范围:

worksheet.set_column(i, i, 20)
worksheet.merge_range(2, i, 4, i, "Test1", merge_format)

所有 XlsxWriter 方法都采用 (row, col) 值以及 A1 样式范围。当尝试以编程方式设置范围时,最好避免尝试构建 A1 范围并让库基于零基行列号为您完成。

例如,这里是如何重构程序以使用任意索引的方法:

import pandas as pd

writer = pd.ExcelWriter('Sharath.xlsx', engine='xlsxwriter')
df1 = pd.DataFrame()
df1.to_excel(writer, sheet_name='Sheet1', header=True, index=False)

workbook = writer.book
worksheet = writer.sheets['Sheet1']

merge_format = workbook.add_format({
            'bold': True,
            'text_wrap': True,
            'border': 2,
            'align': 'center',
            'valign': 'vcenter'})

first_col = 0
last_col = 100

worksheet.set_column(first_col, last_col, 20)

for col in range(last_col + 1):
    worksheet.merge_range(1, col, 3, col, 'Test1', merge_format)

writer.save()

输出: