25

我有一个非常简单的 Excel 电子表格,我需要在 iPhone 应用程序中使用这些数据。xls 文档有 6 列,超过 200 行。

我想从 xls 文档创建一个 plist。如何以编程方式将一个转换为另一个?

4

7 回答 7

47

我迟到了,但我构建了一个桌面实用程序,可以将 CSV 转换为 plist。您可以下载二进制文件或使用此代码,这需要cCSVParse。它使用第 0 行中的任何内容来创建键名,然后为每个连续的行生成字典。

    CSVParser *parser = [CSVParser new];
[parser openFileWithPath:pathAsString];
NSMutableArray *csvContent = [parser parseFile];
[parser closeFile];

if (pathAsString != nil)
{

    NSArray *keyArray = [csvContent objectAtIndex:0];

    NSMutableArray *plistOutputArray = [NSMutableArray array];

    NSInteger i = 0;

    for (NSArray *array in csvContent)
    {



        NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];

        NSInteger keyNumber = 0;

        for (NSString *string in array)
        {

            [dictionary setObject:string forKey:[keyArray objectAtIndex:keyNumber]];

            keyNumber++;

        }

        if (i > 0)
        {
            [plistOutputArray addObject:dictionary];
        }

        i++;

    }

    NSMutableString *mutableString = [NSMutableString stringWithString:pathAsString];
    [mutableString replaceOccurrencesOfString:@".csv" withString:@".plist" options:nil range:NSMakeRange([mutableString length]-4, 4)];

    NSURL *url = [NSURL fileURLWithPath:mutableString];


    [plistOutputArray writeToURL:url atomically:YES];
于 2009-12-05T06:49:00.777 回答
39

您可以使用一个简单的公式来执行此操作,您可以在 200 多行中的每一行旁边复制并粘贴一列。

例如,假设 A 列包含一个姓名列表,B 列包含一组匹配的年龄,您可以使用如下公式来结束基于 plist 的字典的大部分 XML。

=CONCATENATE("<key>Name</key><string>", A1,"</string><key>Age</key><integer>",B1,"</integer>")

然后,您选择此新列中的所有单元格,您可以将其复制并粘贴到记事本或其他文本编辑器中以将其保存为 plist 文件(您可能希望将一些硬编码文本放入 200 多行上方和下方的单元格中,以便获得所需的标签等......

于 2009-10-23T03:02:18.420 回答
26

女士们,先生们,

我尝试了上述任何其他推荐的解决方案,但由于我的语言(土耳其语)中的 Unicode 字符没有一个适合我......所有的 unicode 字符都被破坏了。然后我决定为此制作一个工具。

我自豪地介绍了将任何 XLS 或 XLSX 或 CVS 文件转换为 plist 的最简单方法:

http://exceltoplist.herokuapp.com/

只需上传您的 XLS、XLSX 或 CSV 并下载您的 Apple Plist!

享受!

注意:由于 Heroku 的免费测功机政策,浏览页面可能需要一些时间。只需等待 5-10 秒即可打开页面。

于 2014-01-11T10:34:35.450 回答
4

对于 OpenOffice,请使用此公式

=CONCATENATE("<key>number</key><integer>"; A2;"</integer><key>MyString</key><string>";B2;"</string>")
于 2013-05-04T10:46:34.413 回答
1

我发现 CONCATENATE 最适合这个。

于 2011-10-26T01:31:24.027 回答
1

出于我的目的,我只需要将带有两列的 CSV 转换为 plist 文件。第一列是键,第二列是值。因此,我将Danilo Campos代码稍微更改如下:

CSVParser *parser = [CSVParser new];
[parser openFileWithPath:pathAsString];
NSMutableArray *csvContent = [parser parseFile];
[parser closeFile];

if (pathAsString != nil)
{
    NSMutableDictionary *plistOutputArray = [NSMutableDictionary dictionary];

    for (NSArray *array in csvContent)
    {
        NSString *key = (NSString *)([array objectAtIndex:0]);
        NSString *value = (NSString *)([array objectAtIndex:1]);

        [plistOutputArray setObject:value forKey:key];
    }

    NSMutableString *mutableString = [NSMutableString stringWithString:pathAsString];
    [mutableString replaceOccurrencesOfString:@".csv" withString:@".plist" options:nil range:NSMakeRange([mutableString length]-4, 4)];

    NSURL *url = [NSURL fileURLWithPath:mutableString];

    [plistOutputArray writeToURL:url atomically:YES];
}

PS你可以在这里找到他的初始源代码 - http://code.google.com/p/danilobits/source/checkout 请注意,要让他的代码工作现在你需要将“Base SDK”更改为“Latest OS X”

于 2013-12-26T19:42:30.940 回答
1

使用http://shancarter.github.io/mr-data-converter/转换xlsJson(只需复制和粘贴)(可以通过删除http://jsonviewer.stack.hu/中的空格来重新格式化)。将 json 保存到名为:in.json的文本文件中。

使用plutil命令将json格式化为plist

plutil -convert xml1 in.json -o out.plist
于 2015-04-20T02:31:38.563 回答