【已解决】纯前端导入excel文件

16 篇文章 0 订阅
4 篇文章 0 订阅

1.组件内容



import "antd/es/upload/style";
import _Upload from "antd/es/upload";
import "antd/es/button/style";
import _Button from "antd/es/button";
import "antd/es/icon/style";
import _Icon from "antd/es/icon";
import _extends from "babel-runtime/helpers/extends";
import _classCallCheck from "babel-runtime/helpers/classCallCheck";
import _possibleConstructorReturn from "babel-runtime/helpers/possibleConstructorReturn";
import _inherits from "babel-runtime/helpers/inherits";
/* eslint-disable no-empty */
/* eslint-disable func-names */
/*

 */
import React, {Fragment} from "react";
import PropTypes from "prop-types";
import { set } from "lodash";

import { excel } from "sei-utils";
import LocaleReceiver from "../LocaleProvider/LocaleReceiver";
import zhCN from "./locales/zh-CN";

var ImportButton = function (_React$Component) {
  _inherits(ImportButton, _React$Component);

  function ImportButton() {
    var _temp, _this, _ret;

    _classCallCheck(this, ImportButton);

    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }

    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.handleImportExcel = function (_ref) {
      var file = _ref.file;

      // const { errMsg } = this.locale;
      var _this$props = _this.props,
          onChange = _this$props.onChange,
          multiSheet = _this$props.multiSheet;

      var fileReader = new FileReader();
      if (fileReader.readAsBinaryString === undefined) {
        // 解决ie11 大文件堆栈溢出的问题(for arrayBufferToString)
        FileReader.prototype.readAsBinaryString = function (fileData) {
          var binary = "";
          var pt = this;
          var reader = new FileReader();
          reader.onload = function () {
            var bytes = new Uint8Array(reader.result);
            var length = bytes.byteLength;
            for (var i = 0; i < length; i += 1) {
              binary += String.fromCharCode(bytes[i]);
            }
            pt.content = binary;
            // console.log("binary length:" + binary.length);
            // 页面内data取pt.content文件内容
            set(pt, "target.result", binary);
            pt.onload(pt);
          };
          reader.readAsArrayBuffer(fileData);
        };
      }
      fileReader.onload = function (event) {
        try {
          var result = event.target.result;

          if (onChange) {
            onChange(excel.import_excel_to_json(result, !multiSheet));
          }
        } catch (e) {
          // console.log(e)
        }
      };
      fileReader.readAsBinaryString(file);
    }, _this.getUploadProps = function () {
      return {
        beforeUpload: function beforeUpload() {
          return false;
        },
        showUploadList: false,
        onChange: _this.handleImportExcel
      };
    }, _this.handleClick = function (e) {
      var beforeImport = _this.props.beforeImport;

      if (beforeImport) {
        var result = beforeImport();
        if (!result) {
          e.stopPropagation();
        }
      }
    }, _this.renderCmp = function (contextLocale) {
      var _this$props2 = _this.props,
          btnType = _this$props2.btnType,
          iconType = _this$props2.iconType,
          customLocale = _this$props2.locale,
          label = _this$props2.label,
          disabled = _this$props2.disabled;

      var locale = _extends({}, contextLocale, customLocale);
      _this.locale = locale;

      return React.createElement(
        _Upload,
        _this.getUploadProps(),
        React.createElement(
          _Button,
          { disabled: disabled, type: btnType, onClick: _this.handleClick },
          React.createElement(_Icon, { type: iconType }),
          " ",
          label || locale.label
        )
      );
    }, _temp), _possibleConstructorReturn(_this, _ret);
  }

  ImportButton.prototype.render = function render() {
    return React.createElement(
      LocaleReceiver,
      { localeContext: "ImportButton", defaultLocale: zhCN },
      this.renderCmp
    );
  };

  return ImportButton;
}(React.Component);

ImportButton.propTypes = {
  /** 导入excel文件的回调事件 */
  onChange: PropTypes.func,
  /** icon 类型 */
  iconType: PropTypes.string,
  /** 按钮类型 */
  btnType: PropTypes.string,
  /** 按钮标签 */
  label: PropTypes.string,
  /** 导入前的钩子函数 */
  beforeImport: PropTypes.func,
  /** 多个excel工作区 */
  multiSheet: PropTypes.bool,
  /** 是否禁用 */
  disabled: PropTypes.bool
};
ImportButton.defaultProps = {
  onChange: null,
  iconType: "upload",
  btnType: "",
  label: "导入数据",
  beforeImport: null,
  multiSheet: false,
  disabled: false
};
export default ImportButton;




2如何引用

<ImportButton  onChange={(data) => console.log("这就是导入的文件list",data)} label={'导入excel'}/>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉林路扛把子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值