vue中excel的导入和导出

1、导入

1.1 导入maven依赖
<dependency>
   <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.8</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.8</version>
</dependency>
1.2 sevice层、数据处理
public Boolean upLoadPowerData(MultipartFile multipartFile) {
        File file = null;
        InputStream inputStream = null;
        HSSFWorkbook workbook = null;
        HSSFSheet sheet = null;
        int sheetRowCount = 0;
        String sheetName = null;
        try {
            file = ExcelUtils.fileTransformation(multipartFile);
            if (file == null) {
                return false;
            }
            inputStream = new FileInputStream(file.getAbsolutePath());
            workbook = new HSSFWorkbook(inputStream);

            for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
               // 对于sheet中的数据处理
                // 获取当前sheet
                sheet = workbook.getSheetAt(i);
                // 获取sheet总行数
                sheetRowCount = sheet.getPhysicalNumberOfRows();
                // 获取sheet名称
                sheetName = sheet.getSheetName();
                // 获取当前sheet第一行、第一列数据
                sheet.getRow(0).getCell(0);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
1.3 service中使用到的工具类
public class ExcelUtils {
	//文件转换MultipartFile ->File
    public static File fileTransformation(MultipartFile file) throws IOException {
        File toFile = null;
        if (file.equals("") || file.getSize() <= 0) {
            file = null;
        } else {
            InputStream ins = null;
            ins = file.getInputStream();
            toFile = new File(file.getOriginalFilename());
            inputStreamToFile(ins, toFile);
            ins.close();
            return toFile;
        }
        return toFile;
    }

    public static void inputStreamToFile(InputStream ins, File file) {
        try {
            OutputStream os = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            ins.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
1.4 controller层
@ApiOperation("上传excel数据文件")
@PostMapping("/upload")
public R uploadExcel(@RequestParam MultipartFile file) throws IOException {
    return new R<>(demoService.upLoadPowerData(file));
}
1.5 前端页面

使用了element-ui的上传组件,详细配置可以去看下element-ui的文档

<el-upload
 class="upload-demo uploadData"
  style="text-align: right;margin-left: 10px"
  action="https://jsonplaceholder.typicode.com/posts/"
  accept=".xls,.xlsx"
  :before-upload="importExcel"
  :limit="1">
  <el-button slot="trigger" ref="file" size="small" class="addBtn"
             style="background-color: #f9a038;color:white;">数据导入
  </el-button>
</el-upload>
1.6 js请求

axios请求封装

import request from '@/router/axios'
// 导入excel
export function uploadExcel(data) {
  return request({
    url: '/demo/upload',
    method: 'post',
    data: data
  })
}

js导入方法

importExcel(file) {
 this.loading = true;
  const data = new FormData();
  data.append('file', file);
  uploadExcel(data).then(res => {
    if (res.data.data) {
      this.$message({
        message: "导入成功!",
        type: "success"
      });
    } else {
      this.$message({
        message: "导入失败,请校验数据!",
        type: "warning"
      });
    }
    this.loading = false;
  })
}

2、导出

2.1 controller层
@ApiOperation("下载excel数据文件")
@GetMapping("/download/{demoId}")
public void downLoadExcel(@PathVariable Integer demoId, HttpServletResponse response) throws IOException {
	// 获取workbook对象
   HSSFWorkbook workbook = demoService.downLoadPowerData(demoId, year);

   response.setCharacterEncoding("utf-8");
   response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("demo.xls", "UTF-8"));
   response.setContentType("application/vnd.ms-excel;charset=UTF-8");
   workbook.write(response.getOutputStream());
}
2.2 js请求

封装axios请求

import request from '@/router/axios'
// 下载excel
export function downLoadExcel(demoId) {
  return request({
    url: '/demo/download/' + demoId ,
    method: 'get',
    responseType: 'blob'
  })
}

js方法处理

exportExcel() {
 this.loading = true;
  downLoadExcel(parseInt(this.demoId)).then(response => {
    const link = document.createElement('a');
    let blob = new Blob([response.data], {type: 'application/vnd.ms-excel;charset=UTF-8'});
    link.style.display = 'none';
    link.href = URL.createObjectURL(blob);
    link.download = "demo.xls";
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    this.loading = false;
  });
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue可以利用第三方库来实现Excel导入导出,下面是一个简单的示例: 首先,安装`xlsx`和`file-saver`这两个库: ``` npm install xlsx file-saver --save ``` 然后在Vue组件,定义一个方法来实现Excel导出: ```javascript import XLSX from 'xlsx'; import FileSaver from 'file-saver'; export default { methods: { exportExcel() { // 构建Excel数据 const data = [ ['姓名', '年龄', '性别'], ['张三', 18, '男'], ['李四', 20, '女'], ['王五', 22, '男'], ]; // 创建一个Workbook对象 const workbook = XLSX.utils.book_new(); // 创建一个Worksheet对象 const sheet = XLSX.utils.aoa_to_sheet(data); // 添加Worksheet到Workbook XLSX.utils.book_append_sheet(workbook, sheet, 'Sheet1'); // 生成Excel文件 const excelFile = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); // 保存Excel文件 const fileName = 'data.xlsx'; const blob = new Blob([excelFile], { type: 'application/octet-stream' }); FileSaver.saveAs(blob, fileName); }, }, }; ``` 以上代码,我们使用`XLSX`库创建一个Workbook对象,并添加一个Worksheet对象。然后使用`FileSaver`库保存Excel文件。 接下来,我们来实现Excel导入功能。在Vue组件,定义一个方法来实现Excel导入: ```javascript import XLSX from 'xlsx'; export default { data() { return { tableData: [], }; }, methods: { importExcel(event) { // 获取上传的文件 const file = event.target.files[0]; // 创建一个FileReader对象 const reader = new FileReader(); // 读取Excel文件 reader.onload = (e) => { // 获取Excel文件数据 const data = new Uint8Array(e.target.result); const workbook = XLSX.read(data, { type: 'array' }); // 获取第一个Worksheet const sheet = workbook.Sheets[workbook.SheetNames[0]]; // 将Worksheet转换为JSON数据 const json = XLSX.utils.sheet_to_json(sheet, { header: 1 }); // 将JSON数据转换为表格数据 const tableData = []; for (let i = 1; i < json.length; i++) { const row = {}; for (let j = 0; j < json[0].length; j++) { row[json[0][j]] = json[i][j]; } tableData.push(row); } this.tableData = tableData; }; // 读取文件数据 reader.readAsArrayBuffer(file); }, }, }; ``` 以上代码,我们使用`XLSX`库读取Excel文件,并将Worksheet转换为JSON数据。然后将JSON数据转换为表格数据,最终存储在Vue组件的`tableData`变量

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值