将 Excel zip 文件内容转换为实际的 Excel 文件?

Convert Excel zip file content to actual Excel file?

我正在使用 python 中可用的 cmis 包从 FileNet 存储库下载文档。我正在使用包中提供的 getcontentstream 方法。但是它 returns 内容文件以 'Pk' 结尾并以 'PK' 结尾。当我用谷歌搜索时,我才知道这是 excel 压缩包内容。有没有办法将内容保存到 excel 文件中。我应该可以打开下载的excel。我正在使用下面的代码。但是需要获取类似字节的对象而不是 str。我注意到结果类型是 string.io

# expport the result
result = testDoc.getContentStream()
outfile = open(sample.xlsx, 'wb')
outfile.write(result.read())
result.close()
outfile.close()

您好,欢迎来到 Whosebug。关于您的 post.

我注意到了几点

直接回答您收到的错误代码。您将输出文件 FileStream 称为二进制文件,但是 result.read() 必须采用 Unicode 字符串格式,这就是您收到此错误的原因。您可以尝试在将其传递给 outfile.write() 函数之前对其进行编码(例如:outfile.write(result.read().encode()))。

您也可以通过以下方式直接编写 Unicode:

result = testDoc.getContentStream()
result_text = result.read()

from zipfile import ZipFile

with ZipFile(filepath, 'w') as zf:
    zf.writestr('filename_that_is_zipped', result_text)

不是 我不确定您的 ContentStream 中有什么,但请注意 excel 文件由 xml 个文件压缩而成。 excel 文件所需的最小文件结构如下:

  • _rels/.rels 包含 excel 个模式
  • docProps/app.xml 包含 sheet 的数量和 sheet 个名称
  • docProps/core.xml 样板用户信息和创建日期
  • xl/workbook.xml 包含 sheet 将 rdId 命名为工作簿 link
  • xl/worksheets/sheet1.xml(以及此文件夹中的更多 sheet)包含每个 sheet
  • 的单元格数据
  • xl/_rels/workbook.xml.rels 在 zipfile
  • 中包含 sheet 个文件位置
  • xl/sharedStrings.xml 如果您只有字符串单元格值
  • [Content_Types].xml将架构应用于文件类型

我最近从头开始拼凑了一个 excel 文件,如果您想查看代码,请查看 https://github.com/PydPiper/pylightxl