excel的导入导出 基于vue和javaspringboot

 2023-03-27 21:11:32  阅读 0

要实现这个功能其实是有模板的:

创建一个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>
  1. 后端代码

在后端使用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文件中的数据项。可以根据实际情况进行修改。

标签:

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码