c#+vue之通過excel批量新增

1.添加相應的庫,可以去vue的官網查找

2.設置文件導入按鈕

 <a style="float: right;cursor: pointer;"
                           @@click="ExcelDataUpload = true">
                            <img src="excel.gif" /> Excel導入
                        </a>
                        <el-dialog title="導入" :visible.sync="ExcelDataUpload">
                            <el-upload class="upload-demo"
                                       action="@Url.Action("ExcelDataUpload")"
                                       accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
                                       :limit="1"
                                       :on-exceed="handleExceed"
                                       :on-success="handleSuccess">
                                <el-button type="primary" size="medium" slot="trigger" plain round>導入<i class="el-icon-upload el-icon--right"></i></el-button>
                                <label>   模板:</label>
                                <a href="導入模板.xlsx">導入模板.xlsx</a>
                            </el-upload>
                        </el-dialog>

圖標就是上圖,點開就會有預設的模板和選擇文件

3.前端方法

var form = new Vue({
            data() {
                return {
                    //關閉彈窗
                    authShowBox: false,
                    // Excel導入數據操作框
                    ExcelDataUpload: false,
                }
            },
            created() {

            },
            // 实例被挂载后调用
            mounted() {
            },
            beforeUpdate() {
            },
            // 方法
            methods: {
                //超過文件個數
                handleExceed() {
                    this.$message.warning("只能選擇一個文件");
                },
                //上傳完成
                handleSuccess(response, file, fileList) {
                    if (response.IsSucceed) {
                        this.$message({
                            showClose: true,
                            type: "success",
                            message: response.Message
                        });
                        setTimeout(function () { window.location.reload(); }, 1000);
                        //this.getTableData();
                    } else {
                        if (response.Result != null) {
                            this.$message({
                                showClose: true,
                                type: "error",
                                message: response.Message
                            });
                            this.fileList = [];
                            var url = 'fileName=' + response.Result;
                            window.open(url, '_parent',
                                'height=400,width=430, resizable=1,scrollbars=0,status=1,menubar=no,toolbar=no,location=no,menu=no,left=" + button.Style["left"] + " , top=" + button.Style["top"] + "',
                            );
                        } else {
                            this.$message({
                                showClose: true,
                                type: "error",
                                message: response.Message
                            });
                        }
                    }
                    this.$refs.upload.clearFiles();
                },
        }).$mount("#main");

4.後端方法

 /// <summary>
        /// 用戶數據導入
        /// </summary>
        /// <returns></returns>
        public ActionResult ExcelDataUpload()
        {
            DataResult result = new DataResult
            {
                IsSucceed = true,
                Result = "",
                Message = "",
                StatusCode = 0,
                Total = 0,
            };
            var userId = Session["UserID"]?.ToString();
            var msg = "";
            bool flag = true;
            //bool isSucceed = true;
            var file = Request.Files[Request.Files.Count - 1];
            var newPath = "";
            string fileName = Path.GetFileName(file.FileName.ToString());//获得到文件名
            string fileNameEx = Path.GetExtension(fileName);//获得文件扩展名
            Hashtable extTable = new Hashtable();
            extTable.Add("file", ".xls,.xlsx");
            if (!((string)extTable["file"]).Contains(fileNameEx))
            {
                //文件类型不正确
                DataResult res = new DataResult
                {
                    IsSucceed = false,
                    Result = "",
                    Message = "文件类型不正确",
                    StatusCode = 0,
                    Total = 0,
                };
                return Json(res);
            }
            string path = System.Web.HttpContext.Current.Server.MapPath("~/UploadFiles/");
            string uploadFileDirectory = path + DateTime.Now.ToString("yyyy-MM");
            if (!Directory.Exists(uploadFileDirectory)) Directory.CreateDirectory(uploadFileDirectory);
            var newName = DateTime.Now.ToString("ddHHmmssffff") + fileName;
            newPath = Path.Combine(uploadFileDirectory, newName);
            file.SaveAs(newPath);
            var str = ExcelToJson(newPath.Replace("\\", "/")).ToString();
            str = str.Replace("^", ",");
            // 取到文件中的數據
            List<aaa> whh = JsonConvert.DeserializeObject<List<sss>>("[" + str + "]");
            List<aaa> aaaList = new List<aaa>();
            List<bbb> bbbError = new List<bbb>();
            List<string> title = new List<string>();
            List<string> titlename = new List<string>();
            ErrorResult errorResult = new ErrorResult();
            Stream stream = file.InputStream;
            IWorkbook hSSWorkbook = WorkbookFactory.Create(stream);
            ISheet sheet = hSSWorkbook.GetSheetAt(0);
            IRow header = sheet.GetRow(sheet.FirstRowNum);

            try
            {
               
                foreach (var item in whh)
                {
                    //寫基本邏輯,然後對有錯誤的標記一個flag=false,並且將全部正確和錯誤加上錯誤的err信息的放進seatError裡面
                    //對於全部正確的才可以提交到數據庫
                    //判斷如果沒有錯就_db.SaveChanges();,如果有錯flag=flase,跳到SeatInfoImportError(seatError, fileName);並下載錯誤後的excel
                        if (err != "")
                        {
                            flag = false;
                        }
                    
                }
                if (flag)
                {
                    _db.SaveChanges();
                    result.Message = "添加成功";
                }
                else
                {
                    result.IsSucceed = false;
                    result.Result = ImportError(bbbError , fileName);
                    result.Message = "添加失敗,具體內容請看excel";
                }
            }
            catch (Exception ex)
            {
                result.Message = "系統內部異常" + ex;
                result.IsSucceed = false;
            }
            return Json(result);
        }
        /// <summary>
        /// 導入異常後操作
        /// </summary>
        /// <param name="SeatError"></param>
        /// <returns></returns>
        private string ImportError(List<bbbError> seat, string filename)
        {
            IWorkbook workbook = CreatPersonInfoExcel(seat);
            string file = "~/Download/";
            filename += "_" + DateTime.Now.ToString("MMddyyyy") + "_error.xlsx";
            string filePath = Server.MapPath(file + filename);
            using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
            {
                workbook.Write(fileStream);
            }
            return filename;
        }
        /// <summary>
        /// 創建座位文件數據流
        /// </summary>
        /// <param name="SeatError"></param>
        public IWorkbook CreatInfoExcel(List<bbbError > aaa)
        {
            string path = "~/Download/導入模板.xlsx";
            string filePath = Server.MapPath(path);
            FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
            byte[] bytes = new byte[fileStream.Length];
            fileStream.Read(bytes, 0, bytes.Length);
            fileStream.Close();
            Stream stream = new MemoryStream(bytes);
            IWorkbook workbook = WorkbookFactory.Create(stream);
            ISheet sheet = workbook.GetSheetAt(0);
            ICellStyle style2 = workbook.CreateCellStyle();
            style2 = GetColor(workbook, "Yellow");
            //內容
            for (int x = 0; x < aaa.Count; x++)
            {
                IRow row = sheet.CreateRow(x + 1);
                row.HeightInPoints = 25;
                for (int y = 0; y < aaa的一行有多少列; y++)
                {
                    //判斷是否存在列
                    ICell cell = row.GetCell(y);
                    if (cell == null)
                    {
                        cell = row.CreateCell(y);
                    }
                    switch (y)
                    {
                        case 0:
                            cell.SetCellValue(aaa[x].代碼aaa中名稱);
                            break;
                        case 1:
                            cell.SetCellValue(aaa[x].代碼aaa中名稱);
                            break;
                        case 2:
                            cell.SetCellValue(aaa[x].代碼aaa中名稱);
                            break;
///錯誤信息
                        case 3:
                            cell.SetCellValue(aaa[x].msg);
                            if (seat[x].msg != "")
                            {
                                cell.CellStyle = style2;
                            }
                            break;
                        default:
                            break;
                    }
                }
            }
            return workbook;
        }
        public ICellStyle GetColor(IWorkbook workbook, string ColorCode = "")
        {
            ICellStyle style = workbook.CreateCellStyle();
            style.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
            style.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
            style.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
            style.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
            if (ColorCode != "")
            {
                style.FillPattern = FillPattern.SolidForeground;
            }
            switch (ColorCode)
            {
                case "PaleBlue":
                    style.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.PaleBlue.Index;
                    break;
                case "Yellow":
                    style.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Yellow.Index;
                    break;
                default:
                    break;
            }
            return style;
        }
        //下載文件
        public void DownExcel(string fileName)
        {
            string path = "~/Download/" + fileName;
            string filePath = Server.MapPath(path);
            string type = fileName.Substring(fileName.LastIndexOf('.') + 1);
            if (type == "xlsx")
            {
                using (var sw = new FileStream(filePath, FileMode.Open))
                {
                    var bytes = new byte[sw.Length];
                    sw.Read(bytes, 0, bytes.Length);
                    sw.Close();
                    Response.Clear();
                    Response.ClearContent();
                    Response.ClearHeaders();
                    Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName));
                    Response.AddHeader("Content-Length", bytes.Length.ToString());
                    Response.AddHeader("Content-Transfer-Encoding", "binary");
                    Response.ContentType = "application/octet-stream;charset=UTF-8";
                    Response.BinaryWrite(bytes);
                    Response.Flush();
                    Response.End();
                }
                FileInfo finfo = new FileInfo(filePath);

                finfo.Delete();
            }
        }
        /// <summary>
        /// 使用ExcelReader组件来读取。
        /// </summary>
        public static DataSet ExcelReader(string filePath)
        {
            DataSet result = new DataSet();
            using (var stream = System.IO.File.Open(filePath, FileMode.Open, FileAccess.Read))
            {
                using (var reader = ExcelReaderFactory.CreateReader(stream))
                {
                    result = reader.AsDataSet();
                    reader.Dispose();
                }
                stream.Dispose();
            }
            return result;
        }
        /// <summary>
        /// 读取excel转json
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public object ExcelToJson(string filePath)
        {
            var str = "";
            DataTable dataTable = ExcelReader(filePath).Tables[0];
            var dt = dataTable.Copy();
            int columnCount = dt.Columns.Count;
            for (int i = 0; i < columnCount; i++)
            {
                int columnsname = i;
                dt.Columns[columnsname].ColumnName = dt.Rows[0][columnsname].ToString();
            }
            dt.Rows.Remove(dt.Rows[0]);
            foreach (DataRow dataRow in dt.Rows)
            {
                dynamic row = new JObject();
                foreach (DataColumn column in dt.Columns)
                {
                    string colName = "";
                    switch (column.ColumnName)
                    {
                        case "標題頭列1": colName = "代碼aaa中名稱"; break;
                        case "標題頭列2": colName = "代碼aaa中名稱"; break;
                        case "標題頭列3": colName = "代碼aaa中名稱"; break;
                        default: break;
                    }
                    row.Add(colName, dataRow[column.ColumnName].ToString());
                }
                str += row + "^";
            }
            return str.TrimEnd('^');
        }

如此就可以用excel導入文件批量新增並對文檔返回錯誤信息下載文檔

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值