【问题标题】:Export data to *.xls file by using xml to create the file on an iOS 5 App通过使用 xml 在 iOS 5 应用程序上创建文件将数据导出到 *.xls 文件
【发布时间】:2012-05-24 10:36:38
【问题描述】:

我正在使用以下代码在我的 iOS 应用程序上创建一个 *.xls 文件。一切进展顺利。我可以用 Microsoft Excel 打开它,但如果我想用 Apple Numbers 打开它,它不起作用。

- (void)exportToExcel
{
    NSManagedObjectContext *context = [self managedObjectContext];

    NSFetchRequest *request = [[NSFetchRequest alloc] init];

    NSError *error;
    NSString *header = @"<?xml version=\"1.0\"?>\n<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\nxmlns:o=\"urn:schemas-microsoft-com:office:office\"\nxmlns:x=\"urn:schemas-microsoft-com:office:excel\"\nxmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"\nxmlns:html=\"http://www.w3.org/TR/REC-html40\">\n<Worksheet ss:Name=\"Sheet1\">\n<Table ss:ExpandedColumnCount=\"";
    NSString *columncount = @"\" ss:ExpandedRowCount=\"";
    NSString *rowcount = @"\" x:FullColumns=\"1\"x:FullRows=\"1\">\n";

    NSString *rowStart = @"<Row>\n";
    NSString *rowEnde = @"\n</Row>\n";

    NSString *stringStart = @"<Cell><Data ss:Type=\"String\">";
    NSString *stringEnde = @"</Data></Cell>";

    NSString *numberStart = @"<Cell><Data ss:Type=\"Number\">";
    NSString *numberEnde = @"</Data></Cell>";

    NSString *footer = @"</Table>\n</Worksheet>\n</Workbook>";

    NSString *xlsstring = @"";

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Form" inManagedObjectContext:context];

    [request setEntity:entity];

    NSArray *arr = [context executeFetchRequest:request error:&error];

    int numberOfRows = 1;
    int numberOfCols = 2;

    for (Form *form in arr) {
        numberOfRows = numberOfRows + 1;
    }

    xlsstring = [NSString stringWithFormat:@"%@%i%@%i%@", header, numberOfCols, columncount, numberOfRows, rowcount];
    xlsstring = [xlsstring stringByAppendingFormat:@"%@%@Patient number%@%@Name%@%@", rowStart, stringStart, stringEnde, stringStart, stringEnde, rowEnde];

    for (Form *form in arr) {
        xlsstring = [xlsstring stringByAppendingFormat:@"%@%@%@%@%@%@%@%@", rowStart, numberStart, form.pnumber, numberEnde, stringStart, form.name, stringEnde, rowEnde];
    }
    xlsstring = [xlsstring stringByAppendingFormat:@"%@", footer];

    [xlsstring writeToFile:@"/Users/***/Desktop/form.xls" atomically:YES encoding:NSISOLatin1StringEncoding error:nil];
}

有没有人知道为什么会这样,甚至有解决这个错误的方法?

【问题讨论】:

  • 您是否考虑过使用 .CSV 文件,它们真的很容易在 Excel 和 Numbers 上制作和打开
  • 是的,我有。但是 Excel 文件会获得一些格式,以便将来更好地阅读。感谢您的快速答复。

标签: ios xml export-to-excel xls


【解决方案1】:

Numbers 不会导入 Excel XML 格式。 (请参阅here。)它将导入 Excel 原生格式,但编写这不是一件容易的事。

能否让您的应用同时选择 Excel XML(适用于 Excel 用户)和 CSV(适用于 Numbers 用户)?

【讨论】:

  • 好的,这个选项我也想过。但我想格式化每个 collum 的标题。也许我可以选择导出到 *.numbers?制作一个真正的 *.xls 文件真的很简单吗?谢谢你的回答。
  • 关于制作真正的Excel文件,你可以看看this answer
  • 关于直接写 .numbers 文件,你必须做一些逆向工程。 iWork XML 模式曾经公开:有一个旧的编程指南here。然而,这是在 Numbers 出现之前的 iWork 的第一个版本,只有 Pages 和 Keynote。从那时起,格式也发生了变化。但是,如果您要自己进行逆向工程,它可能会帮助您入门。
  • 我刚刚浏览了 XML 格式的简单 Numbers 电子表格。空白电子表格的文件为 1.1MB,我输入一些文本内容的单元格的 xpath 为/ls:document/ls:workspace-array/ls:workspace/ls:page-info/sf:layers/sf:layer/sf:drawables/sf:tabular-info/sf:tabular-model/sf:grid/sf:datasource/sf:t/sf:ct/sfa:s。我敢肯定它可以被破译,但我不羡慕你尝试!
  • 非常感谢您的回答。嗯,我想,我会第一次采用 csv/xls 解决方案。
猜你喜欢
  • 2012-09-25
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
相关资源
最近更新 更多