ADD file via upload

main
p26ct9nwj 4 months ago
parent ccea324950
commit 2ebc22ca8d

@ -0,0 +1,113 @@
package com.example.classroomattendance.controller;
import com.example.classroomattendance.model.Student;
import com.example.classroomattendance.service.StudentService;
import org.apache.poi.ss.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
@Controller
public class FileUploadController {
@Autowired
private StudentService studentService;
@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file, Model model) {
if (file.isEmpty()) {
model.addAttribute("message", "文件为空");
return "index";
}
try {
List<Student> students = parseExcel(file);
studentService.addStudents(students);
model.addAttribute("message", "文件接收成功");
model.addAttribute("students", students);
model.addAttribute("uploadSuccess", true); // 添加标志以显示下一步按钮
return "index"; // 返回 index 视图
} catch (IOException ex) {
ex.printStackTrace();
model.addAttribute("message", "文件处理失败: " + ex.getMessage());
return "index";
} catch (Exception ex) {
ex.printStackTrace();
model.addAttribute("message", "未知错误: " + ex.getMessage());
return "index";
}
}
private List<Student> parseExcel(MultipartFile file) throws IOException {
List<Student> students = new ArrayList<>();
Workbook workbook = WorkbookFactory.create(file.getInputStream());
Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
if (row.getRowNum() == 0) {
continue; // 跳过标题行
}
Cell nameCell = row.getCell(0);
Cell studentIdCell = row.getCell(1);
Cell pointsCell = row.getCell(2);
if (nameCell == null || studentIdCell == null) {
continue; // 跳过不完整的记录
}
Student student = new Student();
student.setId((long) row.getRowNum()); // 使用行号作为 ID 示例
student.setName(getCellStringValue(nameCell));
student.setStudentId(getCellStringValue(studentIdCell));
student.setPoints(getCellDoubleValue(pointsCell));
students.add(student);
}
workbook.close();
return students;
}
private String getCellStringValue(Cell cell) {
if (cell == null) {
return "";
}
switch (cell.getCellType()) {
case STRING:
return cell.getStringCellValue();
case NUMERIC:
// 对于学号这种需要转换为字符串的情况,使用 DecimalFormat 保证不使用科学计数法
DecimalFormat df = new DecimalFormat("0");
return df.format(cell.getNumericCellValue());
default:
return cell.toString();
}
}
private double getCellDoubleValue(Cell cell) {
if (cell == null) {
return 0.0;
}
switch (cell.getCellType()) {
case NUMERIC:
return cell.getNumericCellValue();
case STRING:
try {
return Double.parseDouble(cell.getStringCellValue());
} catch (NumberFormatException e) {
return 0.0;
}
default:
return 0.0;
}
}
}
Loading…
Cancel
Save