일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- screencapture
- draganddrop
- linux
- server
- nodejs
- Spring Boot
- OverTheWire
- rpg server
- Digital Ocean
- java
- Git
- Packet Network
- --watch
- express
- css framework
- docker
- react
- critical rendering path
- Google Refund
- mongoDB
- MySQL
- Camera Zoom
- unity
- springboot
- SDK upgrade
- spread 연산자
- Camera Movement
- Google Developer API
- Unity IAP
- Unity Editor
- Today
- Total
우당탕탕 개발일지
[JAVA] POI 를 이용하여 .xlsx 관리하기 - Read 본문
2023/07/05
아파치 소프트웨어에서 엑셀파일을 다룰 수 있도록 만든 라이브러리 이다. 우선 라이브러리를 다운로드 (bin 으로 다운받아야함)
링크 ; https://poi.apache.org/devel/
프로젝트 마우스 우클릭 > Build Path > Configure build path > Libraries > Add External JARs 를 클릭한뒤 다운받았던(압축해제는 당연히.) jar파일을 넣어준다. 여기서 jar의 위치는 classPath 여야하며, 밖에나와있는 jar 뿐만 아니라 ooxml-lib폴더, lib 폴더 안에 있는 jar 까지 모두 임포트해준다.
POI 에서 제공하는 workbook의 버전은 총 3가지이다.
1. HSSF : excel 2007 하위버전 파일 포맷을 사용할때
2. XSSF : excel 2007 파일 포맷을 사용할때 . 읽을때 엑셀 전체를 메모리에 올리기 때문에 대용량 파일을 XSSF로 로드하려 하면 out of memory exception 이 발생할 수 있음. 읽기/ 쓰기 모두 가능
3. SXSSF : 대용량 엑셀파일을 사용할때 . 쓰기만 가능
나의 경우 현재 몇십만 개의 데이터는 사용하지 않을 것이므로 xssf를 활용하도록 한다.
에러발생..
.org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]
이 에러는 엑셀파일이 손상되었거나 잠겨있을 경우에 이렇게 된다고 한다 . 구글링을 해보니 .xlsx 의 경우 XSSF를 , .xls 일 경우에는 HSSF를 사용해야 한다고 한다.
수정본 )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
package taxaide;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class XlsxReader
{
public static void ReadXlsx(String filePath )
{
try
{
var fs = new FileInputStream(filePath);
if (filePath.endsWith("xlsx")) ParseXSSF(fs);
else if (filePath.endsWith("xls")) ParseHSSF(fs);
}
catch (Exception e) {
System.out.println("exception ."+e.getMessage());
}
}
static void ParseXSSF(FileInputStream fs) throws IOException
{
var workbook = new XSSFWorkbook(fs);
}
static void ParseHSSF(FileInputStream fs) throws IOException
{
var workbook = new HSSFWorkbook(fs);
}
}
|
cs |
다음과 같이 받은 파일의 확장자명을 확인해서 다르게 처리해주어야한다.
'ETC' 카테고리의 다른 글
[Linux] OverTheWire Lv0 ~ Lv10 (0) | 2024.03.17 |
---|---|
[Kali] Docker 에 kali linux 설치하기 (0) | 2024.03.15 |
[Git] access token 이 변경되었을 때 재로그인 하는 방법 ( authentication fail) (0) | 2023.08.12 |
[Flutter] MAC에서 Flutter 를 설치해보자 (0) | 2023.07.26 |
[Git] 깃 기능 정리 (1) | 2023.07.05 |