最近有一个往Excel文件中不同的工作簿写入大量数据的需求,如下图所示,有三个工作簿,每个工作簿中的数据量不同,向一个工作簿中写入数据时需要将上一次写入的数据清空,且其它两个工作簿的数据不能清空。 网上大部分的教程都是一条一条的往里面写入,这种效率太低,而且耗时太长。或者就是一次往一个工作簿写入数据时,会将之前的全部数据覆盖,也不太符合要求。 下面是自己的实现方式 我使用的是openpyxl和pandas模块相结合使用的。在写入数据时,首先会将写入的数据长度与Excel表中某一个工作簿中的数据长度进行对比,若写入数据的长度小于Excel表中某一个工作簿中的数据长度,则将该工作簿进行移除并重新创建,详细代码如下。
if len(data) < int(df_rows):
Title = [u'模拟数据', u'平均值', u'方差', u'散斑对比度']
book = load_workbook(AllPath + r"\Simulate.xlsx")
sheets = book.worksheets
for i in range(len(sheets)):
strV = ''
valueIndex = str(sheets[i])
print(f'valueIndex={valueIndex}')
for j in range(12, len(valueIndex) - 2):
strV += valueIndex[j]
print(f'strV={strV}')
if strV == SHEET:
Sheet = book[SHEET]
book.remove(Sheet)
Coefficient = book.create_sheet(index=0, title=SHEET)
Coefficient.append(Title)
book.save(AllPath + r"\Simulate.xlsx")
book.close()
在判断完数据后,将几十万条数据一次全部写入Excel中的某一个工作簿,具体代码如下
df = pd.DataFrame(data)
book = load_workbook(AllPath + r"\Simulate.xlsx")
with pd.ExcelWriter(AllPath + r"\Simulate.xlsx") as writer:
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df.to_excel(writer, sheet_name=SHEET, startrow=1, index=False, header=False)
最后就能实现上述的需求了。 源代码链接
|