XlsxReaderWriter 1.0.11

XlsxReaderWriter 1.0.11

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新发布2016 年 1 月

Fabian PahlRene BIGOT 维护。



 
依赖关系
SSZipArchive~> 0.4
XMLDictionary~> 1.4
 

XlsxReaderWriter 是一个适用于 iPhone/iPad的 Objective-C 库。它可以解析和写入 Excel OpenXml 文件(XLSX)。

特性

XlsxReaderWriter 能够

  • 读取工作表文档(XLSX 文件)
  • 保存工作表文档
  • 创建工作表
  • 复制工作表
  • 删除工作表
  • 读取单元格内容(公式、错误、字符串、富文本字符串、格式化数字、布尔值、日期)
  • 写入单元格内容(公式、错误、字符串、富文本字符串、格式化数字、布尔值、日期)
  • 获取图像
  • 添加图像(JPEG 或 PNG)
  • 在表中添加/删除行
  • 在表中添加/删除列
  • 更改数字格式
  • 从合并单元格中读取内容
  • 将单元格填充作为 UIColor 获取
  • 更改单元格填充
  • ...还有很多其他功能

待办事项

  • 在表中添加/删除列
  • 从头创建工作表文档
  • 改进数字格式
  • 边框
  • 为注释添加更好的支持(添加、删除、读取)

限制

XlsxReaderWriter 无法从头创建 SpreadsheetML (XLSX) 文件。您必须打开现有文件并修改它后再保存。实际上这没什么问题:使用 Excel 或 Numbers 创建文件并添加您需要的所有格式(填充、边框等),然后将其作为项目资源包含进来。

第三方库

此存储库包含了第三方库,但不是作为 git 子模块链接。

  • SSZipArchive:压缩/解压缩库
  • XMLDictionary:将 XML 转换为 NSDictionary,将 NSDictionary 转换为 XML

链接(Objective-C)

要将库添加到您的 Xcode 项目中

  • 创建一个新的项目或打开现有的项目
  • XlsxReaderWriter.xcodeproj 作为子项目添加到您的项目中
  • 在您的目标的 构建设置 中插入 XlsxReaderWriter 作为目标依赖项
  • 链接二进制与库 中添加 libXlsxReaderWriter.alibz.dylib
  • 在项目设置中的 链接 / 其他链接器标志 中添加 -all_load
  • 将 XlsxReaderWriter 顶级目录路径添加到 用户头文件搜索路径 中,并设置为递归。例如,将路径设置为 "$(SRCROOT)/XlsxReaderWriter/",而不是 "$(SRCROOT)/XlsxReaderWriter/XlsxReaderWriter/"

现在,您可以在代码中导入 BRAOfficeDocumentPackage.h。

链接(Swift桥接)

如果你想从Swift代码中使用这个库,请确保遵循Objective-C链接相同的步骤,然后

  • 你应当在你的桥接头文件中包含 #import "XlsxReaderWriter-swift-bridge.h"
  • 如果你没有桥接头文件,请创建一个新的.h文件,然后 #import "XlsxReaderWriter-swift-bridge.h"
  • 在项目设置中设置你的桥接文件路径: Swift编译器 - 代码生成 / Objective-C桥接头文件

更多关于这方面的信息可以在这里找到:这里

如何做

读取电子表格文档(XLSX文件)

NSString *documentPath = [[NSBundle mainBundle] pathForResource:@"testWorkbook" ofType:@"xlsx"];
BRAOfficeDocumentPackage *spreadsheet = [BRAOfficeDocumentPackage open:documentPath];

保存电子表格文档

//Save
[spreasheet save];

//Save a copy
NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"workbookCopy.xlsx"];
[spreadsheet saveAs:fullPath];

获取工作表

//First worksheet in the workbook
BRAWorksheet *firsWorksheet = spreadsheet.workbook.worksheets[0];

//Worksheet named "Foo"
BRAWorksheet *fooWorksheet = [spreadsheet.workbook createWorksheetNamed:@"Foo"];

读取单元格内容:公式

NSString *formula = [[worksheet cellForCellReference:@"B4"] formulaString]

读取单元格内容:错误

NSString *errorValue = nil;
if ([[worksheet cellForCellReference:@"B2"] hasError]) {
    errorValue = [[worksheet cellForCellReference:@"B2"] stringValue];
}

读取单元格内容:字符串

NSString *string = [[worksheet cellForCellReference:@"B6"] stringValue];

读取单元格内容:富文本

//Cell style is applied to the cell content
NSAttributedString *attributedString = [[worksheet cellForCellReference:@"B5"] attributedStringValue];

读取单元格内容:格式化数字

//Integer cell value
NSInteger cellIntValue = [[worksheet cellForCellReference:@"B5"] integerValue];

//Float cell value
CGFloat cellFloatValue = [[worksheet cellForCellReference:@"B5"] floatValue];

//Formatted number cell value
CGFloat cellFloatValue = [[worksheet cellForCellReference:@"B5"] stringValue];

读取单元格内容:布尔值

BOOL cellTruth = [[worksheet cellForCellReference:@"B5"] boolValue];

写入单元格内容:公式

[[worksheet cellForCellReference:@"Y26" shouldCreate:YES] setFormulaString:@"TODAY()"];

写入单元格内容:错误

[[worksheet cellForCellReference:@"Y27" shouldCreate:YES] setError:@"#DIV/0!"];

写入单元格内容:字符串

[[worksheet cellForCellReference:@"Y24" shouldCreate:YES] setStringValue:@"FOO / BAR"];

写入单元格内容:富文本

[[worksheet cellForCellReference:@"Z24" shouldCreate:YES]
 setAttributedStringValue:[[NSAttributedString alloc] initWithString:@"RED is not GREEN" attributes:@{NSForegroundColorAttributeName: [UIColor greenColor]}]];

写入单元格内容:格式化数字

[[worksheet cellForCellReference:@"Z23" shouldCreate:YES] setFloatValue:12.3];
[[worksheet cellForCellReference:@"Z23"] setNumberFormat:@"0.000"];

写入单元格内容:布尔值

[[worksheet cellForCellReference:@"Z21" shouldCreate:YES] setBoolValue:NO];

写入单元格内容:日期

NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.dateFormat = @"MM/dd/yyyy";
[[worksheet cellForCellReference:@"Y25" shouldCreate:YES] setDateValue:[df dateFromString:@"10/07/1982"]];
[[worksheet cellForCellReference:@"Y25"] setNumberFormat:@"m/d/yyyy"];

获取单元格填充为UIColor

UIColor *cellFillColor = [[worksheet cellForCellReference:@"A35"] cellFillColor];

更改单元格填充

[[worksheet cellForCellReference:@"A36" shouldCreate:YES] setCellFillWithForegroundColor:[UIColor yellowColor] backgroundColor:[UIColor blackColor] andPatternType:kBRACellFillPatternTypeDarkTrellis];

获取图片

//Works with oneCellAnchor or twoCellAnchored image
UIImage *image = [worksheet imageForCellReference:@"G8"].uiImage;

添加图片(JPEG或PNG格式)

UIImage *image = [UIImage imageNamed:@"Kitten.jpeg"];
//preserveTransparency force JPEG (NO) or PNG (YES)
BRAWorksheetDrawing *drawing = [worksheet addImage:image betweenCellsReferenced:@"G2" and:@"I10"
                                        withInsets:UIEdgeInsetsZero preserveTransparency:NO];
//Set drawing insets (percentage)
drawing.insets = UIEdgeInsetsMake(0., 0., .5, .5);

在表格中添加/移除行

//Insert one row before 18th row
[worksheet addRowsAt:18];
//Remove it
[worksheet removeRow:18]

//Insert 10 rows before 18th row
[worksheet addRowsAt:18 count:10];
//Remove them
[worksheet removeRow:18 count:10];

在表格中添加/移除列

TODO

更改数字格式

[[worksheet cellForCellReference:@"Y25"] setNumberFormat:@"_(0.00_);(0.00)"];

从合并单元格中读取内容

//Get the cell at C10 or the upper-left cell if C10 belongs to a merge cell
BRACell *cell = [worksheet cellOrFirstCellInMergeCellForCellReference:@"C10"]

创建工作表

BRAWorksheet *worksheet = [spreadsheet.workbook createWorksheetNamed:@"Foo"];

复制工作表

BRAWorksheet *worksheetToCopy = spreadsheet.workbook.worksheets[0];
BRAWorksheet *worksheet = [spreadsheet.workbook createWorksheetNamed:@"Foo" byCopyingWorksheet:worksheetToCopy];

移除工作表

[_spreadsheet.workbook removeWorksheetNamed:@"Foo"];

从Swift执行一些简单操作

    let documentPath = NSBundle.mainBundle().pathForResource("testWorkbook", ofType: "xlsx")

    let odp = BRAOfficeDocumentPackage.open(documentPath)
    let worksheet: BRAWorksheet = odp!.workbook.worksheets[0] as! BRAWorksheet;

    NSLog("%@", worksheet.cellForCellReference("A1").attributedStringValue())

    let paths: Array = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) as Array
    let fullPath: String = (paths[0] as! String).stringByAppendingString("testSaveAs.xlsx")
    odp!.saveAs(fullPath)

关于XLSX文件的说明

XLSX文件是OPC包(更多信息请参阅ECMA-376)。以下是对包内容的简化分层表示。

文件有关系,文件是关系……每当你想更改库中的内容时,都看看这张图片。

测试覆盖率

测试结束时要运行的测试覆盖率脚本。您需要通过Macports安装LCOV以运行覆盖率报告生成。

报告将放置在/Users/Shared/Coverage。

我使用自定义CSS样式LCOV。请将您的CSS放置在此路径:/Users/Shared/Coverage/gcov.css

许可证

版权所有(c)2014 René BIGOT。

XlsxReaderWriter库应附有LICENSE文件。此文件包含与该发行版相关的许可。如果没有许可,请联系我 @renebigot