• iOS Excel导出,创建,编辑问题


    这段时间做一个项目,项目中这样的一个操作,就是将我拿到的数据以excel文件格式导出,并分享,查了很多资料,发现网上这方面的资料并不是很多,现在就自己通过网上查到的资料及个人实践后进行个总结,希望可以帮到大家。

    一.创建简单的excel表,里面只有一个sheet的功能,如下图所示:

    参照链接如下:http://www.jianshu.com/p/b4efb5762e1e

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

    步骤:

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

    代码如下:

    // 创建存放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 < 10; 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"];

        }

        

        

        

        /*--------excel---------*/

        // 把数组拼接成字符串,连接符是 (功能同键盘上的tab键)

        NSString *fileContent = [xlsDataMuArr componentsJoinedByString:@" "];

        // 字符串转换为可变字符串,方便改变某些字符

        NSMutableString *muStr = [fileContent mutableCopy];

        // 新建一个可变数组,存储每行最后一个 的下标(以便改为 )

        NSMutableArray *subMuArr = [NSMutableArray array];

        for (int i = 0; i < muStr.length; i ++) {

            NSRange range = [muStr rangeOfString:@" " options:NSBackwardsSearch range:NSMakeRange(i, 1)];

            if (range.length == 1) {

                [subMuArr addObject:@(range.location)];

            }

        }

        // 替换末尾

        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:@" "];

            }

        }

        // 文件管理器

        NSFileManager *fileManager = [[NSFileManager alloc]init];

        //使用UTF16才能显示汉字;如果显示为#######是因为格子宽度不够,拉开即可

        NSData *fileData = [muStr dataUsingEncoding:NSUTF16StringEncoding];

        // 文件路径

        NSString *path = NSHomeDirectory();

        NSString *filePath = [path stringByAppendingPathComponent:@"/Documents/export.xls"];

        NSLog(@"文件路径: %@",filePath);

        

        

        // 生成xls文件

        [fileManager createFileAtPath:filePath contents:fileData attributes:nil];

    二,如果你的功能是解析excel文件的数据,可以用DHxlsReader

    参考链接如下:http://www.jianshu.com/p/95c88a7073a6

    DHxlsReader解析数据功能强大,不过因为它关于cell的属性都是只读属性,不能做写的操作,这个需要注意的。

    三,接下来这个就是今天介绍的重点了,LibXL,这个库很强大,可以进行创建,编辑,解析等多种Excel操作,而且可以创建下面有多个sheet的表,不过有一点让人不爽的是这个库不是免费的,你可以免费用,但是用过之后你的excel文件最上面会有这样的提示文字,如图所示:

    这个库的下载地址:http://www.libxl.com/documentation.html

    下载的文件里有创建Excel的demo,关于导入,使用的方法,下载的这个链接地址上也有详细的说明,我就不介绍那么多了,然后呢,说下我的需求及解决办法,我的需求是有一个excel模板,要求你拿到数据后将数据按照模板写入,因为模板已有,写的数据位置也已知,我只用拿到保存在项目的excel模板,把对应的数据写入对应的位置,再保存即可,具体代码如下:

    BookHandle book = xlCreateXMLBook(); // use xlCreateXMLBook() for working with xlsx files

        if (book)

        {

            NSString*filePath = [[NSBundle mainBundle]pathForResource:@"Excel" ofType:@"xlsx"];

            const char *file = [filePath cStringUsingEncoding:NSASCIIStringEncoding];

            if (xlBookLoad(book,file))

            {

                SheetHandle sheet = xlBookGetSheet(book,0);

                if (book)

                {

                    double d = xlSheetReadNum(sheet,3,1,NULL);

                    xlSheetWriteNum(sheet,3,1,d * 2,NULL);

                    xlSheetWriteStr(sheet,4,1,"new string",NULL);

                }

                NSString *documentPath =

                [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0];

                NSString *filename = [documentPath stringByAppendingPathComponent:@"outexcel.xlsx"];

                

                xlBookSave(book, [filename UTF8String]);

            }

            xlBookRelease(book);

        }

    这里有一点需要注意的是,

    大家要看到后面的注释文字哦,我就在这里碰到了个坑,xlsx文件使用的创建方法跟xls文件是不一样的,xls文件使用的方法为

    BookHandle book = xlCreateBook();

    这里除了可以设置单元格的字体颜色背景外,还能给单元格设置超链接,具体方法如下:

      //设置超链接样式,颜色,字体,下划线

    FontHandle fontLink = xlBookAddFont(book, 0);

                    xlFontSetColorA(fontLink, COLOR_BLUE);

                    xlFontSetSizeA(fontLink, 8);

                    xlFontSetNameA(fontLink, "Arial");

                    xlFontSetUnderlineA(fontLink, UNDERLINE_SINGLE);

                    FormatHandle linkFormat = xlBookAddFormat(book, 0);

                    xlFormatSetFontA(linkFormat, fontLink);

                    //添加超链接的方法

                    xlSheetWriteStrA(sheet, currentRow+1, 0, "www.tempsen.com", linkFormat);

                    xlSheetAddHyperlinkA(sheet, "http://www.tempsen.com", currentRow+1, currentRow+1, 0, 0);

  • 相关阅读:
    HDU4652 Dice
    CF113D Museum / BZOJ3270 博物馆
    SHOI2013 超级跳马
    最基本的卷积与反演
    NOI2014 动物园题解
    SP11414 COT3
    new to do
    linux C++中宏定义的问题:error: unable to find string literal operator ‘operator""fmt’ with ‘const char [4]’, ‘long unsigned int’ arguments
    新装vs2010的问题:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    windows下删除虚拟串口的方法,以及解决串口使用中,无法变更设备串口号的问题
  • 原文地址:https://www.cnblogs.com/cui-cui/p/7107673.html
Copyright © 2020-2023  润新知