xlsxwriter:将 'xl_col_to_name(col)' 解析为 worksheet.set_column() 中使用的值

xlsxwriter: resolve the 'xl_col_to_name(col)' to value used in worksheet.set_column()

第一个示例按预期工作。它隐藏了“A”列。我想要做的是根据某个值动态隐藏一列。 xl_col_to_name() 函数会将数字更改为字母。我想将函数从 (A:A) 更改为 (col:col),因为我在下面的示例 2 中尝试了几种方法。

如何让 worksheet.set_column() 解析 xl_col_to_name(col) 函数?这是我从一次尝试中得到的一个错误: 文件“\xlsxwriter_xl_col_to_name_example.py”,第 22 行 worksheet.set_column("'"xl_col_to_name(col, False)':'xl_col_to_name(col, False)"'", None, None, {'hidden': True}) ^ 语法错误:语法无效

谢谢 旦

import xlsxwriter
from xlsxwriter.utility import xl_col_to_name

# EXAMPLE 1 Works as expected.  Hides column "A"
workbook = xlsxwriter.Workbook('xl_col_to_name_example.xlsx')
worksheet = workbook.add_worksheet("xl_col_to_name_example")

mylist=[0,1,2,3,4,5]
for col in mylist:
  print(xl_col_to_name(col, False))
  worksheet.set_column('A:A', None, None, {'hidden': True})
  worksheet.write(0,   col+1, 'NUM')
  worksheet.write(1, col,  'some value')
  
workbook.close()

# EXAMPLE 2 - I want to resolve the 'xl_col_to_name(col)' to a value that represents a column to hide.
workbook = xlsxwriter.Workbook('xl_col_to_name_example2.xlsx')
worksheet = workbook.add_worksheet("xl_col_to_name_example2")

mylist=[0,1,2,3,4,5]
for col in mylist:
  print(xl_col_to_name(col, False))
  worksheet.set_column("'"xl_col_to_name(col, False)':'xl_col_to_name(col, False)"'", None, None, {'hidden': True})
  worksheet.write(0,   col+1, 'NUM')
  worksheet.write(1, col,  'some value')
  
workbook.close()

在 Python 中有许多不同的方法来格式化字符串,例如原始的 printf 样式 % 运算符、字符串 .format() 方法或新的 f''字符串:

>>> import xlsxwriter
>>> from xlsxwriter.utility import xl_col_to_name
>>> col = 0

>>> '%s:%s' % (xl_col_to_name(col, False), xl_col_to_name(col, False))
'A:A'

>>> '{}:{}'.format(xl_col_to_name(col, False), xl_col_to_name(col, False))
'A:A'

>>> f'{xl_col_to_name(col, False)}:{xl_col_to_name(col, False)}'
'A:A'

但是,最好的方法是避免字符串格式,直接使用数字。几乎所有的 xlsxwriter 方法都支持 A1 样式范围,但它们也都支持数字参数,因此最好直接使用数字:

worksheet.set_column(col, col, None, None, {'hidden': True})