前言:
因?yàn)榭偹苤脑?,在蘋(píng)果的地盤(pán)使用微軟的東西總會(huì)很不順暢,作為電子表格軟件,Excel在普及性上完勝蘋(píng)果Numbers,所以一些商用軟件有導(dǎo)出為Excel格式的要求就很正常了,但是使用起來(lái)會(huì)有很多坑。以下逐步總結(jié)起來(lái):
1、配置XlsxReaderWriter到項(xiàng)目
這方面網(wǎng)上有現(xiàn)成的例子,照做就是:
Objective-C項(xiàng)目:https://github.com/renebigot/XlsxReaderWriter
Swift項(xiàng)目:https://github.com/joelparkerhenderson/demo_swift_excel_xlsx_reader_writer
簡(jiǎn)而言之,就是把現(xiàn)成的XlsxReaderWriter作為一個(gè)項(xiàng)目導(dǎo)入到你需要使用的項(xiàng)目中。
2、怎么創(chuàng)建Excel
目前沒(méi)有辦法直接憑空生成一個(gè)Excel文件,但有一個(gè)曲線救國(guó)的辦法,在項(xiàng)目中導(dǎo)入一個(gè)xlsx模板,然后通過(guò)讀取這個(gè)預(yù)先存在于main-bundle路徑下的文件,在user的documents文件夾下另存為一個(gè),代碼如下(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: 可以對(duì)讀取的模板文件做任意修改
// 另存為documents下的文件
?let fileName: String = "demo".appending(".xlsx")
?let filePath: String = documentPath.appending("/\(fileName)")
?spreadsheet.save(as: filePath)
可以通過(guò)log輸出的WORKING DIRECTORY 在模擬器中打開(kāi)路徑,查看另存為的xlsx文件是否按照預(yù)期修改
3 怎么合并單元格
// CellA:CellB合并
let beginA = "A1"
let endB = "B1"
let mergeAtoB: BRAMergeCell = BRAMergeCell.init(rangeReference: "\(beginA):\(endB)")
worksheet.mergeCells.add(mergeAtoB)
當(dāng)然也可跨行合并,只需拼接起始單元格和結(jié)束單元格的引用字符串,并中間加入:就可以了
如 "A1:H28"
// 引用合并的單元格搞事情
let itemCell: BRACell = worksheet.cellOrFirstCellInMergeCell(forCellReference: beginA)
itemCell.setStringValue("demo")
4 怎么調(diào)整行高
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 怎么插入圖片
這里有一個(gè)坑,就是模板文件必須有一個(gè)已經(jīng)存在的圖片作為占位圖片(不論大?。駝t不論怎么寫(xiě)代碼都不會(huì)插入成功
支持png和JPEG格式的圖片?
let insertBeginIndex = 2 // 插入行索引
let rowCount: Int = 10 // 圖像所跨行數(shù)
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參數(shù):png是true,jpeg是false
? ? ? ? ? ? ? ? drawing.shouldKeepAspectRatio = true // 保持長(zhǎng)寬比
?}
7 xlsx文件的mime類型:
"application/vnd.ms-excel"
暫時(shí)就這么多,以后有新的功能需求實(shí)現(xiàn)再補(bǔ)充~