xml - 如何从其内部子组件正确组装一个有效的 xlsx 文件?

标签 xml zip xlsx

我正在尝试在 iOS 上以编程方式创建一个 xlsx 文件。由于 xlsx 文件的内部数据基本上存储在单独的 xml 文件中,我尝试重新创建 xlsx 结构及其所有文件和子目录,将它们压缩成一个 zip 文件并将其扩展名设置为 xlsx。我使用 GDataXML 解析器/编写器来创建所有必需的 xml 文件。但是,我得到的文件不能作为 xlsx 文件打开。即使我从有效的 xlsx 文件中提取所有数据,通过从原始 xml 文件复制数据并手动压缩它们来手动创建所有 xml 文件,我也无法重新创建有效的 xlsx 文件。

问题是:

  • xlsx 真的只是一个包含 xml 文件的存档吗?
  • 如果我不能将 xml 文件压缩成 zip 文件并将其扩展名设置为 xlsx,我该如何以编程方式创建有效的 xlsx 文件?

最佳答案

回答您的问题:

  1. XLSX 只是 zip 容器中 XML 文件的集合。没有其他魔法。
  2. 如果您解压缩/解压缩一个有效的 XLSX 文件,然后重新压缩/压缩它,而您无法读取生成的输出,那么问题通常出在重新压缩的文件上,或者不太可能出在压缩软件上。主要要检查的是目录结构是否保留在 zip 文件中。

xlsx 文件的内容示例:

unzip -l example.xlsx
Archive:  example.xlsx
  Length     Date   Time    Name
 --------    ----   ----    ----
      769  10-15-14 09:23   xl/worksheets/sheet1.xml
      550  10-15-14 09:22   xl/workbook.xml
      201  10-15-14 09:22   xl/sharedStrings.xml
      ...

我会定期解压缩 XLSX 文件,进行微小的更改以进行测试,然后重新压缩它们,不会出现任何问题。

更新:重要的是避免压缩父目录。下面是在 Linux 或 OS X 上使用 zip 系统实用程序的示例:

# Unzip an xlsx file into a directory.
unzip example.xlsx -d newdir

# Make some valid changes to the files.
cd newdir/
vi xl/worksheets/sheet1.xml

# Rezip the files *FROM* the unzipped directory.
# Note: you could also re-zip to the original file if required.
find . -type f | xargs zip ../newfile.xlsx

# Check the file looks okay.
cd ..
unzip -l newfile.xlsx
xdg-open newfile.xlsx

关于xml - 如何从其内部子组件正确组装一个有效的 xlsx 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11082278/

相关文章:

django - uWSGI 和 Django 段错误

python - 将 Excel 文件转换为 JSON 并排除列

matlab xlsread函数

java - 带有淡入淡出 ImageView 动画的启动画面

php - 使用 XML 标记属性作为 PHP 变量并在 HTTP 请求中使用它

python - 如何使用 Python 将文件压缩为受密码保护的存档

linux - 如何将大文件夹 (2.4 gb) 存档到多个独立的 zip 存档

javascript - XLSX JS 中的 excel 文件中缺少第一个值

java - 绝对 uri : http://java. sun.com/jsp/jSTL/core 无法在 web.xml 或随此应用程序部署的 jar 文件中解析

java - Android Studio 0.8.10资源问题