扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这里有一点需要注意:
网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、成都微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了观山湖免费建站欢迎大家使用!
命名的时候不能用Info.plist , INfo.plist, xxxInfo.plist等形式,否则会与系统中存在的Info.plist文件发生冲突。
点击Root这一行,然后通过点击右键-Add Row或者点击Root后面的加号来增加一行。
这一行中包含三个属性,key、type、value。其中key是字段属性,type是字段类型,value是字段对应的值。
Type包含7中类型,对写入的数据结构应属于7仲:
(NSString,NSData,NSDate,NSNumber,NSArray,NSDictionary)
读取数据
文件是什么类型,就用什么类型的数据来接收
参考文档1: iOS开发,plist文件读写那些事
参考文档2: iOS开发中怎么创建Plist文件
参考文档3: 【iOS】plist无法写入的原因
参考文档4: plist 文件写入与读取
最近开发一个蓝牙项目,需要导出和导入EXCEL数据,由于之前没有接触这类功能,查阅了相关资料,最终选择采用libxlsxwriter库实现EXCEL文档生成、CoreXLSX实现EXCEL文档内容解析,做个简单汇总方便以后查阅,费话不多说,直接上干货。
Libxlsxwriter 是一个 C 库,可用于在 Excel 2007+ XLSX 文件中写入文本、数字、公式和指向多个工作表的超链接。
具体功能介绍请跳转github的库地址连接:
1、项目地址
2、使用手册地址
因为项目是用swift开发,所以这里主要简单介绍下swift项目下如何使用:
数据格式建议采用Array的方式存储每一组的数据,方便数据写入处理
文件名称根据实际需求定义,路径只需要文件夹路径拼接文件名即可
创建表格过程如下:
1、生成一张表格
2、创建一个sheet
3、设置表格的样式、格式(包含文字格式、文字颜色、对齐方式等)
样式设置可参考使用手册里的说明,这里大概列几个供参考:
4、关闭表格创建
如果格式不对或者样式不喜欢,可以结合实际重新设置
QuickLook的框架详解请查看:
可以通过QuickLook打开EXCEL文档,同时QuickLook还集成一系列功能(保存文件、传送文件等),导出文档功能可用这个框架实现,具体如何导出请看框架详解说明即可
可以通过设置样式创建各种复杂的EXCEL表格,文档说明也非常详细,用户很容易就可以利用该框架创建满足各种需求的EXCEL表格
没有EXCEL读取功能,因此读取功能只能另外处理
至此,一个简单的EXCEL创建过程已经完成。libxlsxwriter功能十分强大, 如果要生成一个复杂的表格,请仔细研读格式设置说明文档
CoreXLSX是一个库,它专注于表示基于XML的XLSX电子表格格式的底层结构。它允许您打开扩展名为.xlsx的电子表格存档,并将其内部结构映射到直接用Swift表示的模型类型中。
需要注意的是,此库仅为.xlsx格式提供只读支持。由于旧的legacy.xls电子表格格式具有完全不同的内部结构,如果您需要使用该类型的文件,请参考其他库。
如果您的.xlsx文件使用ECMA-376敏捷加密(这似乎是最流行的一种),请查看CryptoOffice库。
项目地址:
可通过系统提供的API打开,如下:
可通过UIDocumentPickerDelegate回调方法拿到对应的文件路径, 这里需要注意一个细节 ,如下图
读取文件时需要授权,不然有的文件无法读取,会报没有权限的错误提示,读取数据完成后,需要关闭授权
采用CoreXLSX相关API去读取数据,具体可参考项目文档说明,因为项目在读取数据时需要校验文档内容是否合法,不合法需要提示用户重新选择其他文件,校验规则可根据实际需求去做,以下列举个人项目的简单校验,如下图
最终rows得到的就是每组的数据,可通过遍历获取对应的数据,如有疑问,请参考官方文档或者官方DEMO
参考文献:
libxlsxwriter开源库:
CoreXLSX开源库:
XlsxReaderWriterSwift开源库:
谢谢各位的无私奉献。。。
非常感谢大家对我的关注!!!!
打开文件的方法:
1.获取文件的沙盒路径path
2.将path路径转化URL
3.用webView显示出来
一开始我用的方法一写,但是后来发现在高系统上报错(大概报错内容:NSCocoaErrorDomain:257)。
后来解决了,做个记录。
1、在低于iOS13的系统中。用创建文件夹的形式可以如下:
+ (NSString *)tmpLogPath
{
NSString *docPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library"];
NSString *dirPath = [docPath stringByAppendingPathComponent:@"mylog"];
NSString *filePath = [dirPath stringByAppendingPathComponent:@"tmpLog.txt"];
return filePath;
}
+ (void)writeTmpLog:(NSString *)aMsg
{
NSString *filePath = [[self class] tmpLogPath];
if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
BOOL isDir = NO;
BOOL hasDir = [[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:isDir];
if (!hasDir || !isDir) {
[[NSFileManager defaultManager] createDirectoryAtPath:filePath withIntermediateDirectories:NO attributes:nil error:nil];
}
}
NSError *error;
NSString *content =[NSString stringWithContentsOfFile:filePath
encoding:NSUTF8StringEncoding
error:error];
NSString *newContent = [NSString stringWithFormat:@"%@\n%@",content,aMsg];
[newContent writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
+ (void)clearTmpLog
{
NSString *filePath = [[self class] tmpLogPath];
[@"" writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
2、但是在iOS13上,不能这样写。系统会默认创建以为***.txt的文件夹,在写入的时候就出问题了。
会报错:NSCocoaErrorDomain:257 就是
NSFileReadNoPermissionError = 257,/ /读取错误(权限问题)
所以可以这样写:
+ (NSString *)tmpLogPath {
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [documentPath stringByAppendingPathComponent:@"mylog/tmpLog.txt"];
returnfilePath;
}
+ (void)writeTmpLog:(NSString*)aMsg {
NSString*fieldPath = [[self class]tmpLogPath];
NSLog(@"当前文件大小:%llu",[self fileSizeWithPath:fieldPath]);
NSFileManager *manager = [NSFileManager defaultManager];
if(![managerfileExistsAtPath:fieldPath]){
NSError*error;
[aMsgwriteToFile:fieldPath atomically:YES encoding:NSUTF8StringEncoding error:error];
if(error) {
NSLog(@"写入失败:%@\n",[error localizedDescription]);
}
}else{
NSError*error;
NSError*writeError;
NSString *content =[NSString stringWithContentsOfFile:fieldPath
encoding:NSUTF8StringEncoding
error:error];
if(error) {
NSLog(@"读取失败:%@\n",[error localizedDescription]);
}
NSString*newContent = [NSString stringWithFormat:@"%@\n%@",content,aMsg];
[newContentwriteToFile:fieldPath atomically:YES encoding:NSUTF8StringEncoding error:writeError];
if(writeError) {
NSLog(@"写入失败:%@\n",[writeErrorlocalizedDescription]);
}
}
}
//获取文件大小
+ (unsignedlonglong)fileSizeWithPath:(NSString*)path {
signedlonglongfileSize =0;
NSFileManager *fileManager = [NSFileManager defaultManager];
if([fileManagerfileExistsAtPath:path]) {
NSError*error =nil;
NSDictionary*fileDict = [fileManagerattributesOfItemAtPath:patherror:error];
if(!error fileDict) {
fileSize = [fileDictfileSize];
}
}
returnfileSize;
}
+ (void)clearTmpLog {
NSError*error;
NSFileManager *manager = [NSFileManager defaultManager];
NSString*filePath = [[selfclass]tmpLogPath];
[managerremoveItemAtPath:filePatherror:error];
if(error) {
NSLog(@"删除失败:%@\n",[error localizedDescription]);
}
}
ios关于文件的读取有四种方法:
#import foundation foundation.h=""
int main(int argc, const char * argv[])
{
@autoreleasepool
{
//第一种方法: NSFileManager实例方法读取数据
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES);
NSString* thepath = [paths lastObject];
thepath = [thepath stringByAppendingPathComponent:@"fd_list.txt"];
NSLog(@"桌面目录:%@", thepath);
NSFileManager* fm = [NSFileManager defaultManager];
NSData* data = [[NSData alloc] init];
data = [fm contentsAtPath:thepath];
NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
//第二种方法: NSData类方法读取数据
data = [NSData dataWithContentsOfFile:thepath];
NSLog(@"NSData类方法读取的内容是:%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
//第三种方法: NSString类方法读取内容
NSString* content = [NSString stringWithContentsOfFile:thepath encoding:NSUTF8StringEncoding error:nil];
NSLog(@"NSString类方法读取的内容是:\n%@",content);
//第四种方法: NSFileHandle实例方法读取内容
NSFileHandle* fh = [NSFileHandle fileHandleForReadingAtPath:thepath];
data = [fh readDataToEndOfFile];
NSLog(@"NSFileHandle实例读取的内容是:\n%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}
return 0;
}
/foundation
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流