美文网首页
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