将Excel文档(xls)转换为plist。

25

我有一个很简单的Excel电子表格,希望在iPhone应用程序中使用其中的数据。这个xls文档有6列,超过200行。

我想从xls文档创建一个plist。我该如何通过编程将它们相互转换?

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];

我看到了你的博客文章,提到你粘贴了一个路径。可惜,对我来说没有转换。 - Matthew Frederick
1
谢谢你提供这个工具,它非常有用! - lxt
它的工作很好,但有没有人注意到如果CSV文件太大,它只输出了一小部分数据?也许某个特殊字符会导致提前终止? - M Jesse
@MJesse 我认为它支持的最大记录数大约是200条,在我的情况下,看起来是这样的。 - sonoshin
从Finder中拖放文件,它会使用文件路径。或者,您也可以直接输入绝对路径。 - Max MacLeod
显示剩余3条评论

39

你可以通过使用一个简单的公式,在每个200多行旁边复制并粘贴下来的列中完成此操作。

例如,假设列A包含名称列表,列B包含匹配的年龄列表,则可以使用以下公式,以便获得基于plist字典的大部分XML内容。

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

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


1
没有完整的脚本,这种方法肯定会节省一些时间。谢谢。 - John Muchow
1
这对我来说比编写脚本更快。 “Excel:穷人的脚本语言” :D - unsorted
非常好,快速简单 :-) - Chris
1
很酷的想法,虽然我在寻找其他东西。 :) - Dev Kanchen
2
这比编写脚本要快得多。此外,实际的“答案”对我无效,但这个有效。谢谢。 - Johnny

26

女士们先生们,

我尝试了上面提到的任何其他推荐解决方案,但由于我的语言(土耳其语)中存在Unicode字符,所以它们都没有对我起作用... 所有Unicode字符都被破坏了。 然后我决定制作一个工具来解决这个问题。

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

http://exceltoplist.herokuapp.com/

只需上传您的XLS、XLSX或CSV文件,然后下载您的Apple Plist!

享受吧!

注意:由于Heroku的免费dyno政策,浏览页面可能需要花费几秒钟的时间。 只需等待5-10秒即可打开页面。


1
干得好!这似乎是一个很好的替代方案,可以取代那个似乎已经不再工作的mindsizzlers转换器。 - zeeple
很高兴听到你喜欢它 :) 谢谢 - scaryguy

4
对于OpenOffice,请使用以下公式。
=CONCATENATE("<key>number</key><integer>"; A2;"</integer><key>MyString</key><string>";B2;"</string>")

1

1
我发现在这种情况下使用 CONCATENATE 函数效果最好。

你能给一个简短的例子吗?你现在的回答并没有太大帮助。 - Matt Wilko
1
这应该是对先前答案的评论。 - bkbeachlabs

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];
}

附注:您可以在此处找到他的初始源代码 - http://code.google.com/p/danilobits/source/checkout请注意,要使他的代码现在正常工作,您需要将“Base SDK”更改为“Latest OS X”


这正是我需要做的事情。第一列键,第二列值。有没有在线转换器可以做到这一点?或者有没有我可以直接下载和使用的二进制文件? - zeeple

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接