티스토리 뷰

 

 

 

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)
    }
}

 

 

 

댓글