如何使用 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()
输出:
实际上,我正在尝试从第 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()
输出: