Python和OpenPyXl将我的共享工作簿保存为未共享



使用python和openpyxl我有一个代码,可以进入工作簿中,每天向某些单元格添加一堆信息,然后关闭并保存它。我的问题是,如果此工作簿打开,则代码不起作用(显然(。

通过使工作簿共享(多个用户可以一次编辑(,我可以克服此问题,但是在代码运行一次后,Python保存,然后将其恢复回一个封闭的未共享工作簿。有人知道OpenPyXl是否可以保存为共享?我没有在网上找到任何东西。先发制人的感谢。

看来,当OpenPyXl保存Excel Workbook时,DocProps/app.xml文件将被擦拭,仅包含最小信息。

快速(和脏(解决方案是使用Zipfile获取这些信息并将其传输到新的/保存的文件中。

import zipfile, openpyxl
def shared_pyxl_save(file_path, workbook):
    """
    `file_path`: path to the shared file you want to save
    `workbook`: the object returned by openpyxl.load_workbook()
    """
    zin = zipfile.ZipFile(file_path, 'r')
    buffers = []
    for item in zin.infolist():
        buffers.append((item, zin.read(item.filename)))
    zin.close()
    workbook.save(file_path)
    zout = zipfile.ZipFile(file_path, 'w')
    for item, buffer in buffers:
        zout.writestr(item, buffer)
    zout.close()

这是我在另一个页面上的答案帖子,但是此页面是原始页面

好吧...在来回播放之后,出于某种奇怪的原因zipfile.infolist((也包含表数据,因此,使用sharone_pyxl_save示例,这是我对其进行微调的方法/p>

基本上不是让旧文件覆盖表的数据,而是使用旧文件

def shared_pyxl_save(file_path, workbook):
    """
    `file_path`: path to the shared file you want to save
    `workbook`: the object returned by openpyxl.load_workbook()
    """
    zin = zipfile.ZipFile(file_path, 'r')
    buffers = []
    for item in zin.infolist():
        if "sheet1.xml" not in item.filename:
            buffers.append((item, zin.read(item.filename)))
    zin.close()
    workbook.save(file_path)
    """ loop through again to find the sheet1.xmls and put it into buffer, else will show up error"""
    zin2 = zipfile.ZipFile(file_path, 'r')
    for item in zin2.infolist():
        if "sheet1.xml" in item.filename:
            buffers.append((item, zin2.read(item.filename)))
    zin2.close()
    
    #finally saves the file
    zout = zipfile.ZipFile(file_path, 'w')
    for item, buffer in buffers:
        zout.writestr(item, buffer)
    zout.close()
    workbook.close()

相关内容

  • 没有找到相关文章

最新更新