phpexcel导入excel数据使用方法实例_PHP教程
将Excel文件数据进行读取,并且返回错误的信息
/**
* 导入商品基本信息
*/
public function importProductBasicInfo($data){
include_once 'PHPExcel.php';
include_once 'PHPExcel/IOFactory.php';
include_once 'PHPExcel/Reader/Excel5.php';
// 定义一个错误集合.
$error = array();
$resultInfo = null;
$needNext = true;
//上传文件到服务器指定位置
$fileName = $_FILES["productinfo"]['name'];
$filePath = CBase_Common_UploadPicture::uploadFile($data["productinfo"], 'product');
//如果上传文件成功,就执行导入excel操作
if($filePath == 1) {
$error[1] = "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";
}else if($filePath == 4){
$error[4] = "没有文件被上传";
}else{
$objReader = PHPExcel_IOFactory::createReader('Excel5');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($filePath);
$objWorksheet = $objPHPExcel->getActiveSheet();
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
$colums = array();
$data = array();
$excelAllId = array();
$excelIdRow = array();
$execlAllShopLinkedId = array();
for($i=0;$i $cValue = trim($objWorksheet->getCellByColumnAndRow($i,1)->getValue());
switch ($cValue) {
case self::PRODUCT_SAP_CODE : $colums[$i] = "sap_code"; break;
case self::PRODUCT_NAME : $colums[$i] = "pname"; break;
case self::PRODUCT_GROUP : $colums[$i] = "product_group"; break;
case self::PRODUCT_BRAND : $colums[$i] = 'product_brand'; break;
case self::PRODUCT_PROXY_FLAG : $colums[$i] = "product_proxy_flag"; break;
case self::PRODUCT_BINNING : $colums[$i] = "product_binning"; break;
case self::PRODUCT_SELL_PICK : $colums[$i] = "product_sell_pick"; break;
case self::PRODUCT_ATTRIBUTE : $colums[$i] = "product_attribute"; break;
case self::PRODUCT_SUPPLIER_CODE : $colums[$i] = "vendor_code"; break;
case self::PRODUCT_SUPPLY_ADDRESS : $colums[$i] = "zzwerk_code"; break;
case self::PRODUCT_BATCH : $colums[$i] = "zzlgort_code"; break;
default : $error[3][] = $cValue; break;
}
}
//检测Excel中的基本信息是否存在
$dataCount = $highestRow - 1;
if(count($colums) == 0) {
$error[5] = "没有表头";
}
else if(!in_array('sap_code',$colums)){
$error[2] = "表头中商品SAP编码不存在";
}
else if($dataCount $error[6] = "Excel文件中没有数据";
}
else if(count($error)==0){
for ($i=2;$i $colkey = array_search('sap_code');
$shopLinkedIdValue = trim($objWorksheet->getCellByColumnAndRow($colkey,$i)->getValue());
if(!$shopLinkedIdValue) {
continue;
}
if(in_array($shopLinkedIdValue,$execlAllShopLinkedId)){
$error[7][$shopLinkedIdValue]['duplicate'] = true;
$error[7][$shopLinkedIdValue]['excelRow'][] = $i;
$execlAllShopLinkedId[$i] = $shopLinkedIdValue;
$error[7][$shopLinkedIdValue]['noId'] = true;
}else {
$excelIdRow[$shopLinkedIdValue] = $i;
$execlAllShopLinkedId[$i] = $shopLinkedIdValue;
}
}
$dealMultiple = ceil($dataCount / 1000);
$allProduct = array();
for($i=0;$i $offset = $i*1000+2;
$max = ($i+1)*1000+1;
$max = ($max > $dataCount) ? $highestRow : $max;
$allShopLinkedId = array();
for($j=$offset;$j if($execlAllShopLinkedId[$j]){
$allShopLinkedId[] = $execlAllShopLinkedId[$j];
}
}
// 根据SAP商品编码查询在库中的记录数.
$dbShopProducts = $this->getShopLinkedByIds($allShopLinkedId);
for($j=$offset;$j $product = array();
for($k=0;$k $tempV = trim($objWorksheet->getCellByColumnAndRow($k,$j)->getValue());
if($tempV && $tempV != '') {
$product[$colums[$k]] = $tempV;
}
}
//获取文件中的SAP编码
$id = $product['sap_code'];
if(!$id){
continue;
}
//检测商品SAP编码是否已经存在
if(!in_array($id,$dbShopProducts)){
$allProduct[$id] = $product;
}else{
$error[7][$id]['hasId'] = true;
}
//商品名是否为空
if(!isset($product['pname'])){
$error[7][$id]['emptyName'] = true;
}
//商品类目(商品组)是否为空
if(!isset($product['product_group'])){
$error[7][$id]['emptyProductGroup'] = true;
}
//产品层次(品牌)是否为空
if(!isset($product['product_brand'])){
$error[7][$id]['emptyProductBrand'] = true;
}
//经代销标志是否为空
if(!isset($product['product_proxy_flag'])){
$error[7][$id]['emptyProductProxyFlag'] = true;
}
//装箱清单是否为空
if(!isset($product['product_binning'])){
$error[7][$id]['emptyProductBinning'] = true;
}
//先销后采标识是否为空
if(!isset($product['product_sell_pick'])){
$error[7][$id]['emptyProductSellPick'] = true;
}
//商品属性是否为空
if(!isset($product['product_attribute'])){
$error[7][$id]['emptyProductAttribute'] = true;
}
//供应商编码是否为空
if(!isset($product['vendor_code'])){
$error[7][$id]['emptyVendorCode'] = true;
}
//供应地点是否为空
if(!isset($product['zzwerk_code'])){
$error[7][$id]['emptyZzwerkCode'] = true;
}
//库区是否为空
if(!isset($product['zzlgort_code'])){
$error[7][$id]['emptyZzlgortCode'] = true;
}
if(isset($error[7][$id])){
$error[7][$id]['excelRow'] = $j;
}
}
}
}
}
$resultInfo['fileName'] = $fileName;
//返回错误信息
if(count($error)>0){
if(isset($error[1])){
$resultInfo['type'] = 1;
$resultInfo['msg'] = $error[1];
}else if(isset($error[2])){
$resultInfo['type'] = 2;
$resultInfo['msg'] = $error[2];
}else if(isset($error[3])){
$resultInfo['type'] = 3;
$resultInfo['msg'] = '表头【'.implode(',',$error[3]).'】不存在';
}else if(isset($error[4])){
$resultInfo['type'] = 4;
$resultInfo['msg'] = $error[4];
}else if(isset($error[6])){
$resultInfo['type'] = 6;
$resultInfo['msg'] = $error[6];
}else if(isset($error[7])){
$excelName = null;
$objPHPWriteExcel = new PHPExcel();
$objPHPWriteExcel->getProperties()->setCreator("yuer")
->setLastModifiedBy("yuer")->setTitle("")->setSubject("")
->setDescription("")->setKeywords("")->setCategory("");
$prefix = substr($fileName,0,strrpos($fileName,'.'));
$suffix = substr($fileName,strrpos($fileName,'.'));
$excelName = date("Y_m_d_H_i_s").'_'.mt_rand(1,99).'_'.$prefix.'ErrorReport'.$suffix;
$excelName = Base_Tool_Pinyin::getPinyin($excelName);
$objPHPWriteExcel->setActiveSheetIndex(0);
$activeSheet = $objPHPWriteExcel->getActiveSheet();
$activeSheet->setTitle('错误报告');
$activeSheet->setCellValueByColumnAndRow(0,1,self::PRODUCT_SAP_CODE);
$activeSheet->setCellValueByColumnAndRow(1,1,'原excel行号');
$activeSheet->setCellValueByColumnAndRow(2,1,'第几行编码存在重复');
$activeSheet->setCellValueByColumnAndRow(3,1,self::PRODUCT_NAME);
$activeSheet->setCellValueByColumnAndRow(4,1,self::PRODUCT_GROUP);
$activeSheet->setCellValueByColumnAndRow(5,1,self::PRODUCT_BRAND);
$activeSheet->setCellValueByColumnAndRow(6,1,self::PRODUCT_PROXY_FLAG);
$activeSheet->setCellValueByColumnAndRow(7,1,self::PRODUCT_BINNING);
$activeSheet->setCellValueByColumnAndRow(8,1,self::PRODUCT_SELL_PICK);
$activeSheet->setCellValueByColumnAndRow(9,1,self::PRODUCT_ATTRIBUTE);
$activeSheet->setCellValueByColumnAndRow(10,1,self::PRODUCT_SUPPLIER_CODE);
$activeSheet->setCellValueByColumnAndRow(11,1,self::PRODUCT_SUPPLY_ADDRESS);
$activeSheet->setCellValueByColumnAndRow(12,1,self::PRODUCT_BATCH);
$activeSheet->setCellValueByColumnAndRow(13,1,'其他原因');
$activeSheet->getColumnDimensionByColumn(0)->setWidth(15);
$activeSheet->getColumnDimensionByColumn(1)->setWidth(20);
$activeSheet->getColumnDimensionByColumn(2)->setWidth(20);
$activeSheet->getColumnDimensionByColumn(3)->setWidth(20);
$activeSheet->getColumnDimensionByColumn(4)->setWidth(20);
$activeSheet->getColumnDimensionByColumn(5)->setWidth(20);
$activeSheet->getColumnDimensionByColumn(6)->setWidth(20);
$activeSheet->getColumnDimensionByColumn(7)->setWidth(20);
$activeSheet->getColumnDimensionByColumn(8)->setWidth(20);
$activeSheet->getColumnDimensionByColumn(9)->setWidth(20);
$activeSheet->getColumnDimensionByColumn(10)->setWidth(20);
$activeSheet->getColumnDimensionByColumn(11)->setWidth(20);
$activeSheet->getColumnDimensionByColumn(12)->setWidth(20);
$activeSheet->getColumnDimensionByColumn(13)->setWidth(20);
$writeExcelIndex = 2;
foreach ($error[7] as $pId=>$pInfo){
if(isset($pInfo['hasId'])){
$activeSheet->setCellValueByColumnAndRow(0,$writeExcelIndex,$pId.'-此供应商编码已经存在');
} else {
$activeSheet->setCellValueByColumnAndRow(0,$writeExcelIndex,$pId);
}
$activeSheet->setCellValueByColumnAndRow(1,$writeExcelIndex,$pInfo['excelRow']);
if(isset($pInfo['duplicate'])){
$activeSheet->setCellValueByColumnAndRow(2,$writeExcelIndex,$excelIdRow[$pId]);
}
if(isset($pInfo['emptyName'])){
$activeSheet->setCellValueByColumnAndRow(3,$writeExcelIndex,'-为空');
}
if(isset($pInfo['emptyProductGroup'])){
$activeSheet->setCellValueByColumnAndRow(4,$writeExcelIndex,'-为空');
}
if(isset($pInfo['emptyProductBrand'])){
$activeSheet->setCellValueByColumnAndRow(5,$writeExcelIndex,'-为空');
}
if(isset($pInfo['emptyProductProxyFlag'])){
$activeSheet->setCellValueByColumnAndRow(6,$writeExcelIndex,'-为空');
}
if(isset($pInfo['emptyProductBinning'])){
$activeSheet->setCellValueByColumnAndRow(7,$writeExcelIndex,'-为空');
}
if(isset($pInfo['emptyProductSellPick'])){
$activeSheet->setCellValueByColumnAndRow(8,$writeExcelIndex,'-为空');
}
if(isset($pInfo['emptyProductAttribute'])){
$activeSheet->setCellValueByColumnAndRow(9,$writeExcelIndex,'-为空');
}
if(isset($pInfo['emptyVendorCode'])){
$activeSheet->setCellValueByColumnAndRow(10,$writeExcelIndex,'-为空');
}
if(isset($pInfo['emptyZzwerkCode'])){
$activeSheet->setCellValueByColumnAndRow(11,$writeExcelIndex,'-为空');
}
if(isset($pInfo['emptyZzlgortCode'])){
$activeSheet->setCellValueByColumnAndRow(12,$writeExcelIndex,'-为空');
}
if(isset($pInfo['other'])){
$activeSheet->setCellValueByColumnAndRow(13,$writeExcelIndex,$pInfp['other']);
}
$writeExcelIndex++;
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPWriteExcel, 'Excel5');
$excelPath = FILE_PATH.DS.'feedback'.DS.$excelName;
$objWriter->save($excelPath);
$resultInfo['type'] = 7;
$resultInfo['msg'] = $fileName."文件中存在错误";
$resultInfo['errorReport'] = $excelName;
// 日志操作,暂时空着
}
}else{
//导入数据
$logIds = '';
$i = 0;
foreach ($allProduct as $pId => $pInfo){
$updateProductSql = 'insert into yr_product set ';
if(isset($pInfo['pname']) && trim($pInfo['pname'])){
$updateProductSql = $updateProductSql.'pname=\''.str_replace('\'','\'\'',$pInfo['pname']).'\',';
}
//如果SAP编码不足18位,则用0从左开始补全
if(isset($pInfo['sap_code'])){
if(strlen($pInfo['sap_code']) $pInfo['sap_code'] = str_pad($pInfo['sap_code'], 18, "0", STR_PAD_LEFT);
$updateProductSql = $updateProductSql.'sap_code=\''.str_replace('\'','\'\'',$pInfo['sap_code']).'\',';
}
}
if(isset($pInfo['product_group'])){
$updateProductSql = $updateProductSql.'product_group=\''.$pInfo['product_group'].'\',';
}
if(isset($pInfo['product_brand'])){
$updateProductSql = $updateProductSql.'product_brand=\''.$pInfo['product_brand'].'\',';
}
if(isset($pInfo['product_proxy_flag'])){
$updateProductSql = $updateProductSql.'product_proxy_flag=\''.$pInfo['product_proxy_flag'].'\',';
}
if(isset($pInfo['product_binning'])){
$updateProductSql = $updateProductSql.'product_binning=\''.$pInfo['product_binning'].'\',';
}
if(isset($pInfo['product_sell_pick'])){
$updateProductSql = $updateProductSql.'product_sell_pick=\''.$pInfo['product_sell_pick'].'\',';
}
if(isset($pInfo['product_attribute'])){
$updateProductSql = $updateProductSql.'product_attribute=\''.$pInfo['product_attribute'].'\',';
}
if(isset($pInfo['vendor_code'])){
$updateProductSql = $updateProductSql.'vendor_code=\''.$pInfo['vendor_code'].'\',';
}
if(isset($pInfo['zzwerk_code'])){
$updateProductSql = $updateProductSql.'zzwerk_code=\''.$pInfo['zzwerk_code'].'\',';
}
if(isset($pInfo['zzlgort_code'])){
$updateProductSql = $updateProductSql.'zzlgort_code=\''.$pInfo['zzlgort_code'].'\'';
}
//最终的SQL语句
$result = $this->excuteMultiInsertSql($updateProductSql);
}
$resultInfo['type'] = 8;
$resultInfo['msg'] = "导入商品基本信息成功";
/*
* // 日志操作.
* $content = '批量新建商品导入操作成功:导入的供应商品编码有->';
* $logData['content'] = $content.$logIds;
*/
}
return $resultInfo;
}

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

目录解决方法一解决方法二一、删除Windows更新的临时文件二、修复受损的系统文件三、查看并修改注册表项四、关闭网卡IPv6五、运行WindowsUpdateTroubleshootor工具进行修复六、关闭防火墙和其它相关的杀毒软件。七、关闭WidowsUpdate服务。解决方法三解决方法四华为计算机Windows更新出现“0x8024401c”报错问题现象问题原因解决方案仍未解决?最近web服务器因为系统漏洞需要更新,登录服务器之后,更新提示错误代码0x8024401c解决方法一

0.这篇文章干了啥?提出了DepthFM:一个多功能且快速的最先进的生成式单目深度估计模型。除了传统的深度估计任务外,DepthFM还展示了在深度修复等下游任务中的最先进能力。DepthFM效率高,可以在少数推理步骤内合成深度图。下面一起来阅读一下这项工作~1.论文信息标题:DepthFM:FastMonocularDepthEstimationwithFlowMatching作者:MingGui,JohannesS.Fischer,UlrichPrestel,PingchuanMa,Dmytr

谷歌力推的JAX在最近的基准测试中性能已经超过Pytorch和TensorFlow,7项指标排名第一。而且测试并不是在JAX性能表现最好的TPU上完成的。虽然现在在开发者中,Pytorch依然比Tensorflow更受欢迎。但未来,也许有更多的大模型会基于JAX平台进行训练和运行。模型最近,Keras团队为三个后端(TensorFlow、JAX、PyTorch)与原生PyTorch实现以及搭配TensorFlow的Keras2进行了基准测试。首先,他们为生成式和非生成式人工智能任务选择了一组主流

1、打开PPT,翻页至需要插入excel图标的页面。点击插入选项卡。2、点击【对象】。3、跳出以下对话框。4、点击【由文件创建】,点击【浏览】。5、选择需要插入的excel表格。6、点击确定后跳出如下页面。7、勾选【显示为图标】。8、点击确定即可。

在iPhone上面临滞后,缓慢的移动数据连接?通常,手机上蜂窝互联网的强度取决于几个因素,例如区域、蜂窝网络类型、漫游类型等。您可以采取一些措施来获得更快、更可靠的蜂窝互联网连接。修复1–强制重启iPhone有时,强制重启设备只会重置许多内容,包括蜂窝网络连接。步骤1–只需按一次音量调高键并松开即可。接下来,按降低音量键并再次释放它。步骤2–该过程的下一部分是按住右侧的按钮。让iPhone完成重启。启用蜂窝数据并检查网络速度。再次检查修复2–更改数据模式虽然5G提供了更好的网络速度,但在信号较弱

html读取excel数据的方法:1、使用JavaScript库读取Excel数据;2、使用服务器端编程语言读取Excel数据。

哭死啊,全球狂炼大模型,一互联网的数据不够用,根本不够用。训练模型搞得跟《饥饿游戏》似的,全球AI研究者,都在苦恼怎么才能喂饱这群数据大胃王。尤其在多模态任务中,这一问题尤为突出。一筹莫展之际,来自人大系的初创团队,用自家的新模型,率先在国内把“模型生成数据自己喂自己”变成了现实。而且还是理解侧和生成侧双管齐下,两侧都能生成高质量、多模态的新数据,对模型本身进行数据反哺。模型是啥?中关村论坛上刚刚露面的多模态大模型Awaker1.0。团队是谁?智子引擎。由人大高瓴人工智能学院博士生高一钊创立,高

特斯拉机器人Optimus最新视频出炉,已经可以在厂子里打工了。正常速度下,它分拣电池(特斯拉的4680电池)是这样的:官方还放出了20倍速下的样子——在小小的“工位”上,拣啊拣啊拣:这次放出的视频亮点之一在于Optimus在厂子里完成这项工作,是完全自主的,全程没有人为的干预。并且在Optimus的视角之下,它还可以把放歪了的电池重新捡起来放置,主打一个自动纠错:对于Optimus的手,英伟达科学家JimFan给出了高度的评价:Optimus的手是全球五指机器人里最灵巧的之一。它的手不仅有触觉
