gpt4 book ai didi

ios - XlsxReaderWriter 创建只读 .xlsx 文件?

转载 作者:可可西里 更新时间:2023-11-01 02:00:01 42 4
gpt4 key购买 nike

我正在使用 XlsxReaderWriter | Objective - C插入数据并生成 .xlsx 文件。我正在使用 bundle 目录中的 demo.xlsx,然后复制到文档目录以插入数据,然后用新名称保存它。 demo.xlsx 具有读取和写入权限供所有人使用。生成新文件后,我为用户提供了将文件导出到其设备上的 Microsoft Excel 应用程序的选项。当我尝试在 Microsoft Excel 应用程序中打开文件时,它说它是只读文件,我的数据直到工作表的“T”列未显示,工作表从“U”列显示,里面没有数据。但是数据显示在其他第三方应用程序或文档 Controller 中,为什么会这样?

我试过的代码:

    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 应用程序说它仍然是“只读”文件。

最佳答案

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

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

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

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

可能会有一定数量的差异,因此您需要运用一些脑力来找出哪些最有可能导致 Excel 将其设为只读。除了诸如名为“只读”的属性之类的任何明显内容之外,我还会使用旧的 XML 命名空间查找问题文件之类的内容。

如果您发现不同,您可以通过手动编辑、重新压缩 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

关于ios - XlsxReaderWriter 创建只读 .xlsx 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47350144/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com