Android Read an excel file

사용 언어: Kotlin 1.6.10
사용 버전: Android Studio 2021.1.1
​

안드로이드 Read an excel file을 알아보겠습니다.

​
안드로이드에서 엑셀(Excel) 파일을 읽는 걸 해볼 건데요. 아무래도 일반 텍스트가 아니다 보니 라이브러리를 써줍니다.
Apache에서 만든 POI 라이브러리를 씁니다.
​
https://poi.apache.org/


이것을 바로 안드로이드에 사용하려면 복잡합니다. 그래서 marven repository를 사용합니다.


여기서 최신 버전을 사용해 볼게요.

5.2.0으로 갑니다.



아래 페이지에서 Gradle (Short)의 내용을 복사해 줍니다.




Module 용 build.gradle로 갑니다.

dependencies에 붙여넣기하고 Sync Now를 합니다.
implementation 'org.apache.poi:poi:5.2.0'




엑셀을 안드로이드 파일 구조에 넣기 위해서는 assets 폴더가 필요합니다.

New - Folder - Assets Folder를 누릅니다.




이렇게 만든 assets에 excel 파일을 넣습니다.






assets에 위치한 파일들을 읽기 위해서는 assetManager를 사용해야 합니다.




assetManager를 정의하고, assetManager.open()을 통해서 해당 파일에 접근합니다.

​

​

​

공식 홈페이지에 문서를 봅시다.



HSSF와 XSSF 형식이 있는데, 문서에 따르면 HSSF는 Excel 97(-2007) (.xls) 파일 형식이라고 합니다. 그리고 XSSF는 Excel 2007 OOXML (.xlsx) 파일 형식이라고 하네요.

​

제 파일은 xls니까 HSSF가 아닐까 싶습니다.

​

실행을 하니 아래와 같은 오류가 나옵니다.

최소 api가 26 이상이어야 한답니다.

api 26은 android 8 (Oreo)입니다. 음... 너무 뼈아픈데요. 어쩔 수 없죠. 찾아보니 4.0.1 버전은 아래 버전도 지원하는 것 같더군요. 하지만 4.0.1 버전은 취약한 버전의 log4j 라이브러리를 쓰기 때문에 알아서 잘 판단해서 사용하시길 바랍니다.





아쉽게도 MethodHandle.invoke와 MethodHandle.invokeExact는 desugar(낮은 버전에서도 사용할 수 있게 만드는 기능)도 지원하지 않는다고 하네요. 어쩔 수 없이 26으로 써야겠습니다. 대한민국 사람들은 휴대폰 빨리 바꾸니까 아직도 Android 8을 쓰는 사람은 별로 없을 겁니다.





minSdk를 26으로 변경했습니다. 이제 오류는 없습니다.




이제 코드로 돌아와서 아까 assetManager로 연 excel 파일을 HSSFWorkbook으로 불러온 다음, getSheetAt을 통해 sheet를 가져옵니다. 





sheet는 엑셀 파일 밑에 있는 저 시트를 말합니다.





​

sheet.getRow()로 원하는 줄을 선택합니다.

그리고 row.getCell()로 선택한 줄에서 원하는 칸을 고릅니다.




선택한 cell을 출력해 보면 엑셀에 있는 값이 나옵니다.





​

19 번째 줄을 보면, inputStream을 사용합니다. 이렇게 하면 Memory를 많이 사용하게 되고, 적은 Memory를 사용하려면 File로 불러오면 됩니다. 휴대폰은 메모리가 적으니까 File을  쓰면 좋을 것 같네요. File로 저장한 뒤 불러와야 하는데 귀찮으니 넘어가겠습니다.

​

​

inputStream을 close() 해주는 것을 잊으시면 안 됩니다.





반복문으로 읽어 보겠습니다.

iterator()를 활용하여 만들면 모든 엑셀 내용을 다 읽을 수 있습니다.





자 이제 활용하시면 됩니다.

​

끝.


카테고리: Android

댓글

이 블로그의 인기 게시물

음악 총보(Score), 파트보(Part)

Python urllib.parse.quote()

일본어 문장부호

Kivy 시작하기 12 (Pyinstaller로 exe 파일 만들기)

KiCad 시작하기 6 (FreeRoute 사용하기 1)

KiCad 시작하기 7 (FreeRoute 사용하기 2)

KiCad 시작하기 3 (새로운 소자 추가하기)

Python urllib.request.urlopen()

RFC 9421

Android R class