要实现这个功能其实是有模板的:
创建一个Vue组件来处理Excel文件的上传和下载。可以使用vue-upload-component插件来简化上传过程。
在后端使用Apache POI库解析Excel文件并将其转换为Java对象。可以使用Spring Boot的@RestController注释来处理HTTP请求并返回JSON数据。
使用Spring Boot的JPA或MyBatis等ORM框架将Java对象保存到数据库中。
使用相同的方式将数据从数据库中读取并编写逻辑以将其转换回Excel格式。
这里是一个基于Vue和Java Spring Boot实现Excel导入导出的简单教程和代码示例:
前端代码
在Vue组件中,使用vue-upload-component插件来处理Excel文件上传。代码如下:
<template>
<div>
<input type="file" @change="handleFileUpload">
<button @click="exportExcel">导出Excel</button>
</div>
</template>
<script>
import axios from 'axios'
import * as FileSaver from "file-saver"
import * as XLSX from "xlsx"
import VueUploadComponent from 'vue-upload-component'
export default {
components: { VueUploadComponent },
data() {
return {
fileData: null
}
},
methods: {
handleFileUpload(file) {
this.fileData = file
const formData = new FormData()
formData.append('file', file)
axios.post('/api/upload', formData).then(response => {
console.log(response.data)
})
},
exportExcel() {
axios.get('/api/export').then(response => {
const blob = new Blob([response.data], { type: 'application/vnd.ms-excel' })
FileSaver.saveAs(blob, 'data.xlsx')
})
}
}
}
</script>
在后端使用Spring Boot和Apache POI库解析Excel文件并将其转换为Java对象。代码如下:
@RestController
@RequestMapping("/api")
public class ExcelController {
@PostMapping("/upload")
public ResponseEntity<?> uploadFile(@RequestParam("file") MultipartFile file) {
try {
InputStream in = new ByteArrayInputStream(file.getBytes());
XSSFWorkbook workbook = new XSSFWorkbook(in);
XSSFSheet sheet = workbook.getSheetAt(0);
List<Data> dataList = new ArrayList<>();
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
XSSFRow row = sheet.getRow(i);
Data data = new Data();
data.setName(row.getCell(0).getStringCellValue());
data.setValue((int)row.getCell(1).getNumericCellValue());
dataList.add(data);
}
// 保存到数据库
dataRepository.saveAll(dataList);
workbook.close();
return ResponseEntity.ok("上传成功");
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
}
@GetMapping("/export")
public ResponseEntity<?> exportFile() {
try {
List<Data> dataList = dataRepository.findAll();
ByteArrayOutputStream out = new ByteArrayOutputStream();
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Data");
int rowCount = 0;
XSSFRow headerRow = sheet.createRow(rowCount++);
headerRow.createCell(0).setCellValue("Name");
headerRow.createCell(1).setCellValue("Value");
for (Data data : dataList) {
XSSFRow row = sheet.createRow(rowCount++);
row.createCell(0).setCellValue(data.getName());
row.createCell(1).setCellValue(data.getValue());
}
workbook.write(out);
workbook.close();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDisposition(ContentDisposition.attachment().filename("data.xlsx").build());
return new ResponseEntity<>(out.toByteArray(), headers, HttpStatus.OK);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
}
}
这里的Data类是一个简单的Java对象,表示Excel文件中的数据项。可以根据实际情况进行修改。