美文网首页
iOS使用XlsxReaderWriter创建Excel

iOS使用XlsxReaderWriter创建Excel

作者: 翟泊涛 | 来源:发表于2018-01-12 10:54 被阅读0次

前言:

因为总所周知的原因,在苹果的地盘使用微软的东西总会很不顺畅,作为电子表格软件,Excel在普及性上完胜苹果Numbers,所以一些商用软件有导出为Excel格式的要求就很正常了,但是使用起来会有很多坑。以下逐步总结起来:

1、配置XlsxReaderWriter到项目

这方面网上有现成的例子,照做就是:

Objective-C项目:https://github.com/renebigot/XlsxReaderWriter

Swift项目:https://github.com/joelparkerhenderson/demo_swift_excel_xlsx_reader_writer

简而言之,就是把现成的XlsxReaderWriter作为一个项目导入到你需要使用的项目中。

2、怎么创建Excel

目前没有办法直接凭空生成一个Excel文件,但有一个曲线救国的办法,在项目中导入一个xlsx模板,然后通过读取这个预先存在于main-bundle路径下的文件,在user的documents文件夹下另存为一个,代码如下(swift代码,下同):

// 模板地址

let templatePath: String = Bundle.main.path(forResource: "template", ofType: "xlsx")!

// document目录

let documentPath: String = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last!

print("------ WORKING DIRECTORY : \(documentPath)")

// 读取并修改模板文件

let spreadsheet: BRAOfficeDocumentPackage = BRAOfficeDocumentPackage.open(templatePath)

let sheet: BRASheet = spreadsheet.workbook.sheets[0] as! BRASheet

 let worksheet: BRAWorksheet = spreadsheet.workbook.worksheets[0] as! BRAWorksheet

//TODO: 可以对读取的模板文件做任意修改

// 另存为documents下的文件

 let fileName: String = "demo".appending(".xlsx")

 let filePath: String = documentPath.appending("/\(fileName)")

 spreadsheet.save(as: filePath)

可以通过log输出的WORKING DIRECTORY 在模拟器中打开路径,查看另存为的xlsx文件是否按照预期修改

3 怎么合并单元格

// CellA:CellB合并

let beginA = "A1"

let endB = "B1"

let mergeAtoB: BRAMergeCell = BRAMergeCell.init(rangeReference: "\(beginA):\(endB)")

worksheet.mergeCells.add(mergeAtoB)

当然也可跨行合并,只需拼接起始单元格和结束单元格的引用字符串,并中间加入:就可以了

如 "A1:H28"

// 引用合并的单元格搞事情

let itemCell: BRACell = worksheet.cellOrFirstCellInMergeCell(forCellReference: beginA)

itemCell.setStringValue("demo")

4 怎么调整行高

let rowIndex: Int = 0 // 行索引

let aRow: BRARow = worksheet.rows.object(at: rowIndex) as! BRARow // 获取行

aRow.hasCustomHeight = true // 自定义高度

aRow.height = 30 // 新高度

5 怎样获取每列的宽度

let columnIds: [String] = ["C1", "D1", "E1", "F1"]

for index in 0..<columnIds.count {

    let cell: BRACell = worksheet.cell(forCellReference: columnIds[index])

    let column: BRAColumn = worksheet.columns.object(at: cell.columnIndex()) as! BRAColumn

    print(column.pointWidth)  // 每列宽 单位像素

}

6 怎么插入图片

这里有一个坑,就是模板文件必须有一个已经存在的图片作为占位图片(不论大小),否则不论怎么写代码都不会插入成功

支持png和JPEG格式的图片 

let insertBeginIndex = 2 // 插入行索引

let rowCount: Int = 10 // 图像所跨行数

let beginIdentifer = "A\(insertBeginIndex)"

let endIdentifer = "I\(insertBeginIndex+rowCount)"

let imageFileName = "demo.png"

let imagePath = documentPath.appending("/\(imageFileName)")

if let image = UIImage.init(contentsOfFile: imagePath) {

                let drawing: BRAWorksheetDrawing = worksheet.add(image, betweenCellsReferenced: beginIdentifer, and: endIdentifer, with: UIEdgeInsets.zero, preserveTransparency: true) // preserveTransparency参数:png是true,jpeg是false

                drawing.shouldKeepAspectRatio = true // 保持长宽比

 }

7 xlsx文件的mime类型:

"application/vnd.ms-excel"

暂时就这么多,以后有新的功能需求实现再补充~

相关文章

网友评论

      本文标题:iOS使用XlsxReaderWriter创建Excel

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