Open Office 如何压缩其文件?
我正在尝试以编程方式创建 Open Office 电子表格,但由于某种原因,简单地压缩包含所有必要文件的文件夹会使 Open Office 将文件标记为已损坏。
我是怎么到这个地步的?我首先在 Open Office 中创建一个普通电子表格,其中包含一些值。保存后,我将扩展名更改为 .zip 并复制该文件夹。然后,我使用命令行 zip 压缩第二个文件夹,并将文件扩展名更改为 .ods。当尝试打开生成的文件时,我从 Open Office 收到错误消息,指出文件已损坏。
Open Office 是否使用特殊的压缩算法?执行“文件 test.ods”将其显示为压缩的 zip,那么 Open Office 在压缩例程中添加了什么以使其正常工作?
I'm trying to create an Open Office spreadsheet programmatically but for some reason simply compressing a folder with all the necessary files makes Open Office flag the file as corrupted.
How did I get to this? I started by creating a normal spreadsheet in Open Office with some values in it. After saving I change the extension to .zip and make a copy of the folder. I then compress the second folder using command line zip and change the file extension to .ods. When trying to open the resulting file I get an error from Open Office saying the file is corrupt.
Does Open Office use a special compression algorithm? Doing a "file test.ods" shows it as a compressed zip, so what does Open Office add during the compression routine to make it work?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
文档此处。此步骤对我有用:
将原始文档文件(它是普通的 zip 文件)解压缩到某个目录:
修改解压后的数据。
创建一个新的odt:
Documentation here. This steps worked for me:
Uncompress the original document file (it's a normal zip file) to some directory:
Modify the uncompressed data.
Create a new odt:
OASIS 第 17 节 OpenOffice 规范 定义了需要如何打包 OpenDocument 包。
第 17.4 节 MIME 类型流内容如下:
Section 17 Of the OASIS OpenOffice Specification defines how OpenDocument Packages need to be packaged.
Section 17.4 MIME Type Stream reads like this:
这个 anwser 与 @tokland 建议相同,但可以用作命令。例如:
./folder2od.sh "/path/to/folder" "file.odt"
您可以在这里找到一些有趣的信息:如何使用 zip 正确创建 ODF 文档 - 孤狼 - Web、游戏和开源开发
编辑:简化在脚本中,似乎只需要
mimetype
作为第一个(未压缩)条目。其他条目的顺序并不重要。This anwser is the same as @tokland suggestion, but can be used as a command. Ex:
./folder2od.sh "/path/to/folder" "file.odt"
You can found some interesting infos here: How to correctly create ODF documents using zip - Lone Wolves - Web, game, and open source development
Edit: simplify the script, only
mimetype
seem to be needed to be the first (uncompressed) entry. The order of other entries doesn't matter.即使这是旧的,也是在 2021 年,如果打开的文档是使用 microsoft office、office 365、google docs、libreoffice 或 openoffice 生成的,那么操作打开的文档也像以前一样简单:
制作文档的副本
将复制文档的扩展名重命名为 .zip(因为每个打开的文档都是 zip 文件!)
使用文档名称创建一个文件夹,不带扩展名
将步骤 2) 中重命名的文档(zip 文件)复制到此文件夹中
提取此文件夹中的(文档)zip 文件
删除 zip 文件!
...根据需要更改 xml 数据和二进制对象
将所有文件标记为该文件夹中的文件夹并将它们添加到新的 zip 文件中(仅使用标准 zip 压缩!)
现在您应该在之前在 setp 3 中创建的文件夹中拥有一个新的 zip 文件)
将此新 zip 文件的扩展名重命名回 o.odt 或 .odp 或您在步骤中重命名的任何原始打开文档类型2)
尝试在任何能够处理的办公软件中打开这个新的、重命名的打开文档打开文档文件
请记住:
a) 每个打开的文档都是一个(压缩的)zip 文件
b) 该 zip 文件包含以下 xml 文件表示该文档的结构和文本内容,它还包含具有二进制数据(对象)的子文件夹,例如媒体数据(图像、音频或视频数据以及 ole 对象),其中一些可能会显示为 xml 文件中的 base64 编码。
c) 您可以将每个打开的文档的内容提取到一个新文件夹中
d) 切勿压缩放置所有数据的文件夹,以创建新的 zip 文件/打开的文档文件。 仅压缩此文件夹的内容,以创建有效的打开文档,并将如此创建的 zip 文件重命名为其原始源文件使用的打开文档扩展名!
来源:https://en.wikipedia.org/wiki/OpenDocument_technical_specification
您使用的工具可用于操作打开的文档文件:
a) https://7-zip.de/ download.html(提取和压缩)
b) https://notepad-plus- plus.org/downloads/(编辑 XML 内容)
c) https://www.plus.org/downloads/( 编辑 XML 内容) bulkrenameutility.co.uk/(批量重命名文件和文件夹,如果你不知道windows、linux下的命令...请参阅:https://unix.stackexchange.com/questions/181141/rename-multiple-files-with-mv-to-change-the -扩展名)
Even if this is old, also in 2021, to manipulate open documents works as easy as before, if it was generated with microsoft office, office 365, google docs, libreoffice or openoffice:
make a copy of you document
rename extension of the copied document to .zip (because every open document is a zip file!)
create a folder with the document name, without extension
copy the renamed document (zip file) from step 2) into this folder
extract the (document) zip file within this folder
delete the zip file!
... change xml data and binary objects as you like
mark all files an folders within this folder and add them to a new zip file (only use standard zip compression!)
now you should have a new zip file within the folder you created before in setp 3)
rename the extension of this new zip file back to o.odt or .odp or whatever the original open document type was, you renamed in step 2)
try to open this new, renamed open document in any office software able to handle open document files
Please remember:
a) every open document is a (compressed) zip file
b) the zip file contains xml files which represent the structure and text-content of this document and it also contains supfolders with binary datas (objects), like media data (images, audio or video data, and ole objects), some of them may appear as base64 coded within an xml file.
c) you can extract the content of each open document into a new folder
d) never compress the folder where you put all your data, to create a new zip file/open document file. ONLY compress the content of this folder, to create a valid open document and rename the so created zip file to the open document extension his original source file used!
Sources: https://en.wikipedia.org/wiki/OpenDocument_technical_specification
Tools you can use to manipulate open document files:
a) https://7-zip.de/download.html (to extract and compress)
b) https://notepad-plus-plus.org/downloads/ (to edit the XML content)
c) https://www.bulkrenameutility.co.uk/ (to bulk rename files and folders if you do not know the command under windows, linux ...see: https://unix.stackexchange.com/questions/181141/rename-multiple-files-with-mv-to-change-the-extension)
shell 脚本也对我有用:) 在解压缩 odt 文件后,我在压缩备份时遇到了问题。猜猜清单部分是缺失的。
然而,上面的 shell 脚本不处理内联图片/图形,所以我做了一些对我有用的小调整(此外,该脚本有一个错误,END_HEREDOC 不在专用线上):
The shell script worked for me, too :) I had problems zipping back up, after unzipping an odt file. Guess the manifest part was what's missing.
The shell script above did not handle inline pictures/graphics, however, so I made some small adjustments which worked for me (also, the script had a bug in that END_HEREDOC was not on a dedicated line):