(ios开发)导出tableView数据至excel
2015-12-25 21:18
423 查看
点击打开链接引言
在网上搜了好多的资料,把数据导出为excel格式,找了好久的资料都没找到。今天就写一篇教程给大家学习,如果有什么问题大家可以联系我。
0、开始的时候因为没有找到导出excel格式的文章,倒是找到了导出csv格式的文件的方法,但是由于中文乱码中文问题,问题一直没有找到好的解决方法。这里我也稍微介绍一下:
2、里面有example,可以参考一下、把LibXL.framework导入自己的项目当中,设置bitcode为no,以及linker也要改为-lstdc++,如图
3、上代码,导入头文件,设置代理
4、把模型tableView里面的数据取出来放在数组里:
好了,我也是个才接触IOS开发,希望这篇文章能帮到大家,转载请指明出处。
这边好久没更新维护了,大家可以去我的博客阅读原文(点击打开链接)
http://download.csdn.net/detail/ningcol/9652601 源码地址
如果你觉得我的创作对您有帮助,非常感谢您的打赏支持
在网上搜了好多的资料,把数据导出为excel格式,找了好久的资料都没找到。今天就写一篇教程给大家学习,如果有什么问题大家可以联系我。
0、开始的时候因为没有找到导出excel格式的文章,倒是找到了导出csv格式的文件的方法,但是由于中文乱码中文问题,问题一直没有找到好的解决方法。这里我也稍微介绍一下:
- (void)exportCSV:(NSString *)fileName { NSOutputStream *output = [[NSOutputStream alloc] initToFileAtPath:fileName append:YES]; [output open]; if (![output hasSpaceAvailable]) { NSLog(@"没有足够可用空间"); } else { NSString *header = @"学号,姓名\n"; //这里是文件第一行的头(逗号是换列,\n是换行) const uint8_t *headerString = (const uint8_t *)[header cStringUsingEncoding:NSUTF8StringEncoding]; NSInteger headerLength = [header lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; NSInteger result = [output write:headerString maxLength:headerLength]; if (result <= 0) { NSLog(@"写入错误"); } NSArray *students = [self queryStudents]; for (Student *stu in students) { NSString *row = [NSString stringWithFormat:@"%@,%@\n", stu.num, stu.name]; //循环插入数据<span style="font-family: Arial, Helvetica, sans-serif;">(逗号是换列,\n是换行)</span> const uint8_t *rowString = (const uint8_t *)[row cStringUsingEncoding:NSUTF8StringEncoding]; NSInteger rowLength = [row lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; result = [output write:rowString maxLength:rowLength]; if (result <= 0) { NSLog(@"无法写入内容"); } } [output close]; } }生成csv文件:
NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDirectory, YES); NSString *docementDir = [documents objectAtIndex:0]; self.filePath = [docementDir stringByAppendingPathComponent:@"Student.csv"]; NSLog(@"filePath = %@", self.filePath); [self createFile:self.filePath]; [self exportCSV:self.filePath];1、现在开始进入正题,要先下载微软的excel库文件http://www.libxl.com/download.html,解压后
2、里面有example,可以参考一下、把LibXL.framework导入自己的项目当中,设置bitcode为no,以及linker也要改为-lstdc++,如图
3、上代码,导入头文件,设置代理
#include "LibXL/libxl.h"
@interface JGdetailController ()<UITableViewDataSource,UITableViewDelegate,JGPeopleViewDelegate,UIDocumentInteractionControllerDelegate>
<pre name="code" class="objc">-(void)clickBarButton{ NSLog(@"createExcel"); BookHandle book = xlCreateBook(); // use xlCreateXMLBook() for working with xlsx files SheetHandle sheet = xlBookAddSheet(book, "Sheet1", NULL); //第一个参数代表插入哪个表,第二个是第几行(默认从0开始),第三个是第几列(默认从0开始) xlSheetWriteStr(sheet, 1, 0, "姓名", 0); xlSheetWriteStr(sheet, 1, 1, "性别", 0); xlSheetWriteStr(sheet, 1, 2, "学校", 0); xlSheetWriteStr(sheet, 1, 3, "电话", 0); for (int i = 0; i < self.nameArray.count; i++) { const char *name_c = [self.nameArray[i] cStringUsingEncoding:NSUTF8StringEncoding]; //这里是将NSString字符串转为C语言字符串 xlSheetWriteStr(sheet, i+2, 0,name_c, 0); } for (int i = 0; i < self.sexArray.count; i++) { const char *sex_c = [self.sexArray[i] cStringUsingEncoding:NSUTF8StringEncoding]; xlSheetWriteStr(sheet, i+2, 1,sex_c, 0); } for (int i = 0; i < self.schoolArray.count; i++) { const char *school_c = [self.schoolArray[i] cStringUsingEncoding:NSUTF8StringEncoding]; xlSheetWriteStr(sheet, i+2, 2,school_c, 0); } for (int i = 0; i < self.phoneArray.count; i++) { const char *phone_c = [self.phoneArray[i] cStringUsingEncoding:NSUTF8StringEncoding]; xlSheetWriteStr(sheet, i+2, 3,phone_c, 0); } NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0]; NSString *filename = [documentPath stringByAppendingPathComponent:@"out.xls"]; NSLog(@"filepath--%@",filename); xlBookSave(book, [filename UTF8String]); xlBookRelease(book); //导出xls文件 UIDocumentInteractionController *docu = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:filename]]; docu.delegate = self; CGRect rect = CGRectMake(0, 0, 320, 300); //这里感觉没什么用 [docu presentOpenInMenuFromRect:rect inView:self.view animated:YES]; //不写可以直接预览 [docu presentPreviewAnimated:YES]; //这句比较坑爹。如果不写这句,只写上面那句会弹出选择支持xls文件的APP。但是如果没写程序就会崩了,还有一个<p class="p1"><span class="s1"> //[docu </span><span class="s2">presentOptionsMenuFromRect</span><span class="s1">:rect </span><span class="s2">inView</span><span class="s1">:</span><span class="s3">self</span><span class="s1">.</span><span class="s4">view</span><span class="s1"> </span><span class="s2">animated</span><span class="s1">:</span><span class="s3">YES</span><span class="s1">];可以研究下。</span></p> }
//doucumentDelegate方法(必须实现,还有几个展示选择系统自带print还是啥的就不说了,可以自己研究下) - ( UIViewController *)documentInteractionControllerViewControllerForPreview:( UIDocumentInteractionController *)interactionController{ return self; }
4、把模型tableView里面的数据取出来放在数组里:
self.nameArray = [NSMutableArray array]; self.sexArray = [NSMutableArray array]; self.schoolArray = [NSMutableArray array]; self.phoneArray = [NSMutableArray array]; for (JGdetail *de in self.people) { [self.nameArray addObject:de.name]; if(de.sex == 0){ [self.sexArray addObject:@"男"]; 95a3 }else if(de.sex == 1){ [self.sexArray addObject:@"女"]; } [self.schoolArray addObject:de.school]; [self.phoneArray addObject:de.tel]; } NSLog(@"Array---%@",self.sexArray);5、这样就可以选择QQ打开生成的xls文件。效果如下,因为这个是要收费的,所以忽略第一行:
好了,我也是个才接触IOS开发,希望这篇文章能帮到大家,转载请指明出处。
这边好久没更新维护了,大家可以去我的博客阅读原文(点击打开链接)
http://download.csdn.net/detail/ningcol/9652601 源码地址
如果你觉得我的创作对您有帮助,非常感谢您的打赏支持
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- mysql load data 导出、导入 csv
- 使用Python生成Excel格式的图片
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- Excel 曝出 Power Query 安全漏洞,1.2 亿用户易受远程 DDE 攻击
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- VBA将excel数据表生成JSON文件
- excel vba 限制工作表的滚动区域代码
- excel vba 高亮显示当前行代码
- SQL 导入导出Excel数据的语句
- 文本、Excel、Access数据导入SQL Server2000的方法
- C#导出数据到CSV文件的通用类实例
- C#导出数据到Excel文件的方法
- Vbscript生成Excel报表的常用操作总结
- C#实现导入CSV文件到Excel工作簿的方法