Python 和 openpyxl 正在将我的共享工作簿保存为非共享

标签 python excel openpyxl shared

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

通过共享工作簿(多个用户可以同时编辑),我可以克服这个问题,但是在代码运行一次后,python 会保存然后将其恢复为关闭的、非共享的工作簿。 有人知道 openpyxl 是否可以保存为共享吗?我在网上找不到任何东西。 首先感谢您的帮助。

最佳答案

似乎当openpyxl保存Excel工作簿时,里面的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()

关于Python 和 openpyxl 正在将我的共享工作簿保存为非共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57363072/

相关文章:

excel - 使用动态添加到用户表单的复选框

excel - 查找列表 B 中不在列表 A 中的所有项目,Excel。

python - 如何使用 openpyxl 将 Excel 作为电子邮件附件发送而不保存 [On The Fly]

python - 使用 openpyxl 的数据验证不写入文件 - 包含代码

python - 扭曲的海螺试验 TDD, "StringTransport instance has no attribute..."

python - 如何分割字符串,使其包含少于 n 个字符并进行扭曲

python - 如何获取在 wxpython 循环期间创建的 TextCtrl 的值

python - SQLAlchemy 中的完全连接?

java - 内联内容配置

python - 使用 Python 密码保护 Excel 文件