zoukankan      html  css  js  c++  java
  • Excel批量导入商品,遇到导入失败记录到另一个Excel中供下载查看

      1 /// <summary>
      2         ///     EXCEL批量导入
      3         /// </summary>
      4         /// <param name="filePath">文件路径</param>
      5         /// <param name="shop">店铺</param>
      6         /// <returns></returns>
      7         public string BatchUploadProduct(string filePath, Web_Shop shop)
      8         {
      9             #region 创建一个用于记录错误的新Excel
     10 
     11             var workbook = new HSSFWorkbook();
     12             ISheet sheet0 = workbook.CreateSheet("sheet1");
     13             IRow rows = sheet0.CreateRow(0);
     14             rows.CreateCell(0).SetCellValue("分类ID");
     15             rows.CreateCell(1).SetCellValue("商品名称");
     16             rows.CreateCell(2).SetCellValue("售价");
     17             rows.CreateCell(3).SetCellValue("简单描述");
     18             rows.CreateCell(4).SetCellValue("重量");
     19             rows.CreateCell(5).SetCellValue("单位");
     20             rows.CreateCell(6).SetCellValue("现购库存");
     21             rows.CreateCell(7).SetCellValue("供应类型");
     22             rows.CreateCell(8).SetCellValue("收获时间");
     23             rows.CreateCell(9).SetCellValue("订购库存");
     24             rows.CreateCell(10).SetCellValue("错误消息");
     25 
     26             #endregion
     27 
     28             try
     29             {
     30                 using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
     31                 {
     32                     var book = new HSSFWorkbook(stream); //读出来用户上传的Excel
     33                     ISheet sheet = book.GetSheetAt(0); //拿到Excel中的第一个sheet
     34                     int rowCount = sheet.LastRowNum; //拿到sheet的行数
     35                     int errorCount = 0;
     36                     for (int i = sheet.FirstRowNum + 1; i < rowCount; i++)
     37                     {
     38                         IRow row = sheet.GetRow(i);
     39                         //row2.CreateCell(10).SetCellValue(row.GetCell(10).ToString());
     40 
     41                         #region 中间变量
     42 
     43                         string errMsg = string.Empty;
     44                         bool error = false;
     45                         int categoryId;
     46                         string proName;
     47                         decimal marketPrice;
     48                         string shortContent;
     49                         int weight;
     50                         string unit;
     51                         int storage; //现购库存
     52                         int canSupply; //可订购数量
     53                         int supplyType; //供应类型
     54                         DateTime harvestTime; //收获时间 
     55 
     56                         #endregion
     57 
     58                         var pro = new Web_Product();
     59 
     60                         #region 检测数据合法性
     61 
     62                         if (!int.TryParse(row.GetCell(0).ToString(), out categoryId))
     63                         {
     64                             errMsg = "商品类型错误";
     65                             error = true;
     66                         }
     67                         proName = row.GetCell(1).ToString();
     68                         if (string.IsNullOrEmpty(proName))
     69                         {
     70                             errMsg = errMsg + ",商品名称不能为空";
     71                             error = true;
     72                         }
     73 
     74                         if (!decimal.TryParse(row.GetCell(2).ToString(), out marketPrice))
     75                         {
     76                             errMsg = errMsg + ",商品价格错误";
     77                             error = true;
     78                         }
     79                         shortContent = row.GetCell(3).ToString();
     80                         if (string.IsNullOrEmpty(shortContent))
     81                         {
     82                             errMsg = errMsg + ",商品描述不能为空";
     83                             error = true;
     84                         }
     85                         if (!int.TryParse(row.GetCell(4).ToString(), out weight))
     86                         {
     87                             errMsg = errMsg + ",商品重量错误";
     88                             error = true;
     89                         }
     90                         unit = row.GetCell(5).ToString();
     91                         if (string.IsNullOrEmpty(unit))
     92                         {
     93                             errMsg = errMsg + ",商品单位错误";
     94                             error = true;
     95                         }
     96 
     97                         if (!int.TryParse(row.GetCell(6).ToString(), out storage))
     98                         {
     99                             errMsg = errMsg + ",商品现购库存错误";
    100                             error = true;
    101                         }
    102                         if (!int.TryParse(row.GetCell(7).ToString(), out supplyType))
    103                         {
    104                             errMsg = errMsg + ",商品供应类型错误";
    105                             error = true;
    106                         }
    107                         if (!DateTime.TryParse(row.GetCell(8).DateCellValue.ToString("yyyy-MM-dd"), out harvestTime))
    108                         {
    109                             errMsg = errMsg + ",商品收获时间错误";
    110                             error = true;
    111                         }
    112                         if (!int.TryParse(row.GetCell(9).ToString(), out canSupply))
    113                         {
    114                             errMsg = errMsg + ",商品订购库存错误";
    115                             error = true;
    116                         }
    117 
    118                         #endregion
    119 
    120                         #region 如果有错误,就把这一行给添加到新的Excel中
    121 
    122                         if (error)
    123                         {
    124                             IRow row2 = sheet0.CreateRow(sheet0.LastRowNum + 1);
    125                             row2.CreateCell(0).SetCellValue(row.GetCell(0).ToString());
    126                             row2.CreateCell(1).SetCellValue(row.GetCell(1).ToString());
    127                             row2.CreateCell(2).SetCellValue(row.GetCell(2).ToString());
    128                             row2.CreateCell(3).SetCellValue(row.GetCell(3).ToString());
    129                             row2.CreateCell(4).SetCellValue(row.GetCell(4).ToString());
    130                             row2.CreateCell(5).SetCellValue(row.GetCell(5).ToString());
    131                             row2.CreateCell(6).SetCellValue(row.GetCell(6).ToString());
    132                             row2.CreateCell(7).SetCellValue(row.GetCell(7).ToString());
    133                             row2.CreateCell(8).SetCellValue(row.GetCell(8).ToString());
    134                             row2.CreateCell(9).SetCellValue(row.GetCell(9).ToString());
    135                             row2.CreateCell(10).SetCellValue(errMsg);
    136                             errorCount += 1;
    137                         }
    138 
    139                         #endregion
    140 
    141                         #region 如果没有错误,把产品添加到数据库
    142 
    143                         if (!error)
    144                         {
    145                             pro.Name = proName.TagReplace();
    146                             pro.MarketPrice = marketPrice;
    147                             pro.ShortContent = shortContent.TagReplace();
    148                             pro.Weight = weight;
    149                             pro.Unit = unit.TagReplace();
    150                             pro.Storage = storage;
    151                             pro.CanSupply = canSupply;
    152                             pro.CategoryID = categoryId;
    153                             pro.IsValidate = 0; //默认这个产品是没有经过验证的,不让它上架
    154                             if (supplyType != 100) //只要不等于100,默认都给200
    155                             {
    156                                 supplyType = 200;
    157                             }
    158                             pro.SupplyType = supplyType;
    159                             pro.ShopID = shop.ID;
    160                             pro.HarvestTime = harvestTime;
    161                             AddProduct(pro);
    162                         }
    163 
    164                         #endregion
    165                     }
    166                     string savePath = VirtualPaths.ErrorExcelSavePath + "/" + GetProductrNumberByDate() + ".xls";
    167                         //生成错误Excel的文件
    168                     if (errorCount > 0) //如果总的错误个数大于0,就吧错误的Excel写到文件中,否则不写。
    169                     {
    170                         using (var fs = new FileStream(savePath, FileMode.Create))
    171                         {
    172                             workbook.Write(fs); //保存
    173                         }
    174                         return savePath; //返回路径供下载
    175                     }
    176                     return "ok"; //表示上传成功,没有错误
    177                 }
    178             }
    179             catch
    180             {
    181                 return "上传失败,请重试"; //遇到的未知的错误
    182             }
    183         }
    DAL层
  • 相关阅读:
    HDU1548图论Dijkstra
    LINUX下sql常用命令
    Oracle DBLINK 简单使用
    自己常用百度搜索指令
    Element获取table中选中的行
    【Java】SpringBoot不扫描某个包
    Oracle创建Database link方法
    Oracle数据库中快照的使用
    spring.profiles.active和spring.profiles.include的使用与区别
    Spring Cloud Config 实现配置中心,看这一篇就够了
  • 原文地址:https://www.cnblogs.com/baiyunchen/p/4040443.html
Copyright © 2011-2022 走看看