9

我正在尝试创建 Excel 格式的报告,准备通过电子邮件发送。到目前为止,我发现最好和最简单的方法是如下创建一个xml文档并将其保存为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="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>

然后我可以使用

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];

但是,在我发送电子邮件并尝试打开 xls 文件后,xml 会显示在电子表格中。谁能引导我找到正确的方向来创建这个 xls 文件?

4

4 回答 4

1

我尝试了与OP相同的东西,然后放弃了。我最终使用 libxls 打开和读取 xls 文件,并使用 csv 写出文件。(libxls 不能写 xls,只能读)。

http://libxls.sourceforge.net

我还没有尝试过,但是 xlslib 声称可以编写 excel 文件。它在 2014 年 1 月 6 日有更新说它可以在 iOS 中运行:

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

另外,请阅读为什么编写 excel 文件如此困难,因为它既真实又有趣: http ://www.joelonsoftware.com/items/2008/02/19.html

于 2015-01-04T16:14:41.363 回答
0

尝试在文档顶部添加以下特殊标签:

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

我刚刚用你的 XML 尝试了这个标签,它在我的 Windows7 机器上运行——我将你的文档保存为“test.excel.xml”——这个<?mso...>标签足以让 Windows 将格式识别为 Excel。

这里也有一个例子:http ://en.wikipedia.org/wiki/Microsoft_Office_XML_formats

于 2014-02-17T21:27:28.187 回答
0

这是创建 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];
      });
 });
于 2016-12-29T12:52:22.423 回答
-4

尝试创建 CSV 文件格式,这将是最好的方法

于 2013-02-12T09:12:02.443 回答