public class Main {
public static void main(String[] args) throws IOException {
FileInputStream inputStream = null;
FileOutputStream outputStream = null;
XSSFWorkbook workbook = null;
String templatePath = "C:/template.xlsx";
String outputFilePath = "C:/";
String outputFileName = "outputFile.xlsx";
try {
inputStream = new FileInputStream(templatePath);
workbook = new XSSFWorkbook(inputStream);
outputStream = new FileOutputStream(outputFilePath + outputFileName);
workbook.write(outputStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
workbook.close();
outputStream.close();
inputStream.close();
}
}
}
우선 이게 코드임 apache.poi 라이브러리 사용해서 엑셀 템플릿파일 읽은후
다른 값들을 입력시켜준뒤 다른파일로 저장하는 코드라고 보면됨 값 입력하는건 생략했음
그런데 여기서 문제가 workbook을 이용하는 순간 기존 템플릿과 다른 파일이 된다는점임
코드를 실행시켜보면 기존의 템플릿과 새로운 파일 하나를 생성하는데
보시다시피 생성된 파일이 템플릿보다 8kb정도 부족한 상황임
아마 이 8kb정도의 손실로 기존의 템플릿 파일과 다르다고 인식되는게 문제
일단은 새로 생성된 파일을 직접 열고 들어가서 저장을 해주고 나오면 똑같이 122kb가 되면서
같은 파일이라고 인식을 하긴 하는데 이 문제를 해결하고싶음
*현재까지 시도한 방법
1.다른라이브러리 사용
2.XSSF가 아닌 HSSF SSXSF등 다른 메소드 사용
3.close 순서 변경
4.inputStream,outputStram이 아니라 직접 파일을 복사해서 읽고쓰기(files.copy)
+ 다른 템플릿 파일은 정상적으로 같은 파일로 생성되지만 위 템플릿만 이런 현상임
싫어
응 안해줘~
사실 기대도안함
시바럼아 원인을 찾을 생각을 해라 좀 엑셀 파일구조 구글링 해보고 저 114kb 짜리 까보고 122로 다시저장해서 까보고 다시저장하면 뭐가 더 추가되는지 살펴보던가 라이브러리 오픈소스면 엑셀파일 읽어와서 어떻게 객체화하고 다시 직렬화 할때는 어떻게 하길래 손실되는 바이너리가 생기는건지 볼 생각을해
응 다해봄