(Kotlin) Poi를 사용하여 엑셀 데이터 가져오기(1)
- 안드로이드 개발/Kotlin으로 어플 만들기
- 2019. 8. 6. 22:22
이 전 포스팅에서 RecyclerView까지 만들었는데 이어서 만들어보겠습니다.
2019/08/04 - [안드로이드 개발/Kotlin으로 어플 만들기] - (Kotlin) RecyclerView 사용하기
혹시 이전 글을 안 보셨다면 위에 링크로 가서 보고 오시면 더 도움이 됩니다.
이번에는 1)엑셀 파일을 불러와서 2)배열에 저장한 후 3)RecyclerView에 뿌려줄 계획입니다.
우선, Build.gradle의 dependencies에 아래 코드를 추가해주세요.
dependencies {
//엑셀파일 읽기 쓰기
implementation 'org.apache.poi:poi:3.9'
}
1. Kotlin (SearchActivity.kt)
1) onCreate
onCreate 안에 아래 코드를 추가합니다.
//엑셀 불러오기
readExcelFileFromAssets()
이렇게만 넣으면 당연히 빨간줄이 뜨겠죠? ㅎㅎ
해당 코드에 커서를 올려놓고 Alt+Enter를 친 뒤 Create function 'readExcelFileFromAssets'를 선택합니다.
private fun readExcelFileFromAssets() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
아래쪽에 위와 같은 코드가 생기는 것을 볼 수 있습니다.
이제 readExcelFileFromAssets 안에서 엑셀파일의 데이터를 불러온 뒤 배열에 추가해주는 작업을 할 겁니다.
2) try...catch...
엑셀을 불러오는 과정에서 에러가 발생할 수 있기 때문에 예외처리를 해주겠습니다.
try catch 사용법은 Java와 별 차이가 없어보이네요.
try {
val myInput: InputStream
// assetManager 초기 설정
val assetManager = assets
// 엑셀 시트 열기
myInput = assetManager.open("oxquiz.xls")
// POI File System 객체 만들기
val myFileSystem = POIFSFileSystem(myInput)
//워크 북
val myWorkBook = HSSFWorkbook(myFileSystem)
// 워크북에서 시트 가져오기
val s = myWorkBook.getSheetAt(0)
<<<<<여기에 계속 코드 입력>>>>
} catch (e: Exception) {
Toast.makeText(this, "에러 발생", Toast.LENGTH_LONG).show()
}
여기서 oxquiz.xls는 assets폴더에 제가 넣어둔 엑셀 파일 명입니다.
assets폴더 만들기는 아래 링크에서 확인하세요.
2019/08/04 - [안드로이드 개발] - [Android Studio] assets 폴더 만들기
3) 행, 열 반복문 (while)
엑셀파일에는 수많은 '행과 열'이 있겠죠?
sheet.getRow()를 통해서 특정 행을 가져올 수 있는데, 우리는 모든 행이 필요합니다.
그렇기 때문에 while문을 통해 반복해서 모든 행을 가져오겠습니다.
우선 행을 반복할 변수(rowIter)를 만들고,
행을 카운트할 변수(rowno)도 만들고,
while문을 통해 구한 행의 열을 저장할 Mutablelist(items)도 만듭니다.
//행을 반복할 변수 만들어주기
val rowIter = sheet.rowIterator()
//행 넘버 변수 만들기
var rowno = 0
//MutableList 생성
var items: MutableList<SearchData> = mutableListOf()
<<<<여기에 계속 코드 입력>>>>
이제 행과 열 반복문을 만들어줍니다.
//행 반복문
while (rowIter.hasNext()) {
val myRow = rowIter.next() as HSSFRow
if (rowno != 0) {
//열을 반복할 변수 만들어주기
val cellIter = myRow.cellIterator()
//열 넘버 변수 만들기
var colno = 0
var fullname = ""
var quiz = ""
//열 반복문
while (cellIter.hasNext()) {
val myCell = cellIter.next() as HSSFCell
if (colno === 1) {//2번째 열이라면,
fullname = myCell.toString()
} else if (colno === 2) {//3번째 열이라면,
quiz = myCell.toString()
}
colno++
}
//4,8번째 열을 Mutablelist에 추가
items.add(SearchData(fullname, quiz))
}
rowno++
}
Log.e("checking", " items: " + items);
이제 items라는 배열이 만들어졌습니다.
Log를 확인해보면 이렇게 items가 잘 만들어져있는 것을 확인할 수 있습니다.
2.readExcelFileFromAssets의 전체 코드
private fun readExcelFileFromAssets() {
try {
val myInput: InputStream
// assetManager 초기 설정
val assetManager = assets
// 엑셀 시트 열기
myInput = assetManager.open("oxquiz.xls")
// POI File System 객체 만들기
val myFileSystem = POIFSFileSystem(myInput)
//워크 북
val myWorkBook = HSSFWorkbook(myFileSystem)
// 워크북에서 시트 가져오기
val sheet = myWorkBook.getSheetAt(0)
//행을 반복할 변수 만들어주기
val rowIter = sheet.rowIterator()
//행 넘버 변수 만들기
var rowno = 0
//MutableList 생성
var items: MutableList<SearchData> = mutableListOf()
//행 반복문
while (rowIter.hasNext()) {
val myRow = rowIter.next() as HSSFRow
if (rowno != 0) {
//열을 반복할 변수 만들어주기
val cellIter = myRow.cellIterator()
//열 넘버 변수 만들기
var colno = 0
var fullname = ""
var quiz = ""
//열 반복문
while (cellIter.hasNext()) {
val myCell = cellIter.next() as HSSFCell
if (colno === 1) {//2번째 열이라면,
fullname = myCell.toString()
} else if (colno === 2) {//3번째 열이라면,
quiz = myCell.toString()
}
colno++
}
//4,8번째 열을 Mutablelist에 추가
items.add(SearchData(fullname, quiz))
}
rowno++
}
Log.e("checking", " items: " + items)
} catch (e: Exception) {
Toast.makeText(this, "에러 발생", Toast.LENGTH_LONG).show()
}
}
자 다음 과정은 여기서 만든 items 배열을 RecyclerView에 뿌려주면 완성인데요.
아이고.. 내용이 너무 길어져서, 2편으로 나눠서 포스팅하겠습니다. ㅠㅠ
'안드로이드 개발 > Kotlin으로 어플 만들기' 카테고리의 다른 글
(Kotlin) RecyclerView, OnclickListener 사용하기 (3) | 2019.08.10 |
---|---|
(Kotlin) Poi를 사용하여 엑셀 데이터 가져오기(2) (2) | 2019.08.07 |
(Kotlin) RecyclerView 사용하기 (2) | 2019.08.04 |
(Kotlin) Button 온클릭리스너로 Intent 이동 (0) | 2019.07.28 |
(Kotlin) Activity에 Toolbar 만들기 (0) | 2019.07.28 |