我正在制作一个Spring引导应用程序,它将获取excel文件并存储其内容并将其存储在数据库中。我尝试了很多方法......但没有成功。有人知道如何做到这一点。 我不知道如何制作控制器来导入excel文件。是否有任何依赖,我必须包括从excel文件
读取数据答案 0 :(得分:2)
使用可以使用Maven Dependencies轻松获得的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();
希望这会对你有所帮助
答案 1 :(得分:2)
终于找到了解决方案。
用于上传表单的Html文件是
<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);
}
}
确保添加依赖
<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>
现在它可以正常工作。
答案 2 :(得分:0)
也可以添加此依赖性:
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>3.1.0</version>
</dependency>
答案 3 :(得分:-1)
Working awsome to me
--HTML--
<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);
}
}