openpyxl,保存/使用后如何关闭.xlsx文件/会话



据我所知,openpyxl中没有这样的函数:del、清除缓存或垃圾,也许我错了。我面临的问题:当我想保存第二个生成的.xlsx文件时,会出现问题。它以某种方式使用了以前的.xlsx文件(及其数据(,并且无法合并某些单元格(来自prev xlsx(,因为它没有写入属性。

那么我如何关闭/关闭以前的xlsx。我甚至在生成新文件之前尝试删除xlsx文件,但也无济于事!

代码:(我没有发布图片链接的权限(:图片1:src(代码,树(我的储蓄方式:

wb.save(filename=self.fileName)
wb.close()
  1. 错误

  2. id=1 xlsx 的类

  3. id=4 xlsx的类,以及我的代码从上一个(例如:ECOLOGY 17:00-19:00(中写入的一些数据,它不应该像那样工作

  4. src代码在这里github

您不能重用同一工作簿对象来用另一个名称保存文件,对此我并不感到惊讶。如果需要重用此对象,可以使用workbook_obj.save(...);workbook_obj.close();workbook_obj=openpyxl.load_workbook(...)。我还没有测试过这个代码,但这是我最好的猜测。

我终于解决了我的问题!我听从了Michael Sohnen的建议。但是,我仍然不确定openpyxl是否有垃圾清理功能,但这并不重要
解决方案:我没有创建新的xlsx文件,而是使用现有文件(如果存在(,否则我会生成一个新文件。仅此而已
探索:据我所知,他会下载这个特定的文件.xlsx,openpyxl会知道要使用哪个文件,因此我们可以确保避免了数据冲突
最终代码:

from openpyxl import Workbook, load_workbook
from django.conf import settings
from os import path, walk
class Base:
def __init__(self,filename:str):
self.fileName=filename
self.filePath=path.join(settings.BASE_DIR,'xlsxFiles',filename)
self.folderDir=path.join(settings.BASE_DIR,'xlsxFiles')
self.workBook=None
def getWorkSheet(self):
files=[]
for (dPath,dNames,dFiles) in walk(self.folderDir):
files.extend(dFiles)
if self.fileName in files:
with open(self.filePath, 'rb') as xlsx:
self.workBook=load_workbook(xlsx)
workSheet=self.workBook[self.workBook.sheetnames[0]]
return workSheet
else:
self.workBook=Workbook()
workSheet=self.workBook.active
return workSheet
def saveXlsx(self):
self.workBook.save(filename=self.filePath)
self.workBook.close()

旧版本:

class Base:
wb=Workbook()
sheet=wb.active

此外,我正在另一个代码.py 中保存生成的.xlsx

最新更新