iOS 生成Excel文件

作者: 我唔知啊 | 来源:发表于2016-08-04 16:45 被阅读3949次

    例子在这里

    一、原理:

    字符串插入"\t" (Tab键,制表键的简写),达到换列的作用。

    二、步骤:

    1、用"\t"把数据数组拼接成字符串;
    2、把每行末尾的"\t"改成换行符"\n";
    3、生成后缀名为xls的文件。

    三、代码:

    - (void)createXLSFile {
        // 创建存放XLS文件数据的数组
        NSMutableArray  *xlsDataMuArr = [[NSMutableArray alloc] init];
        // 第一行内容
        [xlsDataMuArr addObject:@"Time"];
        [xlsDataMuArr addObject:@"Address"];
        [xlsDataMuArr addObject:@"Person"];
        [xlsDataMuArr addObject:@"Reason"];
        [xlsDataMuArr addObject:@"Process"];
        [xlsDataMuArr addObject:@"Result"];
        // 100行数据
        for (int i = 0; i < 100; i ++) {
            [xlsDataMuArr addObject:@"2016-12-06 17:18:40"];
            [xlsDataMuArr addObject:@"GuangZhou"];
            [xlsDataMuArr addObject:@"Mr.Liu"];
            [xlsDataMuArr addObject:@"Buy"];
            [xlsDataMuArr addObject:@"TaoBao"];
            [xlsDataMuArr addObject:@"Debt"];
        }
        // 把数组拼接成字符串,连接符是 \t(功能同键盘上的tab键)
        NSString *fileContent = [xlsDataMuArr componentsJoinedByString:@"\t"];
        // 字符串转换为可变字符串,方便改变某些字符
        NSMutableString *muStr = [fileContent mutableCopy];
        // 新建一个可变数组,存储每行最后一个\t的下标(以便改为\n)
        NSMutableArray *subMuArr = [NSMutableArray array];
        for (int i = 0; i < muStr.length; i ++) {
            NSRange range = [muStr rangeOfString:@"\t" options:NSBackwardsSearch range:NSMakeRange(i, 1)];
            if (range.length == 1) {
                [subMuArr addObject:@(range.location)];
            }
        }
        // 替换末尾\t
        for (NSUInteger i = 0; i < subMuArr.count; i ++) {
    #warning  下面的6是列数,根据需求修改
            if ( i > 0 && (i%6 == 0) ) {
                [muStr replaceCharactersInRange:NSMakeRange([[subMuArr objectAtIndex:i-1] intValue], 1) withString:@"\n"];
            }
        }
        // 文件管理器
        NSFileManager *fileManager = [[NSFileManager alloc]init];
        //使用UTF16才能显示汉字;如果显示为#######是因为格子宽度不够,拉开即可
        NSData *fileData = [muStr dataUsingEncoding:NSUTF16StringEncoding];
        // 文件路径
        NSString *path = NSHomeDirectory();
        NSString *filePath = [path stringByAppendingPathComponent:@"/Documents/export.xls"];
        NSLog(@"文件路径:\n%@",filePath);
        // 生成xls文件
        [fileManager createFileAtPath:filePath contents:fileData attributes:nil];
    }
    

    四、导出结果

    如果显示为#######是因为格子宽度不够,拉开格子即可

    表格

    相关文章

      网友评论

      • wahkim:问下在手机上怎么查找到该excel
      • 0c3936aa151f:你好 知道如何生成word文档吗? 我现在要做得需求就是先生成一个空白的word,然后把自己文字写上去.
      • 834f65bae4f0:感谢楼主提供的方法,基本满足了项目的需求,但是我发现如果是用这种方式生成的Excel表格是无法用iOS的三种文件预览方法展现的,而且使用电脑上的Excel打开的话会被提示文件格式和拓展名不匹配,请问有什么办法可以解决吗?
        ca74ecf24e91:@suming1910 你说的是微软的那个库吧,免费版有行数限制的最多一百:sweat::sweat:,目前只能凑活用这个了,我对预览需求不大
        834f65bae4f0:@青树一朵朵 有一个方法,需要导入第三方依赖库,它分两种,免费版会强制把第一行的内容替换成一句英文,就是声明当前文件是使用试用版生成的,不过这种方式生成的可以直接分享到微信QQ预览,楼主的文件只能直接在Number上面打开,APP不能预览,在office上打开会有提示格式和拓展名不符
        ca74ecf24e91:找到解决办法了吗
      • 我唔係JY:楼主,你的demo只能生成xls,不能生成xlsx吗?
        0c3936aa151f:你好 知道如何生成word吗?
        我唔知啊:不能,用Excel转换格式吧。
      • b6639b5aa65c:楼主这样写的xls文件格式可能有问题,ios 用DHxlsReader读不出来,普通的xls,是可以读出来的
        我唔知啊:这里生成的xls文件确实是不规范的,只是提供一种方法。
      • 菜鸟coder:楼主 生成的文件为什么不能在QQ或者微信预览 显示ERROR_MESSAGE_MAIN ERROR_MESSAGE_READON
        我唔知啊:@菜鸟coder 似乎是系统的限制,我也不太明白,帮不了你。
        菜鸟coder:@我唔知啊 是的 能在pc端查看 但是移动端预览不了
        我唔知啊:你是用iPhone 7 真机测试?
      • 海鲜味龙潭方便面:楼主 我想再一个表格里生成两个表怎么办啊?
        我唔知啊:@海鲜味龙潭方便面 添加一个sheet是吗?这个我就不清楚啦:flushed:
        海鲜味龙潭方便面:@我唔知啊 。。。。。。不是再一张表里,就是一个大的Excel表里不是能包含很多小的表吗。就相当于再Excel在左下角那再添加一个表
        我唔知啊:@海鲜味龙潭方便面 把数据隔开:sweat:
      • 开小飞:楼主,我有个小问题,创建了这个xls文件之后,怎么将他导出呢?(正式上架版本)
        比如AirDrop?
        34bb2a6201da:@我唔知啊 请问怎么传送到WPS 或者QQ啊
        我唔知啊:可以传送到QQ或WPS等软件。
      • 3cd50720ca18: 问个问题,为什么第一列里面数据写不进去
        3cd50720ca18:@我唔知啊 先赞一个👍👍
        我唔知啊:@skye11 已经解决第一列为空问题。
      • 请叫我旺仔:可以把文件中的tableview的数据整个导出去吗
        我唔知啊:@一万个舍不得 只要能添加到数组就可以。
      • 388e6fc164de:佩服佩服!
        我唔知啊:@songleileilei 多谢多谢 :relaxed:

      本文标题:iOS 生成Excel文件

      本文链接:https://www.haomeiwen.com/subject/jincsttx.html