Création de files Excel XLS sur iOS

J'essaye de créer un rapport au format Excel, prêt à être envoyé par email. Jusqu'à présent, j'ai trouvé que le meilleur et le plus simple est de créer un document XML comme suit et l'save en tant que xls.

<?xml version="1.0"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"> <Worksheet ss:Name="Sheet1"> <Table ss:ExpandedColumnCount="2" ss:ExpandedRowCount="2" x:FullColumns="1" x:FullRows="1"> <Row> <Cell><Data ss:Type="Ssortingng">Name</Data></Cell> <Cell><Data ss:Type="Ssortingng">Example</Data></Cell> </Row> <Row> <Cell><Data ss:Type="Ssortingng">Value</Data></Cell> <Cell><Data ss:Type="Number">123</Data></Cell> </Row> </Table> </Worksheet> </Workbook> 

Ensuite, je pourrais save ce document en utilisant

 NSArray *documentDirectoryPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSSsortingng *docDir = [NSSsortingng ssortingngWithFormat:@"%@/Report.xls", [documentDirectoryPath objectAtIndex:0]]; [xmlSsortingng writeToFile:docDir atomically:YES encoding:NSUTF8SsortingngEncoding error:NULL]; [serializedData writeToFile:docDir atomically:YES]; 

Cependant, après avoir envoyé l'e-mail et essayé d'ouvrir le file xls, le file XML est affiché dans la feuille de calcul à la place. Quelqu'un pourrait-il me conduire à la bonne direction pour créer ce file xls?

J'ai essayé la même chose que l'OP, et j'ai abandonné. J'ai finalement utilisé libxls pour ouvrir et lire les files xls, et j'ai écrit les files en utilisant csv. (libxls ne peut pas écrire xls, il suffit de le lire).

http://libxls.sourceforge.net

Je ne l'ai pas essayé, mais xlslib prétend écrire des files Excel. Il a une mise à jour en Janvier 6 2014 disant qu'il peut travailler dans iOS:

http://sourceforge.net/projects/xlslib/files/

Aussi, lisez pourquoi il est si difficile d'écrire des files Excel, parce que c'est vrai et drôle: http://www.joelonsoftware.com/items/2008/02/19.html

Essayez d'append l'label spéciale suivante en haut du document:

 <?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> [...] 

J'ai juste essayé cette label avec votre XML et cela a fonctionné sur mon ordinateur Windows7 – j'ai enregistré votre document en tant que 'test.excel.xml' – et la <?mso...> était suffisante pour que Windows reconnaisse le format comme Excel.

Il y a aussi un exemple ici: http://en.wikipedia.org/wiki/Microsoft_Office_XML_formats

Ceci est le code pour créer un file XLS

  NSMutableSsortingng *ssortingngToWrite = [[NSMutableSsortingng alloc] init]; [ssortingngToWrite appendSsortingng:[NSSsortingng ssortingngWithFormat:@"First Name /t Last Name /t Full Name /tPhone Number /tEmail /t Job/t organizationName /tNote\n\n"]]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ for(int i = 0 ;i<[Contact count];i++) { [ssortingngToWrite appendSsortingng:[NSSsortingng ssortingngWithFormat:@"%@/t",[[Contact objectAtIndex:i] valueForKey:@"firstName"] ]]; [ssortingngToWrite appendSsortingng:[NSSsortingng ssortingngWithFormat:@"%@/t",[[Contact objectAtIndex:i] valueForKey:@"lastName"] ]]; [ssortingngToWrite appendSsortingng:[NSSsortingng ssortingngWithFormat:@"%@/t",[[Contact valueForKey:@"userName"] objectAtIndex:i]]]; [ssortingngToWrite appendSsortingng:[NSSsortingng ssortingngWithFormat:@"%@/t",[[Contact objectAtIndex:i] valueForKey:@"phoneNumber"] ]]; [ssortingngToWrite appendSsortingng:[NSSsortingng ssortingngWithFormat:@"%@/t",[[Contact objectAtIndex:i] valueForKey:@"emailAddress"] ]]; [ssortingngToWrite appendSsortingng:[NSSsortingng ssortingngWithFormat:@"%@/t",[[Contact objectAtIndex:i] valueForKey:@"jobTitle"] ]]; [ssortingngToWrite appendSsortingng:[NSSsortingng ssortingngWithFormat:@"%@/t",[[Contact objectAtIndex:i] valueForKey:@"organizationName"] ]]; [ssortingngToWrite appendSsortingng:[NSSsortingng ssortingngWithFormat:@"%@\n",[[Contact objectAtIndex:i] valueForKey:@"note"] ]]; } dispatch_async(dispatch_get_main_queue(), ^(void) { NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSSsortingng *documentDirectory=[paths objectAtIndex:0]; NSSsortingng *strBackupFileLocation = [NSSsortingng ssortingngWithFormat:@"%@/%@", documentDirectory,@"ContactList.xls"]; [ssortingngToWrite writeToFile:strBackupFileLocation atomically:YES encoding:NSUTF8SsortingngEncoding error:nil]; }); }); 

Essayez de créer un format de file CSV, ce sera la meilleure méthode