iOS & swift
Filemanager로 Excel 파일 가져와서 읽기
ggasoon2
2024. 11. 4. 02:02
1. Filemanager로 파일 가져오는 방법 입니다.
우선 앱 외부 저장소 파일에 접근하기 위해
key: Supports opening documents in place
value: yes
key: Supports Document Browser
value: yes
Info plist에 등록합니다
다음 UIDocumentPickerDelegate를 채택하고 파일을 선택 완료했을때의 api를 호출합니다
class ViewController: UIViewController {
let documnetPicker: UIDocumentPickerViewController = UIDocumentPickerViewController(forOpeningContentTypes: [.spreadsheet], asCopy: true)
override func viewDidLoad() {
super.viewDidLoad()
documnetPicker.delegate = self
}
}
extension ViewController: UIDocumentPickerDelegate {
// 파일 선택이 완료되었을 때 호출되는 delegate 메서드
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
guard let selectedFileURL = urls.first else { return }
print("Selected file URL: \(selectedFileURL)")
getExcel(path: selectedFileURL)
}
}
forOpeningContentTypes: [.spreadsheet] 여기 타입은 여러가지가 있는데 excel 파일에 해당하는 spreadsheet를 추가해줍니다.
2. 엑셀파일을 읽는 방법입니다.
SPM으로 https://github.com/CoreOffice/CoreXLSX Excel Read Libaray를 추가하고,
파일에서 읽어온 excel의 URL path를 가져옵니다
가져온 path를 CoreXLSX라이브러리 함수를 통해 엑셀 데이터를 읽어옵니다
// URL을 사용하여 엑셀 파일을 읽는 함수
func getExcel(path: URL) {
// CoreXLSX에서 파일을 로드하고 데이터 읽기ㄴ
guard let file = XLSXFile(filepath: path.path) else {
print("Failed to open file.")
return
}
do {
for wbk in try file.parseWorkbooks() {
for sheet in try file.parseWorksheetPathsAndNames(workbook: wbk) {
let worksheet = try file.parseWorksheet(at: sheet.path)
guard let parseTexts = try file.parseSharedStrings() else { return }
for parseText in parseTexts.items {
print(parseText.text)
}
}
}
} catch {
print("Error reading Excel file: \(error)")
}
}
마지막으로 총 코드입니다
//
// ViewController.swift
// GetFileReadExcel
//
// Created by jh on 10/31/24.
//
import UIKit
import CoreXLSX
//import SwiftXLSX
class ViewController: UIViewController {
let documnetPicker: UIDocumentPickerViewController = UIDocumentPickerViewController(forOpeningContentTypes: [.spreadsheet], asCopy: true)
@IBAction func tapBtn(_ sender: UIButton) {
present(documnetPicker, animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
documnetPicker.delegate = self
}
//
// URL을 사용하여 엑셀 파일을 읽는 함수
func getExcel(path: URL) {
// CoreXLSX에서 파일을 로드하고 데이터 읽기ㄴ
guard let file = XLSXFile(filepath: path.path) else {
print("Failed to open file.")
return
}
do {
for wbk in try file.parseWorkbooks() {
for sheet in try file.parseWorksheetPathsAndNames(workbook: wbk) {
let worksheet = try file.parseWorksheet(at: sheet.path)
guard let parseTexts = try file.parseSharedStrings() else { return }
for parseText in parseTexts.items {
print(parseText.text)
}
}
}
} catch {
print("Error reading Excel file: \(error)")
}
}
}
extension ViewController: UIDocumentPickerDelegate {
// 파일 선택이 완료되었을 때 호출되는 delegate 메서드
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
guard let selectedFileURL = urls.first else { return }
print("Selected file URL: \(selectedFileURL)")
getExcel(path: selectedFileURL)
}
}