XlsxReaderWriter创build只读的.xlsx文件?

我正在使用XlsxReaderWriter | Objective – C插入数据并生成一个.xlsx文件。 我从bundle目录中使用demo.xlsx,然后复制到文档目录来插入数据,然后用一个新名称保存它。 demo.xlsx具有对每个人的读写权限。 生成新文件后,我给用户一个select,将文件导出到设备上的Microsoft Excel应用程序。 当我尝试在Microsoft Excel应用程序中打开文件时,它表示它是只读文件,而我的数据直到表格的“T”列未显示,而表格显示为列“U”,里面没有数据。 但数据正在其他第三方应用程序或文档控制器中显示,为什么会发生这种情况?

我试过的代码是:

let fileManager = NSFileManager.defaultManager() let directory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] let path = "\(directory)/file.txt" let attributes: [String:AnyObject] = [NSFilePosixPermissions: NSNumber(short: 0o666)] let success = fileManager.createFileAtPath(path, contents: nil, attributes: attributes) if success && fileManager.isWritableFileAtPath(path) && fileManager.isReadableFileAtPath(path) { NSLog("Worked!") } else { NSLog("Failed!") } 

该文件是在我授予它权限而不是“createFileAtPath”之前创build的。权限是完全设置的,我检查了文件目录。 只是iOS上的Microsoft Excel应用程序表示它仍然是“只读”文件。

我猜可能这个问题不是关于文件权限的问题,而是关于你的应用程序生成的.xlsx文件内容的一些事情,Microsoft Excel不高兴 – 因此为什么它也没有显示所有的数据。 .xlsx文件只是一个包含xml的zip文件。

您可以使用unzipunzip ,然后使用xmllint --format等工具格式化所有xml以便于阅读。

如果您生成了一个非常简单的xlsx,它可以从您自己的应用程序中显示问题(最简单的示例,但仍然显示问题),然后在Excel中手动创build一个类似的xlsx,您可以对它们进行解压缩和格式化, diff -r来查找它们之间的差异。

另一种方法是将显示为“只读”的文件加载到桌面Microsoft Excel中,进行简单的编辑并保存 – 如果该文件正确加载到移动应用程序中,则可以将该文件与您的文件进行比较。

可能会有一些合理的差异,所以你需要运用一些脑力来找出哪些是最有可能导致Excel只读的。 除了任何明显的像名为“只读”的属性,我会寻找像使用旧的XML命名空间的问题文件的东西。

如果你发现不同的话,你可以通过手工编辑快速find问题所在,重新编译xml(确保你的编辑器不会留下任何备份文件,因为Excel往往会反对zip中意外的文件),然后加载它进入Excel,看看它是否仍然只读。

以下是我用来比较两个ooxml文档的xml脚本:

 #!/bin/bash set -e first=$1 second=$2 # convert to absolute paths first=$(cd $(dirname $first); pwd)/$(basename $first) second=$(cd $(dirname $second); pwd)/$(basename $second) WORKDIR=~/tmp.$$ mkdir -p $WORKDIR cd $WORKDIR mkdir 1 cd 1 unzip $first cd .. mkdir 2 cd 2 unzip $second cd .. for i in `find . -name '*.xml' -o -name '*.vml' -o -name '*.rels'`; do xmllint --format $i > $i.new mv -f $i.new $i done diff -U 5 -r 1 2 | cat -v #or kaleidoscope for better diff display: #ksdiff 1 2 echo $WORKDIR rm -rf $WORKDIR 

试了自己的代码。 一样。 但它在其他应用程序完美的作品。 似乎更像微软Excell应用程序的问题。 给Excell团队提供反馈意见,提供你的文件,并要求修正错误,如果不是的话,无论如何他们会给你提供比这里更多的信息