我有一个excel电子表格来计算每周添加的数据,以便在第一个表上进行比较,每个附加的表都是每周作为W01到W52的原始数据。我已经删除了这里的代码,使问题成为唯一不起作用的东西。实际上,我使用多个CSV并将它们放入列表中,格式化列表,然后尝试将该列表写入第一个未使用的工作表中。
它正在成功地找到第一个空工作表,但是当它将数据从列表中写入到表中时,它将从A2而不是A1开始。
所以工作表已经存在了。我已经尝试删除所有的单元格并首先清除excel中的内容,但是它总是从A2而不是A1开始。我遗漏了什么?
注意:如果这有帮助,最初,我刚刚从工作表中删除了去年的数据,当我这样离开它时,它将开始在删除的信息(如A52或其他内容)之后在第一行中添加列表的数据。删除工作表的内容已经“修正”了这个问题,所以它现在只从A2开始,但是我想从A1开始。
如果我手动向A1单元格添加某些内容,它就会工作,例如:
ws_week.cell(row=1, column=1).value = 'This should be A1'
因此,我想我可以强迫它用行号的循环来编写,而对于列号的循环,但是下面的代码看起来应该是工作的。
import openpyxl
output_excel = 'KB Videos 2021.xlsx' #Excel Report
#opens excel report
wb = openpyxl.load_workbook(output_excel)
#find the first blank worksheet
for sheet in wb.sheetnames:
if sheet == 'Weekly Stats':
pass #ignore first worksheet i.e. calculations
elif wb[sheet]['A1'].value == None:
ws_week = wb[sheet]
break
test=[[1,2,3],['A','B','C'],[4,5,6],['a','b','c']]
for x in test:
ws_week.append(x)
wb.save(output_excel)
print('Populated ',ws_week.value)`enter code here`)
“测试”列表中的1,2,3将被放入A2、B2、C2,而我希望它们在A1、B1、C1中。
我错过了什么?
发布于 2021-07-20 08:22:11
工作表永远不应真正被视为“空白”。当附加到工作表时,openpyxl使用一个内部计数器,该计数器将在任何现有单元格下面的next开始。当openpyxl按需创建单元时,wb[sheet]['A1'].value
将隐式地创建单元格"A1“,以便它能够检查值。这就是为什么随后从第二行追加数据的原因。您可以通过删除检查后的行来避免这种情况,但也可能希望使检查更加健壮。
https://stackoverflow.com/questions/68446261
复制相似问题