【问题标题】:How to write array data into excel file (CSV) in objective c如何在目标c中将数组数据写入excel文件(CSV)
【发布时间】:2014-08-18 15:08:34
【问题描述】:

我正在尝试将数组数据写入excel(实际上它是一个CSV,但它是在excel中打开的)。我使用以下代码来做到这一点:

NSMutableArray *list;
    list = [[NSMutableArray alloc] init];

NSString *string = [list componentsJoinedByString:@","];

NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"yourFileName.csv"];
[data writeToFile:appFile atomically:YES];

它工作正常,但问题是我的“列表”数组中有 20 个对象,所有这 20 个对象都写在并排的单元格中。我想要的是在一行中写入前 4 个对象,然后移动到新行并再次在该行中写入接下来的 4 个对象,直到列表数组中的所有对象都完成。

谁能帮我解决这个问题?

【问题讨论】:

  • 您必须在每四个对象的末尾插入“\n”。因此,不要使用componentsJoinedByString:,而是尝试使用 for 循环手动执行它并添加\n
  • 是否可以在数组的两个对象之间插入字符串?如果我想在索引 3 处插入一个介于 1 和 4 之间的字符串......我该怎么做?

标签: ios objective-c arrays excel export-to-csv


【解决方案1】:
NSMutableArray *list = ...

NSMutableString *buffer = [NSMutableString string];

for (NSUInteger i = 0; i < list.count; i++) {
    NSString *value = list[i];

    if (i > 0) {
       if (i % 4 == 0) { //after every 4th value
          buffer.append("\n"); //end line
       }
       else {
          buffer.append(",");
       }
    }

    buffer.append(value);

    //if your values contain spaces, you should add quotes around values...
    //buffer.appendFormat(@"\"%@\"", value);
}

NSData *data = [buffer dataUsingEncoding:NSUTF8StringEncoding];
...

【讨论】:

  • 嗨,苏丹,上面的代码与 csv 配合得很好。我使用相同的代码创建了一个 xls 文件....但问题是所有数据都被复制到每行的第一个单元格中。换行符完美无缺,但是单元格中断不适用于 xls 文件。
  • xls 文件是完全不同的东西。如果要将 csv 导入 excel,请确保正确设置列分隔符。
【解决方案2】:

要在 CSV 中换行,只需在“行尾”中输入 \r\n。小心点,因为在 mac 中你只需要 \r\n(现在还不确定)

【讨论】:

    猜你喜欢
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多