/// <summary>
/// EXCEL批量导入
/// </summary>
/// <param name="filePath">文件路径</param>
/// <param name="shop">店铺</param>
/// <returns></returns>
public string BatchUploadProduct(string filePath, Web_Shop shop)
{
#region 创建一个用于记录错误的新Excel var workbook = new HSSFWorkbook();
ISheet sheet0 = workbook.CreateSheet("sheet1");
IRow rows = sheet0.CreateRow();
rows.CreateCell().SetCellValue("分类ID");
rows.CreateCell().SetCellValue("商品名称");
rows.CreateCell().SetCellValue("售价");
rows.CreateCell().SetCellValue("简单描述");
rows.CreateCell().SetCellValue("重量");
rows.CreateCell().SetCellValue("单位");
rows.CreateCell().SetCellValue("现购库存");
rows.CreateCell().SetCellValue("供应类型");
rows.CreateCell().SetCellValue("收获时间");
rows.CreateCell().SetCellValue("订购库存");
rows.CreateCell().SetCellValue("错误消息"); #endregion try
{
using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
var book = new HSSFWorkbook(stream); //读出来用户上传的Excel
ISheet sheet = book.GetSheetAt(); //拿到Excel中的第一个sheet
int rowCount = sheet.LastRowNum; //拿到sheet的行数
int errorCount = ;
for (int i = sheet.FirstRowNum + ; i < rowCount; i++)
{
IRow row = sheet.GetRow(i);
//row2.CreateCell(10).SetCellValue(row.GetCell(10).ToString()); #region 中间变量 string errMsg = string.Empty;
bool error = false;
int categoryId;
string proName;
decimal marketPrice;
string shortContent;
int weight;
string unit;
int storage; //现购库存
int canSupply; //可订购数量
int supplyType; //供应类型
DateTime harvestTime; //收获时间 #endregion var pro = new Web_Product(); #region 检测数据合法性 if (!int.TryParse(row.GetCell().ToString(), out categoryId))
{
errMsg = "商品类型错误";
error = true;
}
proName = row.GetCell().ToString();
if (string.IsNullOrEmpty(proName))
{
errMsg = errMsg + ",商品名称不能为空";
error = true;
} if (!decimal.TryParse(row.GetCell().ToString(), out marketPrice))
{
errMsg = errMsg + ",商品价格错误";
error = true;
}
shortContent = row.GetCell().ToString();
if (string.IsNullOrEmpty(shortContent))
{
errMsg = errMsg + ",商品描述不能为空";
error = true;
}
if (!int.TryParse(row.GetCell().ToString(), out weight))
{
errMsg = errMsg + ",商品重量错误";
error = true;
}
unit = row.GetCell().ToString();
if (string.IsNullOrEmpty(unit))
{
errMsg = errMsg + ",商品单位错误";
error = true;
} if (!int.TryParse(row.GetCell().ToString(), out storage))
{
errMsg = errMsg + ",商品现购库存错误";
error = true;
}
if (!int.TryParse(row.GetCell().ToString(), out supplyType))
{
errMsg = errMsg + ",商品供应类型错误";
error = true;
}
if (!DateTime.TryParse(row.GetCell().DateCellValue.ToString("yyyy-MM-dd"), out harvestTime))
{
errMsg = errMsg + ",商品收获时间错误";
error = true;
}
if (!int.TryParse(row.GetCell().ToString(), out canSupply))
{
errMsg = errMsg + ",商品订购库存错误";
error = true;
} #endregion #region 如果有错误,就把这一行给添加到新的Excel中 if (error)
{
IRow row2 = sheet0.CreateRow(sheet0.LastRowNum + );
row2.CreateCell().SetCellValue(row.GetCell().ToString());
row2.CreateCell().SetCellValue(row.GetCell().ToString());
row2.CreateCell().SetCellValue(row.GetCell().ToString());
row2.CreateCell().SetCellValue(row.GetCell().ToString());
row2.CreateCell().SetCellValue(row.GetCell().ToString());
row2.CreateCell().SetCellValue(row.GetCell().ToString());
row2.CreateCell().SetCellValue(row.GetCell().ToString());
row2.CreateCell().SetCellValue(row.GetCell().ToString());
row2.CreateCell().SetCellValue(row.GetCell().ToString());
row2.CreateCell().SetCellValue(row.GetCell().ToString());
row2.CreateCell().SetCellValue(errMsg);
errorCount += ;
} #endregion #region 如果没有错误,把产品添加到数据库 if (!error)
{
pro.Name = proName.TagReplace();
pro.MarketPrice = marketPrice;
pro.ShortContent = shortContent.TagReplace();
pro.Weight = weight;
pro.Unit = unit.TagReplace();
pro.Storage = storage;
pro.CanSupply = canSupply;
pro.CategoryID = categoryId;
pro.IsValidate = ; //默认这个产品是没有经过验证的,不让它上架
if (supplyType != ) //只要不等于100,默认都给200
{
supplyType = ;
}
pro.SupplyType = supplyType;
pro.ShopID = shop.ID;
pro.HarvestTime = harvestTime;
AddProduct(pro);
} #endregion
}
string savePath = VirtualPaths.ErrorExcelSavePath + "/" + GetProductrNumberByDate() + ".xls";
//生成错误Excel的文件
if (errorCount > ) //如果总的错误个数大于0,就吧错误的Excel写到文件中,否则不写。
{
using (var fs = new FileStream(savePath, FileMode.Create))
{
workbook.Write(fs); //保存
}
return savePath; //返回路径供下载
}
return "ok"; //表示上传成功,没有错误
}
}
catch
{
return "上传失败,请重试"; //遇到的未知的错误
}
}

DAL层

Excel批量导入商品,遇到导入失败记录到另一个Excel中供下载查看的更多相关文章

  1. jxl将list导入到Excel中供下载

    jxl操作excel /** * 分隔符 */ private final static String SEPARATOR = "|"; /** * 由List导出至指定的Shee ...

  2. 你需要一个新的model实体的时候必须new一个.奇怪的问题: 使用poi解析Excel的把数据插入数据库同时把数据放在一个list中,返回到页面展示,结果页面把最后一条数据显示了N次

    数据库显示数据正常被插 插入一条打印一次数据,也是正常的,但是执行完,list就全部变成了最后一条数据.很奇怪 单步调试 给list插入第一条数据 model是6607 连续插了多条数据都是6607 ...

  3. SQL 将一个表中的所有记录插入到一个临时表中

    insert into #tempTable select * from TempTable WHERE + 查询条件

  4. 订餐系统之Excel批量导入

    批量导入现在基本已经成为各类系统的标配了,当前,我们订餐系统也不例外,什么商家呀.商品呀.优惠码之类的,都少不了.毕竟嘛,对非开发人员来说,看到Excel肯定比看到很多管理系统还是要亲切很多的.这里, ...

  5. Excel批量导入(导出同理)

    在做JavaWeb中添加数据使我们在所难免会遇到的,在大数据的环境下批量添加和批量删除是必须的,而批量删除只需要获取到我们需要删除的ID就可以了,在批量添加中我们就会遇到问题,问题是得到批量的数据,这 ...

  6. 增值税发票税控开票软件助手Excel、ERP、SAP导入开票接口进行批量开票操作手册

    写这遍文章的目的是方便以后个人使用,做个笔记记录. 首先我来说一下它是做什么用的,它的主要作用是把用户的开票数据,Excel数据.ERP 系统.SAP导入到增值税发票税控开票软件中,可用航信盘.百旺盘 ...

  7. JAVA实现Excel批量导入

    一.模板下载: 先将模板放在项目WebRoot下的download文件夹下: /** * @Title: downloadFile * @Description: 模板下载 (网络地址) * @par ...

  8. zabbix3.4用Python脚本Excel批量导入主机

    1.安装xlrd读取Excel文件 1.1. 下载setuptools-38.2.4.zip,上传至zabbix服务器解压安装,下载地址:https://pypi.python.org/package ...

  9. java使用POI实现Excel批量导入数据

    1.准备工作 1.1 创建模板表头与数据库表字段一一对应,示例如下 1.2将模板放入项目中,如下图所示: 2.前端页面 2.1 使用超链接提供模板下载地址 <html lang="zh ...

随机推荐

  1. BZOJ2763: [JLOI2011]飞行路线(分层图 最短路)

    题意 题目链接 Sol 分层图+最短路 建\(k+1\)层图,对于边\((u, v, w)\),首先在本层内连边权为\(w\)的无向边,再各向下一层对应的节点连边权为\(0\)的有向边 如果是取最大最 ...

  2. javaScript删除对象、数组中的null、undefined、空对象、空数组方法

    这两天在项目中遇到后台需要传的数据为不能有null,不能有空值,而这个数据又是一个庞大的对象,对组集合,所以写了个方法来解决这个问题.为了兼具所有的种类类型,封装了方法,代码如下: let obj = ...

  3. git 命令收藏

    git init # 初始化本地git仓库(创建新仓库)   git config --global user.name "xxx" # 配置用户名   git config -- ...

  4. Android JazzyViewPager

    JazzyViewPager: package com.itau.jingdong.widgets.jazzviewpager; import java.util.HashMap; import ja ...

  5. WebService性能测试

    什么是WebService?(本文也会在最下面通俗的介绍) 这里给一个站内大哥的讲解:http://www.cnblogs.com/Leo_wl/archive/2010/05/20/1740205. ...

  6. C#获取apk版本信息

    获取很多人都会问我为什么要写这个博客,原因很简单,这次研发apk版本信息的时候网上查了很多的资料都没有这方面的信息,因此这次功能完了想写下方法,如果以后博友们遇到了可以直接copy,不用花很多的时间, ...

  7. beifencode

    package com.hesheng.myapplication; import android.content.Context;import android.graphics.Bitmap;imp ...

  8. nginx https 连接加密

    ##HTTPS server##server {listen 443;server_name www.shabi.com;ssl on;index index.php index.html index ...

  9. Less的guards and argument matching

    less guards/argument matching: .setbackground(@number) when (@number>0){ .setbackground( @number ...

  10. 属性锁TimeLock

    属性锁TimeLock 这是本人所写的几个类,用于对属性设置值时进行锁定与解锁,适用于高逼格动画当中. 源码: TimeLock.h 与 TimeLock.m // // TimeLock.h // ...