반응형
스프링 부트를 사용하여 엑셀 파일을 읽는 방법
나는 엑셀 파일을 가져와서 내용을 저장하고 데이터베이스에 저장하는 스프링 부트 애플리케이션을 만들고 있습니다.저는 많은 방법을 시도했습니다.하지만 성공하지 못했습니다.이걸 어떻게 하는지 아는 사람?엑셀 파일을 가져오기 위한 컨트롤러를 어떻게 만드는지 모르겠습니다.그리고 엑셀 파일에서 데이터를 읽기 위해 포함해야 하는 종속성이 있습니까?
드디어 해결책을 찾았습니다.
양식을 업로드하기 위한 HTML 파일은
<form th:action="@{/import}" method="post" enctype="multipart/form-data">
<input type="file" th:name="file" />
<input th:type="submit" value="Import" />
</form>
컨트롤러 클래스는
@PostMapping("/import")
public void mapReapExcelDatatoDB(@RequestParam("file") MultipartFile reapExcelDataFile) throws IOException {
List<Test> tempStudentList = new ArrayList<Test>();
XSSFWorkbook workbook = new XSSFWorkbook(reapExcelDataFile.getInputStream());
XSSFSheet worksheet = workbook.getSheetAt(0);
for(int i=1;i<worksheet.getPhysicalNumberOfRows() ;i++) {
Test tempStudent = new Test();
XSSFRow row = worksheet.getRow(i);
tempStudent.setId((int) row.getCell(0).getNumericCellValue());
tempStudent.setContent(row.getCell(1).getStringCellValue());
tempStudentList.add(tempStudent);
}
}
종속성을 추가해야 합니다.
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.12</version>
</dependency>
<!-- excel 2007 over-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.12</version>
</dependency>
이제 잘 될 겁니다.
메이븐 종속성을 사용하여 쉽게 사용할 수 있는 Apache POI 라이브러리를 사용합니다.
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency>
파일을 읽을 코드
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
public class ApachePOIExcelRead {
private static final String FILE_NAME = "/tmp/MyFirstExcel.xlsx";
public static void main(String[] args) {
try {
FileInputStream excelFile = new FileInputStream(new File(FILE_NAME));
Workbook workbook = new XSSFWorkbook(excelFile);
Sheet datatypeSheet = workbook.getSheetAt(0);
Iterator<Row> iterator = datatypeSheet.iterator();
while (iterator.hasNext()) {
Row currentRow = iterator.next();
Iterator<Cell> cellIterator = currentRow.iterator();
while (cellIterator.hasNext()) {
Cell currentCell = cellIterator.next();
//getCellTypeEnum shown as deprecated for version 3.15
//getCellTypeEnum ill be renamed to getCellType starting from version 4.0
if (currentCell.getCellTypeEnum() == CellType.STRING) {
System.out.print(currentCell.getStringCellValue() + "--");
} else if (currentCell.getCellTypeEnum() == CellType.NUMERIC) {
System.out.print(currentCell.getNumericCellValue() + "--");
}
}
System.out.println();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
당신의 요구에 따라 위의 프로그램을 수정해 주세요.Excel 파일 열 인덱스를 알고 있는 경우 행을 읽기 셀로 지정할 수 있습니다.row.getCell(0)
어디에row
과 같은 물건.XSSFRow row = (XSSFRow) iterator.next();
이것이 당신에게 도움이 되기를 바랍니다.
다음과 같은 종속성도 추가할 수 있습니다.
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>3.1.0</version>
</dependency>
내게 적합함
<form th:action="@{/import}" method="post" enctype="multipart/form-data">
<input type="file" th:name="file">
<input th:type="submit" value="Import" />
@PostMapping("/import")
public void mapReapExcelDatatoDB(@RequestParam("file") MultipartFile reapExcelDataFile) throws IOException {
List<Test> tempStudentList = new ArrayList<Test>();
XSSFWorkbook workbook = new XSSFWorkbook(reapExcelDataFile.getInputStream());
XSSFSheet worksheet = workbook.getSheetAt(0);
for(int i=1;i<worksheet.getPhysicalNumberOfRows() ;i++) {
Test tempStudent = new Test();
XSSFRow row = worksheet.getRow(i);
tempStudent.setId((int) row.getCell(0).getNumericCellValue());
tempStudent.setContent(row.getCell(1).getStringCellValue());
tempStudentList.add(tempStudent);
}
}
언급URL : https://stackoverflow.com/questions/50849800/how-to-read-excel-file-using-spring-boot
반응형
'source' 카테고리의 다른 글
boto를 사용하여 S3 버킷의 디렉토리에 파일을 업로드하는 방법 (0) | 2023.07.18 |
---|---|
시스템에서 RVM(Ruby Version Manager)을 제거하는 방법 (0) | 2023.07.18 |
Python이 return_value 대신 MagicMock 개체를 반환합니다. (0) | 2023.07.18 |
Pymongo를 사용하여 Mongodb의 연결 시간 제한을 설정하는 방법은 무엇입니까? (0) | 2023.07.18 |
네이티브 쿼리를 사용하여 스프링 데이터에서 사용자 지정 개체 반환 (0) | 2023.07.18 |