Конвертировать документ Excel (xls) в plist - PullRequest
25 голосов
/ 10 октября 2009

У меня есть довольно простая электронная таблица Excel, и мне нужно использовать данные в приложении для iPhone. Документ xls имеет 6 столбцов и> 200 строк.

Я хотел бы создать лист из документа xls. Как можно программно преобразовать одно в другое?

Ответы [ 7 ]

47 голосов
/ 05 декабря 2009

Я опаздываю на вечеринку, но я создал настольную утилиту, которая преобразует 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];
39 голосов
/ 23 октября 2009

Вы можете сделать это, используя простую формулу, которую вы копируете и вставляете в столбец рядом с каждой из ваших 200+ строк.

Например, предполагая, что столбец A содержит список имен, а столбец B содержит совпадающий набор возрастов, вы можете использовать формулу, например, следующую, чтобы получить большую часть XML для словаря на основе plist.

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

Затем вы выбираете все ячейки в этом новом столбце, который вы можете скопировать и вставить в блокнот или другой текстовый редактор, чтобы сохранить его в виде plist-файла (вы можете поместить какой-нибудь жестко закодированный текст в ячейку выше и ниже ваших строк 200+). , чтобы получить необходимые теги и т. д., а также ...

26 голосов
/ 11 января 2014

Дамы и господа,

Я пробовал любые другие рекомендуемые решения выше, но из-за символов Unicode на моем языке (турецком) ни один из них не помог мне ... Все символы Unicode были сломаны. Тогда я решил сделать инструмент для этого.

Я с гордостью представляю самый простой способ конвертировать любой файл XLS, XLSX или CVS в plist:

http://exceltoplist.herokuapp.com/

Просто загрузите свой XLS, XLSX или CSV и загрузите свой Apple Plist!

Наслаждайтесь!

Примечание. Из-за свободной политики Heroku для просмотра страницы может потребоваться несколько минут. Просто продолжайте ждать 5-10 секунд, чтобы открыть страницу.

4 голосов
/ 04 мая 2013

Для OpenOffice используйте эту формулу

=CONCATENATE("<key>number</key><integer>"; A2;"</integer><key>MyString</key><string>";B2;"</string>")
1 голос
/ 26 декабря 2013

Для моей цели мне просто нужно преобразовать 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 Обратите внимание, что для того, чтобы его код работал, вам нужно изменить «Базовый SDK» на «Последний OS X»

1 голос
/ 26 октября 2011

Я нашел CONCATENATE, чтобы работать лучше всего для этого.

0 голосов
/ 20 апреля 2015

Используйте 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
...