1. GitHub에 있는 엑셀(XLSX) 라이브러리 사용
1.1 자신의 프로젝트 선택 -> Frameworks.. 선택 -> + 클릭
1.2 왼쪽 하단 Add Package Dependency... -> https://github.com/CoreOffice/CoreXLSX.git 삽입 -> Next 클릭
1.3 CoreOfiice/CoreXLSX 라이브러리 생성 확인
1.4 엑셀과 직접적으로 관련있는 swift파일은 "CoreXLSX" 폴더에서 확인
위 순서는 지난 번에 포스팅한 글과 유사하여 그림을 뺐는데, 따라가기가 어려우시면 아래의 포스팅을 한번 확인 해주세요.
https://value-of-life.tistory.com/150
2. 엑셀 파일 불러오기
2.1 엑셀 파일 생성 -> Playground -> Resource로 넣기
엑셀 파일을 불러오기 위해서는 먼저 엑셀 파일 1개를 생성해주세요. 저는 Playground를 이용했는데, 해당 프로젝트 아래 Resource에 넣어주시면 됩니다. (Playground파일 생성 방법 : xcode - file - new - Playground...)
2.2 불러올 엑셀 파일 지정
위 2.1 에서 email이라는 이름의 엑셀 파일을 하나 생성했습니다. 다음은 이 엑셀 파일을 지정할 수 있어야 하는데요. 아래와 같은 코드로 해당 엑셀파일의 위치한 경로를 가져오고, 파일을 지정할 수 있습니다.
제가 임의로 생성한 클래스 OpenXlsx 인데요. 프로퍼티로 3가지(파일 이름, 파일 타입, 파일 경로)를 만들었습니다. 즉, 이 3가지를 알면 파일을 열수 있도록 말이지요. 이니셜라이저에서 filepath를 초기화 할 때는 파일 이름과 타입을 알면 Resource에서 찾아 경로를 알려줍니다.
2.3 지정한 엑셀 파일 불러오기
위에서 지정한 엑셀 파일을 열겠습니다. 지금부터는 GitHub에서 가져온 라이브러리를 사용합니다.
위에서 지정했던 엑셀파일이 존재한다면 그 파일을 가져오고, 없다면 에러메시지를 출력합니다.
2.4 sheet의 이름과 지정한 열의 이름 출력하기
아래 그림에 해당하는 라이브러리들의 함수와 변수들을 하나하나 확인하고 싶지만, 그 내용이 굉장히 복잡할뿐더러 시간이 오래걸리고, 저도 이해하기가 매우 어려워 대략적인 설명만을 담았습니다.
각 줄의 주석의 설명을 참고하시면 sheet의 이름과, 특정 열의 값을 어떻게 가져와 출력할 수 있는지 대략적으로 알 수 있으실겁니다. 이것을 참조해서 응용하면 엑셀의 모든 내용을 자유롭게 가져올 수 있을 것으로 보입니다.
2.4 출력 결과 확인
아래 그림은 2.4의 코드를 실행한 출력 결과입니다.
3. 전체 소스코드
MyPlayground.playground import CoreXLSX
class OpenXlsx {
public var fileName: String public var fileType: String public let filePath : String?
init(fileName: String, fileType: String, filepath: String?) { self.fileName = fileName self.fileType = fileType self.filePath = Bundle.main.path(forResource: fileName, ofType: fileType) } convenience init() { self.init(fileName: "email", fileType: "xlsx", filepath: nil) }
func OpenXlsxTest() { if let fpath = self.filePath { guard let file = XLSXFile(filepath: fpath) else { fatalError("XLSX file at \(String(describing: self.filePath)) is corrupted or does not exist") }
do { // 파일에서 excel의 통합문서를 지칭하는 workbook을 배열로 반환합니다. 여기서는 email.xlsx for wbk in try file.parseWorkbooks() { // woorkbook에서 sheet의 이름과 그 경로를 순환하며 name과 path 변수에 반환합니다. for (name, path) in try file.parseWorksheetPathsAndNames(workbook: wbk) {
if let worksheetName = name { // workbook에 있는 모든 sheet의 이름을 출력합니다. print("\(worksheetName)") } // sheet의 경로(path)를 이용하여 해당 sheet를 worksheet 변수에 반환합니다. let worksheet = try file.parseWorksheet(at: path) // 아래의 세 줄이 sheet별 A열에 해당하는 값을 배열로 반환합니다. if let sharedStrings = try file.parseSharedStrings() { let columnCStrings = worksheet.cells(atColumns: [ColumnReference("A")!]) .compactMap { $0.stringValue(sharedStrings) } // 해당 sheet의 A열에 해당 하는 값들 출력 print(columnCStrings) } //let worksheet = try file.parseWorksheet(at: path) /* for row in worksheet.data?.rows ?? [] { for c in row.cells { print(c) } }*/ } } } catch{} } } } var xlsx: OpenXlsx = OpenXlsx() print(xlsx.OpenXlsxTest()) |
보시고 궁금한 사항이 있으시면 댓글 부탁드리고, 계속 공부하며 업데이트 해보도록 하겠습니다.
감사합니다.
'코딩의 유익함 > 스위프트(Swift)' 카테고리의 다른 글
Swift(스위프트) - Realm 설치 및 연동 예제 (1) | 2021.02.05 |
---|---|
Swift(스위프트) - 저장소 종류 (SQLite, Core Data, Realm) (0) | 2021.02.05 |
Swift(스위프트) - mac(맥) m1 에서 cocoapods 설치 및 적용하기 (3) | 2021.02.04 |
Swift(스위프트) - SMTP를 이용하여 메일 보내기 (1) | 2021.01.23 |
Swift(스위프트) - 웹 서버에서 json 형태의 데이터 가져오기 (0) | 2021.01.13 |