Python - 如何防止循环覆盖相同的excel表

时间:2018-06-12 10:15:20

标签: python excel loops for-loop overwrite

最近我一直致力于我的小项目,即为我自动生成工时电子表格。它只适用于我,但是当我想生成多个工作表(后来以工作表作为表格)和/或生成多个电子表格时它会覆盖旧的工作表。

使用openpyxl lib打开,编辑和生成电子表格。

我尝试过移动保存部分并在循环之外生成部分等等,但这些都没有帮助我。

问题是如何防止循环覆盖文件而不是生成新文件呢?

这是以下软件的主要部分。

cols = [2, 3, 4, 12]
row = 9
hrs = 0
nhrs = 0


for worker in workers:
    sheet.title = ('{} {}'.format(worker.name, worker.surename))
    for day, hday in itertools.zip_longest(days, holidays):
            if day.weekday() <= 4 and day not in holydays:
                sheet.cell(row=row, column=cols[0]).value = '08:00'
                sheet.cell(row=row, column=cols[1]).value = '16:00'
                sheet.cell(row=row, column=cols[2]).value = '8 h'
                hrs += 8
                row += 1
            elif day.weekday() > 4 and day not in holidays:
                sheet.cell(column=cols[0], row=row).value = ''
                row += 1
            elif day in holidays:
                sheet.cell(column=cols[3], row=row).value = '8 h'
                nhrs += 8
                row += 1

    sheet.cell(column=cols[2], row=40).value = str(hrs) + ' h'
    sheet.cell(column=cols[3], row=40).value = str(nhrs) + ' h'

workbook.save('SPREADSHEET_{}.xlsx'.format(native_month))
print('Done')

提前致谢!

从评论中编辑:

# native_month for the workbook name is provided by this function applied to a 1-12 
def month_name_native(month): 
    months = ["Unknown", "Januar", "Februar", "Mart", "April", "Maj", "Jun", 
              "Jul", "August", "Septembar", "Oktobar", "Decembar" ] 
    return months[month].upper() 

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望每个工作人员都有一个新的电子表格,对吗?

您目前正在做的是一遍又一遍地使用相同的工作表对象,因此它会被覆盖。您必须在for循环中为每个worker创建一个新工作表。这应该做:

# PSEUDO CODE
fastcgi_param HTTP_REFERER replace(localhost:9000, domaina.com, HTTP_REFERER)