我有一个非常简单的Excel电子表格,我需要在iPhone应用程序中使用这些数据。 xls文档有6列,> 200行。
我想从xls文档创建一个plist。如何以编程方式将一个转换为另一个?
答案 0 :(得分:47)
我迟到了,但我建立了一个桌面实用程序,可以将CSV转换为plist。您可以下载binary或使用此代码,该代码需要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];
答案 1 :(得分:39)
您可以使用一个简单的公式来执行此操作,该公式可以复制并粘贴在每行200多行旁边的列中。
例如,假设colum A包含一个名称列表,而B列包含一组匹配的年龄,您可以使用如下所示的公式来结束基于plist的字典的大部分XML。
=CONCATENATE("<key>Name</key><string>", A1,"</string><key>Age</key><integer>",B1,"</integer>")
然后选择此新列中的所有单元格,您可以复制并粘贴到记事本或其他文本编辑器中将其保存为plist文件(您可能希望将一些硬编码文本放入200多行上下的单元格中,以获得所需的标签等...
答案 2 :(得分:26)
女士们,先生们,
我尝试了上面的任何其他推荐的解决方案,但由于我的语言(土耳其语)中的Unicode字符,没有一个为我工作...所有unicode字符都被打破。然后我决定为此制作一个工具。
只需上传您的XLS,XLSX或CSV并下载您的Apple Plist!
享受!
注意:由于Heroku的免费dyno政策,浏览页面可能需要一些时间。只需等待5-10秒即可打开页面。
答案 3 :(得分:4)
对于OpenOffice,请使用此公式
=CONCATENATE("<key>number</key><integer>"; A2;"</integer><key>MyString</key><string>";B2;"</string>")
答案 4 :(得分:1)
我发现CONCATENATE最适合这个。
答案 5 :(得分: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];
}
P.S。你可以在这里找到他的初始源代码 - http://code.google.com/p/danilobits/source/checkout 请注意,要使他的代码正常工作,您需要将“Base SDK”更改为“Latest OS X”
答案 6 :(得分:0)
使用http://shancarter.github.io/mr-data-converter/将xls
转换为Json
(只需复制和粘贴)(可以通过删除http://jsonviewer.stack.hu/中的空格来重新格式化)。将json保存到名为: in.json 的文本文件中。
使用plutil
命令将json格式化为plist
plutil -convert xml1 in.json -o out.plist