通过使用xml在iOS 5应用程序上创建文件,将数据导出到*.xls文件

通过使用xml在iOS 5应用程序上创建文件,将数据导出到*.xls文件,ios,xml,export-to-excel,xls,Ios,Xml,Export To Excel,Xls,我正在使用以下代码在iOS应用程序上创建一个*.xls文件。一切都很顺利。我可以用Microsoft Excel打开它,但是如果我想用Apple数字打开它,它就不起作用了 - (void)exportToExcel { NSManagedObjectContext *context = [self managedObjectContext]; NSFetchRequest *request = [[NSFetchRequest alloc] init]; NSErro

我正在使用以下代码在iOS应用程序上创建一个*.xls文件。一切都很顺利。我可以用Microsoft Excel打开它,但是如果我想用Apple数字打开它,它就不起作用了

- (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];
}
-(无效)导出到Excel
{
NSManagedObjectContext*上下文=[self-managedObjectContext];
NSFetchRequest*request=[[NSFetchRequest alloc]init];
n错误*错误;
NSString*头=@“\n\n\n\n”;
NSString*rowStart=@“\n”;
NSString*rowEnde=@“\n\n”;
NSString*stringStart=@;
NSString*stringEnde=@”;
NSString*numberStart=@;
NSString*numberrende=@;
NSString*页脚=@“\n\n”;
NSString*xlsstring=@;
NSEntityDescription*entity=[NSEntityDescription entityForName:@“Form”inManagedObjectContext:context];
[请求集合实体:实体];
NSArray*arr=[context executeFetchRequest:request error:&error];
int numberOfRows=1;
int numberOfCols=2;
用于(arr中的表格*表格){
numberOfRows=numberOfRows+1;
}
xlsstring=[NSString stringWithFormat:@“%@%i%@%i%@”,标题、numberOfCols、columncount、numberOfRows、rowcount];
xlsstring=[xlsstring stringByAppendingFormat:@“%@%@患者编号%@%@姓名%@@”,行开始、行开始、行结束、行结束、行结束、行结束];
用于(arr中的表格*表格){
xlsstring=[xlsstring stringByAppendingFormat:@“%@%@%@%@%@%@%@%@%@”,行开始,数字开始,form.pnumber,numberrende,stringStart,form.name,stringEnde,rowEnde];
}
xlsstring=[xlsstring stringByAppendingFormat:@“%@”,页脚];
[xlsstring writeToFile:@/Users/***/Desktop/form.xls”原子:是编码:NSISOLatin1StringEncoding错误:nil];
}

有人知道为什么会出现这种情况,或者甚至知道这个错误的解决方案吗?

Numbers不会导入Excel XML格式。(请参阅。)它将导入Excel本机格式,但编写它并不是一件简单的工作


你能让你的应用程序同时拥有Excel XML(适用于Excel用户)和CSV(适用于数字用户)选项吗?

你考虑过使用.CSV文件吗?它们很容易在Excel和数字上创建和打开是的,我考虑过。但是Excel文件得到了一些格式,以便将来更好地阅读。谢谢你的快速回答。好的,这个选项我也考虑过。但我想把每一篇文章的标题格式化。也许我可以给导出到*.number的选项?制作一个真正的*.xls文件真的很不寻常吗?谢谢你的回答。关于制作真正的Excel文件,你可以看看。关于直接编写.number文件,你必须做一些反向工程。iWork XML模式过去是公开的:有一个旧的编程指南。然而,这是从iWork的第一个版本开始的,在数字出现之前,它只是页面和基调。此后,格式也发生了变化。但是,如果您打算自己对其进行反向工程,它可能会帮助您开始工作。空白电子表格的文件是1.1MB,我输入一些文本内容的单元格的xpath是
/ls:document/ls:workspace数组/ls:workspace/ls:page info/sf:layers/sf:layers/sf:layers/sf:tablar-info/sf:tablar-model/sf:grid/sf:datasource/sf:t/sf:ct/sfa:s
。我相信它可以被破译,但我不羡慕你的尝试!非常感谢你的回答。嗯,我想,我将第一次采用csv/xls解决方案。