iOS使用XlsxReaderWriter創(chuàng)建Excel

前言:

因?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ǔ)充~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本例為設(shè)置密碼窗口 (1) If Application.InputBox(“請(qǐng)輸入密碼:”) = 1234 Th...
    浮浮塵塵閱讀 14,733評(píng)論 1 20
  • using System; using System.Data;using System.Configuratio...
    北風(fēng)知我意閱讀 6,272評(píng)論 2 2
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • 1.1 VBA是什么 直到90年代早期,使應(yīng)用程序自動(dòng)化還是充滿挑戰(zhàn)性的領(lǐng)域.對(duì)每個(gè)需要自動(dòng)化的應(yīng)用程序,人們不得...
    浮浮塵塵閱讀 22,141評(píng)論 6 49
  • 在實(shí)習(xí)開(kāi)發(fā)中,生成PDF或Excel表格是很常見(jiàn)的功能,但是有時(shí)往往在短時(shí)間之內(nèi)又不能很好的寫(xiě)出功能齊全的代碼,所...
    我的馬兒有些瘦閱讀 1,357評(píng)論 0 0

友情鏈接更多精彩內(nèi)容