/// <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. mysql 的用法

    SELECT CASEWHEN    //当count(userId) = 0的时候 让其为null 不然报警告 // count(DISTINCT userId) 不用处理 count(userId ...

  2. sqlserver2008数据库文件降级为sqlserver2005文件

    直接分离附加是不行的. 操作步骤如下: 在sqlserver2008企业管理器中 右键xx数据库->任务->生成脚本 弹出框中勾选 为所选数据库中的所有对象编写脚本 下一步  修改如下图片 ...

  3. Openstack实践(1)部署使用实例及neutron网络

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://www.cnblogs.com/SuperXJ/ 如何快速部署使用openstack,使用kolla吧,o ...

  4. Fastdfs 部署干货

    tracker server and client:192.168.1.42 storage server:192.168.1.46 storage server:192.168.1.53 安装: 安 ...

  5. SQL Server ->> Online Index Rebuilding(联机索引重建)

    SQL Server的Enterprise Edition是支持联机索引重建的.那么联机索引重建是怎么工作的以及对我们的查询有什么影响呢? 既然是联机,SQL Server保持了现有索引对于用户的可用 ...

  6. 使用Powershell 管理 Windows 2012 hyper-v复制

    HyperV复制相关命令 Suspend-VMReplication Suspends replication of a virtual machine. 暂停复制虚拟机. Resume-VMRepl ...

  7. DevExpress源码编译总结 z

    本篇文章内容包括基础知识(GAC.程序集强签名.友元程序集).编译过程.注册GAC.添加工具箱.多语言支持.运行时和设计时调试 源码地址 链接:http://pan.baidu.com/s/1eQm1 ...

  8. Docker_1 安装Docker-CE

    安装 免sudo运行docker命令 ustc mirrors service failed 安装 Docker-CE 安装过程参考官网,Ubuntu中如下: ## 1. 从仓库安装 $ sudo a ...

  9. VS断点不生效

    工程属性页中“配置属性”->“C/C++”->“常规”->“调试信息格式”,选择“用于“编辑并继承”的程序数据库(/ZI)”. 在“配置属性”->“链接器”->“调试”- ...

  10. QT写hello world 以及信号槽机制

    QT是一个C++的库,不仅仅有GUI的库.首先写一个hello world吧.敲代码,从hello world 写起. #include<QtGui/QApplication> #incl ...