2012-05-30 13 views
9

Estoy tratando de crear un informe en formato Excel, listo para ser enviado por correo electrónico. Hasta ahora, he descubierto que la mejor y más simple forma es crear un documento xml de la siguiente manera y guardarlo como xls.Crear archivos Excel XLS en iOS

<?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="String">Name</Data></Cell> 
       <Cell><Data ss:Type="String">Example</Data></Cell> 
      </Row> 
      <Row> 
       <Cell><Data ss:Type="String">Value</Data></Cell> 
       <Cell><Data ss:Type="Number">123</Data></Cell> 
      </Row> 
     </Table> 
    </Worksheet> 
</Workbook> 

entonces podría guardar este documento usando

NSArray *documentDirectoryPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *docDir = [NSString stringWithFormat:@"%@/Report.xls", [documentDirectoryPath objectAtIndex:0]]; 
     [xmlString writeToFile:docDir atomically:YES encoding:NSUTF8StringEncoding error:NULL]; 
     [serializedData writeToFile:docDir atomically:YES]; 

Sin embargo, después de enviar el correo electrónico y tratar de abrir el archivo xls, el XML se muestra en la hoja de cálculo en su lugar. ¿Alguien podría llevarme a la dirección correcta para crear este archivo xls?

+1

hmm, funciona para mí con Excel 2010 – CarlJ

+0

gracias por su comentario! Sí, sí funcionó en Excel 2010. Sin embargo, muestra un error que indica que el formato del archivo no coincide con la extensión del archivo. y no se abre en google docs and iwork. entonces creo que el problema podría ser del documento xml que estoy guardando. – ChrisBorg

+0

¿alguien puede saber una buena manera de formar un documento XML que también podría ser compatible con Google Spreadsheets y Numbers? – ChrisBorg

Respuesta

-3

intenta crear un formato de archivo CSV, será mejor método

0

Trate de añadir en el siguiente etiqueta especial en la parte superior del documento:

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

que acaba de intentar esta etiqueta con el código XML y funcionó en mi máquina con Windows 7 - Guardé su documento como 'test.excel.xml' - y la etiqueta <?mso...> fue suficiente para que Windows reconociera el formato como Excel.

No es un ejemplo aquí también: http://en.wikipedia.org/wiki/Microsoft_Office_XML_formats

+0

Con la extensión de archivo .xml esto funciona con Excel 2010 en Windows 7. Con Excel 2011 en Mac OSX, debe usar la extensión de archivo .xls para el mismo contenido de archivo. No sé de una variante que funcionaría en ambas plataformas, desafortunadamente. – pommy

1

he intentado lo mismo que el PO, y se rindió. Finalmente usé libxls para abrir y leer archivos xls, y escribí los archivos usando csv. (libxls no puede escribir xls, solo léelo).

http://libxls.sourceforge.net

no he probado, pero xlsLib pretende escribir archivos de Excel. Cuenta con una actualización en Ene 6 ​​2014 que indique que puede trabajar en iOS:

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

También, leer por qué es tan difícil de escribir archivos de Excel, porque es verdad y divertido: http://www.joelonsoftware.com/items/2008/02/19.html

0

Este es el código para crear el archivo XLS

NSMutableString *stringToWrite = [[NSMutableString alloc] init]; 
[stringToWrite appendString:[NSString stringWithFormat:@"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++)  { 
      [stringToWrite appendString:[NSString stringWithFormat:@"%@/t",[[Contact objectAtIndex:i] valueForKey:@"firstName"] ]]; 
      [stringToWrite appendString:[NSString stringWithFormat:@"%@/t",[[Contact objectAtIndex:i] valueForKey:@"lastName"] ]]; 
      [stringToWrite appendString:[NSString stringWithFormat:@"%@/t",[[Contact valueForKey:@"userName"] objectAtIndex:i]]]; 
      [stringToWrite appendString:[NSString stringWithFormat:@"%@/t",[[Contact objectAtIndex:i] valueForKey:@"phoneNumber"] ]]; 
      [stringToWrite appendString:[NSString stringWithFormat:@"%@/t",[[Contact objectAtIndex:i] valueForKey:@"emailAddress"] ]]; 
      [stringToWrite appendString:[NSString stringWithFormat:@"%@/t",[[Contact objectAtIndex:i] valueForKey:@"jobTitle"] ]]; 
      [stringToWrite appendString:[NSString stringWithFormat:@"%@/t",[[Contact objectAtIndex:i] valueForKey:@"organizationName"] ]]; 
      [stringToWrite appendString:[NSString stringWithFormat:@"%@\n",[[Contact objectAtIndex:i] valueForKey:@"note"] ]]; 
     } 
     dispatch_async(dispatch_get_main_queue(), ^(void) { 
      NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); 
      NSString *documentDirectory=[paths objectAtIndex:0]; 
      NSString *strBackupFileLocation = [NSString stringWithFormat:@"%@/%@", documentDirectory,@"ContactList.xls"]; 
      [stringToWrite writeToFile:strBackupFileLocation atomically:YES encoding:NSUTF8StringEncoding error:nil]; 
     }); 
}); 
+0

¿Qué hay de rápido? –

Cuestiones relacionadas