前端react使用XLSX导入导出excle

说明

1.react项目 要求前端将页面数据导出excle以及前端生成表格模板导出excle
2.使用js开发,vue同样可以使用

npm i xlsx

import * as XLSX from 'xlsx'

导出
 <Button type="primary" size="small"  onClick={outPutModel}>模板下载</Button>
  const outPutModel = ()=>{
 		const rainList = [
		[ '时间','站点1','站点2' ],
		[ '20240812','200',300]
		]
	    const worksheet = XLSX.utils.aoa_to_sheet(rainList);
       worksheet['!rows'] = worksheet['!rows'] || [];
       if (!worksheet['!rows'][1]) {
        worksheet['!rows'][1] = {};
       }
    //   worksheet['!rows'][1].hidden = true; // 隐藏第一行
       worksheet['!cols'] = [{width: 20}] // 第一列导出宽度
       const workbook = XLSX.utils.book_new();
       XLSX.utils.book_append_sheet(workbook, worksheet, "rain"); // sheet名
   //    XLSX.utils.book_append_sheet(workbook, worksheet2, "rain2"); // 放多个sheet页
       // 输出excle
       XLSX.writeFile(workbook, "历史降雨录入.xlsx"); // 文件名
}
导入  antd上传组件
const {  Upload } = antd;
const [uploadState, setUploadState] = useState(uploadProps);
<Upload {...uploadState}>
  <Button type="primary" size="small"  onClick={enterData}>导入</Button>
</Upload>

  const uploadProps = {
    name: 'file',
    action: '',
    headers: {
      authorization: 'authorization-text',
    },
    accept:'.xls,.xlsx',
    showUploadList:false,
    disabled:false,
    onChange(info) { },
    beforeUpload(file,fileList  ){  // 在上传前拦住拿到文件
        // 处理文件
      handleUpload(file)
      return false // 自己拿文件处理去了 停了上传功能
    }
  };
// 拿到文件后处理
  const handleUpload = (file) =>{
    const reader = new FileReader()
    reader.readAsArrayBuffer(file)
    reader.onload = (e) =>{
      const data = new Uint8Array(e.target.result)
      const workbook = XLSX.read(data, {type: 'array'})
      const rainsheet =   workbook.Sheets['rain']
    //  const rainsheet2 =   workbook.Sheets['rain2'] //sheet页2

      const rainData = XLSX.utils.sheet_to_json(rainsheet, {header: 1})
   //   const waterData = XLSX.utils.sheet_to_json(rainsheet2 , {header: 1})
    const newSheetNames = workbook.SheetNames.map(item => ({label: item,value: item}))
    后面就自己处理拿到的数据了
    }
  }

ps:做的时候遇到一个和这关系不大的问题 由于项目比较老 导致npm i xlsx的时候 antd版本跟着偷偷变了 页面样式就变了 后面单独uninstall antd ,换成以前的版本就好了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值