c#Excel文档导入导出对象

c#Excel文档导入导出对象

一、页面代码

<template>
<!--导入导出按钮-->
<div slot="header" class="clearfix">
            <span>故障详情</span>
            <el-button
              icon="el-icon-upload2"
              style="float: right;"
              size="mini"
              @click="outInfo()"
            >导出</el-button>
            <el-button
              icon="el-icon-download"
              type="success"
              style="float: right;margin-right:10px"
              size="mini"
              @click="inInfo()"
            >导入</el-button>
          </div>
          
<!--导入文件-->
    <el-dialog
      title="导入文件"
      :visible.sync="dialogUpload"
      width="30%"
      center
      :closeOnClickModal="false"
      :show-close="false"
    >
      <el-row :gutter="20">
        <el-col :span="20">
          <el-form :model="uploadform" label-width="60px" ref="uploadformRef">
            <el-form-item>
              <!-- 导入文件方式 -->
              <el-upload
                drag
                :limit="limitNum"
                :auto-upload="false"
                accept=".xlsx"
                :action="UploadUrl()"
                :before-upload="beforeUploadFile"
                :on-change="fileChange"
                :on-exceed="exceedFile"
                :on-success="handleSuccess"
                :on-error="handleError"
                :file-list="fileList"
              >
                <i class="el-icon-upload"></i>
                <div class="el-upload__text">
                  将文件拖到此处,或
                  <em>点击上传</em>
                </div>
                <div class="el-upload__tip" slot="tip">只能上传xlsx文件,且不超过10M</div>
              </el-upload>
            </el-form-item>
          </el-form>
        </el-col>
      </el-row>
      <div slot="footer" class="dialog-footer">
        <el-button size="small" type="primary" @click="uploadFile">立即上传</el-button>
        <el-button size="small" @click="dialogUpload=false">取消</el-button>
      </div>
    </el-dialog>
</template>


<script>

// 引入导出Excel表格依赖
import FileSaver from "file-saver";
import XLSX from "xlsx";

export default {
  name: "errorManage",
  data() {
    return {
      limitNum: 1, // 上传excell时,同时允许上传的最大数
      fileList: [], // excel文件列表
      showCondition: true, //手风琴

      newform: {},
      editform: {},
      uploadform: {},
      dialogUpload: false,
    };
  },

  methods: {

    //导出
    outInfo() {
      /* 从表生成工作簿对象 */
      var wb = XLSX.utils.table_to_book(document.querySelector("#out-table"));
      /* 获取二进制字符串作为输出 */
      var wbout = XLSX.write(wb, {
        bookType: "xlsx",
        bookSST: true,
        type: "array"
      });
      try {
        FileSaver.saveAs(
          //Blob 对象表示一个不可变、原始数据的类文件对象。
          //Blob 表示的不一定是JavaScript原生格式的数据。
          //File 接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。
          //返回一个新创建的 Blob 对象,其内容由参数中给定的数组串联组成。
          new Blob([wbout], { type: "application/octet-stream" }),
          //设置导出文件名称
          "故障配置列表.xlsx"
        );
      } catch (e) {
        if (typeof console !== "undefined") console.log(e, wbout);
      }
      return wbout;
    },
    //导入
    inInfo() {
      this.dialogUpload = true;
    },

    //以下文档为上传文档部分
    // 文件超出个数限制时的钩子
    exceedFile(files, fileList) {
      this.$message.warning(
        `只能选择 ${this.limitNum} 个文件,当前共选择了 ${files.length +
          fileList.length} 个`
      );
    },
    // 文件状态改变时的钩子
    fileChange(file, fileList) {
      // console.log(file.raw);
      this.fileList.splice(0);
      this.fileList.push(file.raw);
      // console.log(this.fileList);
    },
    // 上传文件之前的钩子, 参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传
    beforeUploadFile(file) {
      let extension = file.name.substring(file.name.lastIndexOf(".") + 1);
      let size = file.size / 1024 / 1024;
      if (extension !== "xlsx") {
        this.$message.warning("只能上传后缀是.xlsx的文件");
      }
      if (size > 10) {
        this.$message.warning("文件大小不得超过10M");
      }
    },
    // 文件上传成功时的钩子
    handleSuccess(res, file, fileList) {
      this.$message.success("文件上传成功");
    },
    // 文件上传失败时的钩子
    handleError(err, file, fileList) {
      this.$message.error("文件上传失败");
    },
    UploadUrl: function() {
      // 因为action参数是必填项,我们使用二次确认进行文件上传时,直接填上传文件的url会因为没有参数导致api报404,所以这里将action设置为一个返回为空的方法就行,避免抛错
      return "";
    },
    uploadFile() {
      if (this.fileList.length === 0) {
        this.$message.warning("请上传文件");
      } else {
        this.dialogUpload = false;
        let form = new FormData();
        // form.append("file", this.fileList);

        this.fileList.map(element => {
          form.append("file", element);
        });
        errorManage.uploadErrorManage(form).then(val => {
          if (val.status == 0) {
            this.$message({
              type: "success",
              message: "上传成功"
            });
            this.getErrorList();
          } else return false;
        });
      }
    }
  }
};
</script>

二、后端Controller代码

 //UploadErrorManage 上传Excel文档 解析
[HttpPost, Route("UploadErrorManage")]
public async Task<BoardMessage> UploadErrorManage([FromForm] IFormCollection file){
    FormFileCollection fileCollection = (FormFileCollection)((FormCollection)file).Files;
    //文件已经保存在本地  读文件到数据库中
    var file0 = (IFormFile)fileCollection[0];
    if (!CommonUser.GetAccountInfo(Request, out var tempVul, out var errCode)){
        return _reMsg.SendMessage(tempVul, "UploadErrorManage", "上传故障配置Excel", errCode,"TokenId is err!", null).Result;
        }
    BoardMessage message;
    int menid = tempVul.MenId;
    try
    {
     DataTable dt= ZgWeb.Common.ExcelToDatatable.ExcelToTable(file0);
    List<T_30009_ErrorManage> lm = new List<T_30009_ErrorManage>();
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        string level = dt.Rows[i]["errorLevel"].ToString();
        var mAdd = new T_30009_ErrorManage()
        {
            errorID = Convert.ToInt32(dt.Rows[i]["errorID"]),
            errorName = dt.Rows[i]["errorName"].ToString(),
            errorLevel = Convert.ToInt32(level.Contains("一")?"1": level.Contains("二")?"2":"3"),
            AddDate = DateTime.Now,
            AddMenId = menid,
            EditDate = DateTime.Now,
            EditMenId = menid,
            IsDel = false
        };
        lm.Add(mAdd);
    }
    if (_client.GetGrain<IErrorManage>(Guid.NewGuid()).uploadErrorManage(lm, menid).Result)
        {
            message = _reMsg.SendMessage(
             tempVul, "UploadErrorManage", "上传故障配置Excel",
             (int)SysErrorCode.Success, null, "").Result;
        }
        else
        {
            message = _reMsg.SendMessage(
            tempVul, "UploadErrorManage", "上传故障配置Excel",
            (int)SysErrorCode.Success, null, null).Result;
        }
    }
    catch (Exception ex)
    {
        message = await _reMsg.SendMessage(tempVul, "UploadErrorManage", "上传故障配置Excel",
          (int)SysErrorCode.Exception, ex.Message, null);
    }
    return message;

        }
    }
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读