导入导出并将excel表格数据展示

在这里插入图片描述
npm install xlsx
npm install --save file-saver xlsx

<template>
  <div>
    <div class="inline-block">

      <el-upload
        class="upload-demo"
        action="https://jsonplaceholder.typicode.com/posts/"
        :on-change="handleChange"
        :file-list="fileList"
        list-type="picture"
        multiple
        show-file-list
        accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel"
      >
        <el-button slot="trigger" type="primary" icon="el-icon-upload">导入</el-button>
        <el-button type="primary" icon="el-icon-download" style="margin-left: 10px" @click="handleExport">导出</el-button>
      </el-upload>

    </div>

    <el-table id="tables" :data="tableData" border>
      <el-table-column prop="Project" label="姓名" />
      <el-table-column prop="ERS1" label="性别" />
      <el-table-column prop="CategoryRel" label="民族" />
      <el-table-column prop="CategoryRel2" label="身份证号" />
      <el-table-column prop="CategoryRel3" label="出生时间" />
      <el-table-column prop="CategoryRel4" label="电话" />
      <el-table-column label="操作" />
    </el-table>
  </div>
</template>
// 数据
<script>
import { excel } from '@/api/excel'
import xlsx from 'xlsx'
export default {
  data() {
    return {
      tableData: [],
      fileList: [],
      fileTemp: null, // 关键!!!!存放组件上传的excel file 用于实现读取数据
      outdata: []
    }
  },

  methods: {
    handleExport(event) {
      const loading = this.$loading({
        lock: true,
        text: '拼命加载中请稍等...',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
      })
      setTimeout(() => {
        this.$confirm('确定导出列表文件?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        })
          .then(() => {
            loading.close()
            excel('tables', '测试表格导出')
          })
          .catch(() => {
            loading.close()
          })
      }, 1000)
    },

    handleChange(file) {
      const _this = this

      const reader = new FileReader()
      // 提取excel中文件内容
      reader.readAsArrayBuffer(file.raw)
      reader.onload = function() {
        const buffer = reader.result
        const bytes = new Uint8Array(buffer)
        const length = bytes.byteLength
        let binary = ''
        for (let i = 0; i < length; i++) {
          binary += String.fromCharCode(bytes[i])
        }
        const XLSX = require('xlsx') // import xlsx from 'xlsx'

        // 转换二进制
        const wb = XLSX.read(binary, {
          type: 'binary'
        })
        _this.outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]])
        console.log(_this.outdata)
      }

      // 这里for循环将excel表格数据转化成json数据
      _this.outdata.forEach((i) => {
        const obj = {
          Project: i.姓名,
          ERS1: i.性别,
          CategoryRel: i.民族,
          CategoryRel2: i.身份证号,
          CategoryRel3: i.出生时间,
          CategoryRel4: i.电话
        }
        // 连接后台接口添加到后台数据库
        // _this
        //   .$http({
        //     method: "post",
        //     url: "/ERS/InsertERS",
        //     data: obj,
        //   })
        //   .then((response) => {
        //     if (response.data["header"]["code"] == 0) 
        //       _this.getData();

        //     } else {
        //       _this.$message.error(response.data["header"]["message"]);
        //     }
        //   })
        //   .catch((error) => {
        //     _this.$message.error(error.toString());
        //   });
        _this.tableData.push(obj)
        console.log(_this.tableData)
      })
    }
  }
}
</script>
<style>
.inline-block {
  display: inline-block;
  margin: 20px;
}
</style>


//二、导出需要的excel.js代码如下

// 引入依赖
import FileSaver from 'file-saver'
import * as XLSX from 'xlsx'

// id绑定的id,title表格名称
export const excel = (id, title) => {
  /* generate workbook object from table */
  //  判断要导出的节点中是否有fixed的表格,如果有,转换excel时先将该dom移除,然后append回去,
  const fix = document.querySelector('.el-table__fixed')
  let wb
  if (fix) {
    wb = XLSX.utils.table_to_book(
      document.querySelector('#' + id).removeChild(fix)
    )
    document.querySelector('#' + id).appendChild(fix)
  } else {
    wb = XLSX.utils.table_to_book(document.querySelector('#' + id))
  }

  // 网上wb = XLSX.utils.table_to_book(document.querySelector('#'+id));直接这样写,如果存在固定列,导出的excel表格会重复两遍

  /* get binary string as output */
  console.log(wb)
  const wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
  try {
    FileSaver.saveAs(
      new Blob([wbout], { type: 'application/octet-stream' }),
      title + '.xlsx'
    )
  } catch (e) {
    if (typeof console !== 'undefined') console.log(e, wbout)
  }
  return wbout
}

参考:https://blog.csdn.net/qq_39593196/article/details/126008880

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要实现Java中Excel批量导入导出所选表格数据,您可以使用以下步骤: 1. 首先,您需要使用Java中的Apache POI库来处理Excel文件。您可以在Maven项目中添加以下依赖项,以便在项目中使用POI: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> ``` 2. 接下来,您需要编写代码来读取和写入Excel文件。以下是读取Excel文件的示例代码: ``` FileInputStream fis = new FileInputStream(new File("path/to/excel/file.xlsx")); Workbook workbook = new XSSFWorkbook(fis); Sheet sheet = workbook.getSheetAt(0); Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); // 处理单元格数据 } } workbook.close(); fis.close(); ``` 3. 对于写入Excel文件,您可以使用以下示例代码: ``` FileOutputStream fos = new FileOutputStream(new File("path/to/excel/file.xlsx")); Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("Hello World!"); workbook.write(fos); workbook.close(); fos.close(); ``` 4. 最后,您需要添加逻辑来选择要读取或写入的Excel表格数据。您可以使用Java中的JFileChooser类来打开文件选择器窗口,以便用户选择要处理的Excel文件。然后,您可以使用POI库中的方法来处理所选表格数据。 希望这些步骤可以帮助您实现Java中Excel批量导入导出所选表格数据

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值