XlsxReaderWriter创建只读.xlsx文件?

时间:2017-11-17 11:57:20

标签: ios swift excel file-permissions xlsx

我使用XlsxReaderWriter | Objective - C插入数据并生成.xlsx文件。我正在使用bundle目录中的demo.xlsx,然后复制到文档目录以插入数据,然后使用新名称保存它。 demo.xlsx具有读写权限,可供所有人使用。生成新文件后,我为用户提供了一个选项,可以将文件导出到他们设备上的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” 权限完美设置,我在文档目录中检查。只是iOS上的Microsoft Excel应用程序说它仍然是“只读”文件。

2 个答案:

答案 0 :(得分:1)

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

您可以使用getExpData()对其进行解包,然后使用unzip等工具格式化所有xml以便于阅读。

如果您从自己的应用程序中生成一个非常简单的xlsx来显示问题(最简单的示例仍然显示问题),那么在Excel中从头开始手动创建类似的xlsx,您可以执行解压缩& amp;然后在两者上格式化xmllint --format以找出它们之间的差异。

另一种方法是将显示为“只读”的文件加载到桌面microsoft excel中,进行简单编辑并保存 - 如果该文件然后正确加载到移动应用程序中,则可以将该文件与您的文件区分开来。

可能存在合理数量的差异,因此您需要应用一些脑力来确定哪些最有可能导致Excel使其成为只读。除了一个名为'readonly'的属性之外,我会使用旧的XML命名空间来查找问题文件等内容。

如果你找到了另外一个,你可以快速找到是否是手工编辑的问题,重新压缩xml(确保编辑器不留下任何备份文件,因为Excel倾向于反对zip中的意外文件),然后将其加载到Excel中,看看它是否仍然是只读的。

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

diff -r

答案 1 :(得分:0)

尝试自己的代码。一样。但它在其他应用程序中运行良好。似乎更像是Microsoft Excell应用程序问题。向Excell团队提供反馈,提供您的文件,并要求修复错误,如果不是,反正他们会提供比SO更多的信息