我有一个生成任意长度列表的代码,并将其输出到excel电子表格。然后使用以下代码对每个列进行总计:
const user = ( slug ) => ( state ) => state.users[state.slugs[slug]];
理论上,这输出“= AVERAGE(A1:Ax)”,其中x是电子表格的底行。我只是希望能够处理大于26的宽度,即如果年份大于26而不是chr(65 + i),则代码可以说“= AVERAGE(AA1:AAx)”。
由于
答案 0 :(得分:1)
考虑一个定义的方法,从列号计算 ColumnLetter ,而不需要Excel Char()
转换:
def ColumnLetter(ColumnNumber):
s = ''
alpha = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
n = int(ColumnNumber)
while n > 0:
c = ((n - 1) % 26)
s = alpha[c] + s
n = (n - c) // 26
return s
for i in range(years):
average = "=AVERAGE("
average += ColumnLetter(i)
average += "1:"
average += ColumnLetter(i)
average += str(x)
average += ")"
worksheet.write(x, i, average)
答案 1 :(得分:1)
如果您正在使用XlsxWriter,那么您还可以使用它提供的函数将(row, col)
值转换为字符串:
from xlsxwriter.utility import xl_rowcol_to_cell
from xlsxwriter.utility import xl_range
cell = xl_rowcol_to_cell(0, 26)
cell_range = xl_range(0, 26, 66, 26)
formula = '=AVERAGE({})'.format(cell_range)
print(cell) # AA1
print(cell_range) # AA1:AA67
print(formula) # =AVERAGE(AA1:AA67)
有关详细信息,请参阅XlsxWriter文档的Working with Cell Notation部分。
答案 2 :(得分:1)
不使用字母样式的引用,而是使用(行,列)样式更简单,如下所述:https://xlsxwriter.readthedocs.io/working_with_cell_notation.html
答案 3 :(得分:0)
首先,如果可以,你应该避免使用xlsx文件,这些文件非常烦人。
其次,您是否考虑过在python中计算平均值,然后将其写入excel文件?
如果仍然不可能,这是我的解决方案(实际上是将您的列号转换为基数26,然后将每个数字与相应的字母数字字符相关联)
def col_to_char(column):
"""convert from column number to column name"""
if column == 0: return 'A'
name=''
while column!=0:
name += ( chr(65 + column % 26) )
column = column // 26
return name
/!\ BEWARE列号以pythonic方式存在,即第一个为0,而不是"例外" (?)一,这将是第一个1
您的代码将是:
for i in range(years):
column_name=col_to_char(i)
average = "=AVERAGE(" +column_name +"1:" +column_name +str(x) +")"
worksheet.write(x, i, average)