0

0

phpexcel导入excel数据的示例代码

php中文网

php中文网

发布时间:2016-07-25 08:55:23

|

811人浏览过

|

来源于php中文网

原创

  1. /**
  2. * 导入商品基本信息
  3. * edit: bbs.it-home.org
  4. */
  5. public function importproductbasicinfo($data){
  6. include_once 'phpexcel.php';
  7. include_once 'phpexcel/iofactory.php';
  8. include_once 'phpexcel/reader/excel5.php';
  9. // 定义一个错误集合.
  10. $error = array();
  11. $resultinfo = null;
  12. $neednext = true;
  13. //上传文件到服务器指定位置
  14. $filename = $_files["productinfo"]['name'];
  15. $filepath = cbase_common_uploadpicture::uploadfile($data["productinfo"], 'product');
  16. //如果上传文件成功,就执行导入excel操作
  17. if($filepath == 1) {
  18. $error[1] = "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";
  19. }else if($filepath == 4){
  20. $error[4] = "没有文件被上传";
  21. }else{
  22. $objreader = phpexcel_iofactory::createreader('excel5');
  23. $objreader->setreaddataonly(true);
  24. $objphpexcel = $objreader->load($filepath);
  25. $objworksheet = $objphpexcel->getactivesheet();
  26. $highestrow = $objworksheet->gethighestrow();
  27. $highestcolumn = $objworksheet->gethighestcolumn();
  28. $highestcolumnindex = phpexcel_cell::columnindexfromstring($highestcolumn);
  29. $colums = array();
  30. $data = array();
  31. $excelallid = array();
  32. $excelidrow = array();
  33. $execlallshoplinkedid = array();
  34. for($i=0;$i
  35. $cvalue = trim($objworksheet->getcellbycolumnandrow($i,1)->getvalue());
  36. switch ($cvalue) {
  37. case self::product_sap_code : $colums[$i] = "sap_code"; break;
  38. case self::product_name : $colums[$i] = "pname"; break;
  39. case self::product_group : $colums[$i] = "product_group"; break;
  40. case self::product_brand : $colums[$i] = 'product_brand'; break;
  41. case self::product_proxy_flag : $colums[$i] = "product_proxy_flag"; break;
  42. case self::product_binning : $colums[$i] = "product_binning"; break;
  43. case self::product_sell_pick : $colums[$i] = "product_sell_pick"; break;
  44. case self::product_attribute : $colums[$i] = "product_attribute"; break;
  45. case self::product_supplier_code : $colums[$i] = "vendor_code"; break;
  46. case self::product_supply_address : $colums[$i] = "zzwerk_code"; break;
  47. case self::product_batch : $colums[$i] = "zzlgort_code"; break;
  48. default : $error[3][] = $cvalue; break;
  49. }
  50. }
  51. //检测excel中的基本信息是否存在
  52. $datacount = $highestrow - 1;
  53. if(count($colums) == 0) {
  54. $error[5] = "没有表头";
  55. }
  56. else if(!in_array('sap_code',$colums)){
  57. $error[2] = "表头中商品sap编码不存在";
  58. }
  59. else if($datacount
  60. $error[6] = "excel文件中没有数据";
  61. }
  62. else if(count($error)==0){
  63. for ($i=2;$i
  64. $colkey = array_search('sap_code');
  65. $shoplinkedidvalue = trim($objworksheet->getcellbycolumnandrow($colkey,$i)->getvalue());
  66. if(!$shoplinkedidvalue) {
  67. continue;
  68. }
  69. if(in_array($shoplinkedidvalue,$execlallshoplinkedid)){
  70. $error[7][$shoplinkedidvalue]['duplicate'] = true;
  71. $error[7][$shoplinkedidvalue]['excelrow'][] = $i;
  72. $execlallshoplinkedid[$i] = $shoplinkedidvalue;
  73. $error[7][$shoplinkedidvalue]['noid'] = true;
  74. }else {
  75. $excelidrow[$shoplinkedidvalue] = $i;
  76. $execlallshoplinkedid[$i] = $shoplinkedidvalue;
  77. }
  78. }
  79. $dealmultiple = ceil($datacount / 1000);
  80. $allproduct = array();
  81. for($i=0;$i
  82. $offset = $i*1000+2;
  83. $max = ($i+1)*1000+1;
  84. $max = ($max > $datacount) ? $highestrow : $max;
  85. $allshoplinkedid = array();
  86. for($j=$offset;$j
  87. if($execlallshoplinkedid[$j]){
  88. $allshoplinkedid[] = $execlallshoplinkedid[$j];
  89. }
  90. }
  91. // 根据sap商品编码查询在库中的记录数.
  92. $dbshopproducts = $this->getshoplinkedbyids($allshoplinkedid);
  93. for($j=$offset;$j

  94. $product = array();
  95. for($k=0;$k
  96. $tempV = trim($objWorksheet->getCellByColumnAndRow($k,$j)->getValue());
  97. if($tempV && $tempV != '') {
  98. $product[$colums[$k]] = $tempV;
  99. }
  100. }
  101. //获取文件中的SAP编码
  102. $id = $product['sap_code'];
  103. if(!$id){
  104. continue;
  105. }
  106. //检测商品SAP编码是否已经存在
  107. if(!in_array($id,$dbShopProducts)){
  108. $allProduct[$id] = $product;
  109. }else{
  110. $error[7][$id]['hasId'] = true;
  111. }
  112. //商品名是否为空
  113. if(!isset($product['pname'])){
  114. $error[7][$id]['emptyName'] = true;
  115. }
  116. //商品类目(商品组)是否为空
  117. if(!isset($product['product_group'])){
  118. $error[7][$id]['emptyProductGroup'] = true;
  119. }
  120. //产品层次(品牌)是否为空
  121. if(!isset($product['product_brand'])){
  122. $error[7][$id]['emptyProductBrand'] = true;
  123. }
  124. //经代销标志是否为空
  125. if(!isset($product['product_proxy_flag'])){
  126. $error[7][$id]['emptyProductProxyFlag'] = true;
  127. }
  128. //装箱清单是否为空
  129. if(!isset($product['product_binning'])){
  130. $error[7][$id]['emptyProductBinning'] = true;
  131. }
  132. //先销后采标识是否为空
  133. if(!isset($product['product_sell_pick'])){
  134. $error[7][$id]['emptyProductSellPick'] = true;
  135. }
  136. //商品属性是否为空
  137. if(!isset($product['product_attribute'])){
  138. $error[7][$id]['emptyProductAttribute'] = true;
  139. }
  140. //供应商编码是否为空
  141. if(!isset($product['vendor_code'])){
  142. $error[7][$id]['emptyVendorCode'] = true;
  143. }
  144. //供应地点是否为空
  145. if(!isset($product['zzwerk_code'])){
  146. $error[7][$id]['emptyZzwerkCode'] = true;
  147. }
  148. //库区是否为空
  149. if(!isset($product['zzlgort_code'])){
  150. $error[7][$id]['emptyZzlgortCode'] = true;
  151. }
  152. if(isset($error[7][$id])){
  153. $error[7][$id]['excelRow'] = $j;
  154. }
  155. }
  156. }
  157. }
  158. }
  159. $resultInfo['fileName'] = $fileName;
  160. //返回错误信息
  161. if(count($error)>0){
  162. if(isset($error[1])){
  163. $resultInfo['type'] = 1;
  164. $resultInfo['msg'] = $error[1];
  165. }else if(isset($error[2])){
  166. $resultInfo['type'] = 2;
  167. $resultInfo['msg'] = $error[2];
  168. }else if(isset($error[3])){
  169. $resultInfo['type'] = 3;
  170. $resultInfo['msg'] = '表头【'.implode(',',$error[3]).'】不存在';
  171. }else if(isset($error[4])){
  172. $resultInfo['type'] = 4;
  173. $resultInfo['msg'] = $error[4];
  174. }else if(isset($error[6])){
  175. $resultInfo['type'] = 6;
  176. $resultInfo['msg'] = $error[6];
  177. }else if(isset($error[7])){
  178. $excelName = null;
  179. $objPHPWriteExcel = new PHPExcel();
  180. $objPHPWriteExcel->getProperties()->setCreator("yuer")
  181. ->setLastModifiedBy("yuer")->setTitle("")->setSubject("")
  182. ->setDescription("")->setKeywords("")->setCategory("");
  183. $prefix = substr($fileName,0,strrpos($fileName,'.'));
  184. $suffix = substr($fileName,strrpos($fileName,'.'));
  185. $excelName = date("Y_m_d_H_i_s").'_'.mt_rand(1,99).'_'.$prefix.'ErrorReport'.$suffix;
  186. $excelName = Base_Tool_Pinyin::getPinyin($excelName);
  187. $objPHPWriteExcel->setActiveSheetIndex(0);
  188. $activeSheet = $objPHPWriteExcel->getActiveSheet();
  189. $activeSheet->setTitle('错误报告');
  190. $activeSheet->setCellValueByColumnAndRow(0,1,self::PRODUCT_SAP_CODE);
  191. $activeSheet->setCellValueByColumnAndRow(1,1,'原excel行号');
  192. $activeSheet->setCellValueByColumnAndRow(2,1,'第几行编码存在重复');
  193. $activeSheet->setCellValueByColumnAndRow(3,1,self::PRODUCT_NAME);
  194. $activeSheet->setCellValueByColumnAndRow(4,1,self::PRODUCT_GROUP);
  195. $activeSheet->setCellValueByColumnAndRow(5,1,self::PRODUCT_BRAND);
  196. $activeSheet->setCellValueByColumnAndRow(6,1,self::PRODUCT_PROXY_FLAG);
  197. $activeSheet->setCellValueByColumnAndRow(7,1,self::PRODUCT_BINNING);
  198. $activeSheet->setCellValueByColumnAndRow(8,1,self::PRODUCT_SELL_PICK);
  199. $activeSheet->setCellValueByColumnAndRow(9,1,self::PRODUCT_ATTRIBUTE);
  200. $activeSheet->setCellValueByColumnAndRow(10,1,self::PRODUCT_SUPPLIER_CODE);
  201. $activeSheet->setCellValueByColumnAndRow(11,1,self::PRODUCT_SUPPLY_ADDRESS);
  202. $activeSheet->setCellValueByColumnAndRow(12,1,self::PRODUCT_BATCH);
  203. $activeSheet->setCellValueByColumnAndRow(13,1,'其他原因');
  204. $activeSheet->getColumnDimensionByColumn(0)->setWidth(15);
  205. $activeSheet->getColumnDimensionByColumn(1)->setWidth(20);
  206. $activeSheet->getColumnDimensionByColumn(2)->setWidth(20);
  207. $activeSheet->getColumnDimensionByColumn(3)->setWidth(20);
  208. $activeSheet->getColumnDimensionByColumn(4)->setWidth(20);
  209. $activeSheet->getColumnDimensionByColumn(5)->setWidth(20);
  210. $activeSheet->getColumnDimensionByColumn(6)->setWidth(20);
  211. $activeSheet->getColumnDimensionByColumn(7)->setWidth(20);
  212. $activeSheet->getColumnDimensionByColumn(8)->setWidth(20);
  213. $activeSheet->getColumnDimensionByColumn(9)->setWidth(20);
  214. $activeSheet->getColumnDimensionByColumn(10)->setWidth(20);
  215. $activeSheet->getColumnDimensionByColumn(11)->setWidth(20);
  216. $activeSheet->getColumnDimensionByColumn(12)->setWidth(20);
  217. $activeSheet->getColumnDimensionByColumn(13)->setWidth(20);
  218. $writeExcelIndex = 2;
  219. foreach ($error[7] as $pId=>$pInfo){
  220. if(isset($pInfo['hasId'])){
  221. $activeSheet->setCellValueByColumnAndRow(0,$writeExcelIndex,$pId.'-此供应商编码已经存在');
  222. } else {
  223. $activeSheet->setCellValueByColumnAndRow(0,$writeExcelIndex,$pId);
  224. }
  225. $activeSheet->setCellValueByColumnAndRow(1,$writeExcelIndex,$pInfo['excelRow']);
  226. if(isset($pInfo['duplicate'])){
  227. $activeSheet->setCellValueByColumnAndRow(2,$writeExcelIndex,$excelIdRow[$pId]);
  228. }
  229. if(isset($pInfo['emptyName'])){
  230. $activeSheet->setCellValueByColumnAndRow(3,$writeExcelIndex,'-为空');
  231. }
  232. if(isset($pInfo['emptyProductGroup'])){
  233. $activeSheet->setCellValueByColumnAndRow(4,$writeExcelIndex,'-为空');
  234. }
  235. if(isset($pInfo['emptyProductBrand'])){
  236. $activeSheet->setCellValueByColumnAndRow(5,$writeExcelIndex,'-为空');
  237. }
  238. if(isset($pInfo['emptyProductProxyFlag'])){
  239. $activeSheet->setCellValueByColumnAndRow(6,$writeExcelIndex,'-为空');
  240. }
  241. if(isset($pInfo['emptyProductBinning'])){
  242. $activeSheet->setCellValueByColumnAndRow(7,$writeExcelIndex,'-为空');
  243. }
  244. if(isset($pInfo['emptyProductSellPick'])){
  245. $activeSheet->setCellValueByColumnAndRow(8,$writeExcelIndex,'-为空');
  246. }
  247. if(isset($pInfo['emptyProductAttribute'])){
  248. $activeSheet->setCellValueByColumnAndRow(9,$writeExcelIndex,'-为空');
  249. }
  250. if(isset($pInfo['emptyVendorCode'])){
  251. $activeSheet->setCellValueByColumnAndRow(10,$writeExcelIndex,'-为空');
  252. }
  253. if(isset($pInfo['emptyZzwerkCode'])){
  254. $activeSheet->setCellValueByColumnAndRow(11,$writeExcelIndex,'-为空');
  255. }
  256. if(isset($pInfo['emptyZzlgortCode'])){
  257. $activeSheet->setCellValueByColumnAndRow(12,$writeExcelIndex,'-为空');
  258. }
  259. if(isset($pInfo['other'])){

    慧博商城系统HuiboShop2011
    慧博商城系统HuiboShop2011

    慧博商城系统HuiboShop2011系统特色:1、上百套模板随意下载切换、模板定时更新;2、csv数据导入、数据定向读取,一键导入商品信息,省时、省力; 3、多会员等级管理,一站搞定零售、批发、代销;4、可集成网站分销功能模块,缔造庞大的代理业务链,代理客户一键铺货;5、代码严谨,防SQL注入;前后台用户分开管理,密码不可逆加密;6、简单易操作、只需几分钟搞定一个商城网站;商城后台帐号admin

    下载
  260. $activeSheet->setCellValueByColumnAndRow(13,$writeExcelIndex,$pInfp['other']);
  261. }
  262. $writeExcelIndex++;
  263. }
  264. $objWriter = PHPExcel_IOFactory::createWriter($objPHPWriteExcel, 'Excel5');
  265. $excelPath = FILE_PATH.DS.'feedback'.DS.$excelName;
  266. $objWriter->save($excelPath);
  267. $resultInfo['type'] = 7;
  268. $resultInfo['msg'] = $fileName."文件中存在错误";
  269. $resultInfo['errorReport'] = $excelName;
  270. // 日志操作,暂时空着
  271. }
  272. }else{
  273. //导入数据
  274. $logIds = '';
  275. $i = 0;
  276. foreach ($allProduct as $pId => $pInfo){
  277. $updateProductSql = 'insert into yr_product set ';
  278. if(isset($pInfo['pname']) && trim($pInfo['pname'])){
  279. $updateProductSql = $updateProductSql.'pname=\''.str_replace('\'','\'\'',$pInfo['pname']).'\',';
  280. }
  281. //如果SAP编码不足18位,则用0从左开始补全
  282. if(isset($pInfo['sap_code'])){
  283. if(strlen($pInfo['sap_code'])
  284. $pInfo['sap_code'] = str_pad($pInfo['sap_code'], 18, "0", STR_PAD_LEFT);
  285. $updateProductSql = $updateProductSql.'sap_code=\''.str_replace('\'','\'\'',$pInfo['sap_code']).'\',';
  286. }
  287. }
  288. if(isset($pInfo['product_group'])){
  289. $updateProductSql = $updateProductSql.'product_group=\''.$pInfo['product_group'].'\',';
  290. }
  291. if(isset($pInfo['product_brand'])){
  292. $updateProductSql = $updateProductSql.'product_brand=\''.$pInfo['product_brand'].'\',';
  293. }
  294. if(isset($pInfo['product_proxy_flag'])){
  295. $updateProductSql = $updateProductSql.'product_proxy_flag=\''.$pInfo['product_proxy_flag'].'\',';
  296. }
  297. if(isset($pInfo['product_binning'])){
  298. $updateProductSql = $updateProductSql.'product_binning=\''.$pInfo['product_binning'].'\',';
  299. }
  300. if(isset($pInfo['product_sell_pick'])){
  301. $updateProductSql = $updateProductSql.'product_sell_pick=\''.$pInfo['product_sell_pick'].'\',';
  302. }
  303. if(isset($pInfo['product_attribute'])){
  304. $updateProductSql = $updateProductSql.'product_attribute=\''.$pInfo['product_attribute'].'\',';
  305. }
  306. if(isset($pInfo['vendor_code'])){
  307. $updateProductSql = $updateProductSql.'vendor_code=\''.$pInfo['vendor_code'].'\',';
  308. }
  309. if(isset($pInfo['zzwerk_code'])){
  310. $updateProductSql = $updateProductSql.'zzwerk_code=\''.$pInfo['zzwerk_code'].'\',';
  311. }
  312. if(isset($pInfo['zzlgort_code'])){
  313. $updateProductSql = $updateProductSql.'zzlgort_code=\''.$pInfo['zzlgort_code'].'\'';
  314. }
  315. //最终的SQL语句
  316. $result = $this->excuteMultiInsertSql($updateProductSql);
  317. }
  318. $resultInfo['type'] = 8;
  319. $resultInfo['msg'] = "导入商品基本信息成功";
  320. /*

  321. * // 日志操作.
  322. * $content = '批量新建商品导入操作成功:导入的供应商品编码有->';
  323. * $logData['content'] = $content.$logIds;
  324. */
  325. }
  326. return $resultInfo;
  327. }
复制代码


相关文章

WPS零基础入门到精通全套教程!
WPS零基础入门到精通全套教程!

全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

797

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

272

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

144

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

25

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

92

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

53

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

717

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

64

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
手把手实现数据传输编码
手把手实现数据传输编码

共1课时 | 759人学习

php初学者入门课程
php初学者入门课程

共10课时 | 0.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号