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

问题描述 投票:0回答:1

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

# expport the result
result = testDoc.getContentStream()
outfile = open(sample.xlsx, 'wb')
outfile.write(result.read())
result.close()
outfile.close()
python cmis
1个回答
1
投票

您好,欢迎来到stackoverflow。我注意到了您的帖子。

要回答错误代码,您将直接获得。您将输出文件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包含张数和张名称
  • [docProps/core.xml样板用户信息和创建日期
  • [xl/workbook.xml包含工作表链接的工作表名称rdId
  • [xl/worksheets/sheet1.xml(此文件夹中还有更多工作表)包含每张工作表的单元格数据
  • [xl/_rels/workbook.xml.rels包含zipfile中的工作表文件位置
  • [xl/sharedStrings.xml,如果您只有字符串单元格值
  • [[Content_Types].xml将架构应用于文件类型

我最近从头开始将Excel文件拼凑在一起,如果您想查看代码签出https://github.com/PydPiper/pylightxl

© www.soinside.com 2019 - 2024. All rights reserved.