Excel批量导入商品,遇到导入失败记录到另一个Excel中供下载查看
/// <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中供下载查看的更多相关文章
- jxl将list导入到Excel中供下载
jxl操作excel /** * 分隔符 */ private final static String SEPARATOR = "|"; /** * 由List导出至指定的Shee ...
- 你需要一个新的model实体的时候必须new一个.奇怪的问题: 使用poi解析Excel的把数据插入数据库同时把数据放在一个list中,返回到页面展示,结果页面把最后一条数据显示了N次
数据库显示数据正常被插 插入一条打印一次数据,也是正常的,但是执行完,list就全部变成了最后一条数据.很奇怪 单步调试 给list插入第一条数据 model是6607 连续插了多条数据都是6607 ...
- SQL 将一个表中的所有记录插入到一个临时表中
insert into #tempTable select * from TempTable WHERE + 查询条件
- 订餐系统之Excel批量导入
批量导入现在基本已经成为各类系统的标配了,当前,我们订餐系统也不例外,什么商家呀.商品呀.优惠码之类的,都少不了.毕竟嘛,对非开发人员来说,看到Excel肯定比看到很多管理系统还是要亲切很多的.这里, ...
- Excel批量导入(导出同理)
在做JavaWeb中添加数据使我们在所难免会遇到的,在大数据的环境下批量添加和批量删除是必须的,而批量删除只需要获取到我们需要删除的ID就可以了,在批量添加中我们就会遇到问题,问题是得到批量的数据,这 ...
- 增值税发票税控开票软件助手Excel、ERP、SAP导入开票接口进行批量开票操作手册
写这遍文章的目的是方便以后个人使用,做个笔记记录. 首先我来说一下它是做什么用的,它的主要作用是把用户的开票数据,Excel数据.ERP 系统.SAP导入到增值税发票税控开票软件中,可用航信盘.百旺盘 ...
- JAVA实现Excel批量导入
一.模板下载: 先将模板放在项目WebRoot下的download文件夹下: /** * @Title: downloadFile * @Description: 模板下载 (网络地址) * @par ...
- zabbix3.4用Python脚本Excel批量导入主机
1.安装xlrd读取Excel文件 1.1. 下载setuptools-38.2.4.zip,上传至zabbix服务器解压安装,下载地址:https://pypi.python.org/package ...
- java使用POI实现Excel批量导入数据
1.准备工作 1.1 创建模板表头与数据库表字段一一对应,示例如下 1.2将模板放入项目中,如下图所示: 2.前端页面 2.1 使用超链接提供模板下载地址 <html lang="zh ...
随机推荐
- AndroidVideoCache 框架源码分析
1.简析: 在客户端播放视频的使用,容易出现这样的一个问题.在网络状况不好的情况下,视频流很容易卡顿或者中断,即使播放软件本身有一点的缓存能力,但是这个往往不够,造成播放失败,卡顿. AndroidV ...
- side Effect
副作用 side Effect 副作用是在计算结果的过程中,系统状态的一种变化,或者与外部世界进行的可观察的交互. 副作用可能包含,但不限于: 1.更改文件系统 2.往数据库里插入数据 3.发送一个h ...
- jQuery filter() , end()
1. jquery filter(condition) : 过滤指定对象中符合条件的元素: 2. jquery end() : 回到原来的操作对象 3. example : <body& ...
- Bzoj1835:[ZJOI2010]基站选址
Sol 设\(f[i][j]\)表示钦定\(i\)建基站,建了\(j\)个基站的最小代价 \(f[i][j]=max(f[l][j-1]+\Sigma_{t=l+1}^{i-1}\)不能影响到的村庄的 ...
- Java基础知识错误分析
答案:A,C 解析: 题目2: 答案:B 解析: 题目3: 答案:A 解析: 题目4: 答案:D 解析: 题目5: 答案:C 题目六: 答案:C 解析:
- jquery根据id取不到textarea对象,无法给textarea赋值
小编定义了一个textarea控件,却无法根据id取到textarea对象并赋值. 经过实验,得出了原因.代码如下: <!DOCTYPE html><html><head ...
- 【转】R树空间索引
R树在数据库等领域做出的功绩是非常显著的.它很好的解决了在高维空间搜索等问题.举个R树在现实领域中能够解决的例子吧:查找20英里以内所有的餐厅.如果没有R树你会怎么解决?一般情况下我们会把餐厅的坐标( ...
- 微信小程序开发4-JSON
1.JSON是JavaScript语法的子集 2.JSON的语法规则 数据在名称/值对中 数据由逗号分隔 大括号保存对象 中括号保存数组 3.JSON 值可以是: 数字(整数或浮点数) 字符串(在双引 ...
- Js 对Dom的操作
一.DOM的概述 DOM(Document Object Model,文档对象模型)描绘了一个层次化的节点树,允许开发人员添加.移除和修改页面的某一部分.这使得JavaScript操作HTML,不是在 ...
- mysql 12小时和24小时转换
1.12小时显示 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String ...