关于批量上传的修改

2016-07-07 15:44 来源:www.chinab4c.com 作者:ecshop专家

正在调试网店的批量上传功能,原批量上传功能是CSV文件格式的导入,在使用过程发现很多问题,如导入字段不全等。不知道大家有没有遇到过。现将原CSV改为ExcelXLS文件格式导入。

具体修改如下:

1、加入lib_excel.php类库文件
将lib_excel.php拷贝入[商店根目录]/admin/includes目录下
2、修改 [商店根目录]/admin/goods_batch.php 文件
行号 20 require('includes/init.php');
加入require('includes/lib_excel.php');

以下是原代码
行号 79-166
  1. /* 将文件按行读入数组,逐行进行解析 */
  2. $line_number = 0;
  3. $goods_list = array();
  4. $field_list = array_keys($_LANG['upload_goods']); // 字段列表
  5. $data = file($_FILES['file']['tmp_name']);
  6. foreach ($data AS $line)
  7. {
  8. // 跳过第一行
  9. if ($line_number == 0)
  10. {
  11. $line_number++;
  12. continue;
  13. }
  14. // 转换编码
  15. if ($_POST['charset'] != 'UTF8')
  16. {
  17. $line = $iconv->convert($_POST['charset'], 'UTF8', $line);
  18. }

  19. // 初始化
  20. $arr = array();
  21. $buff= '';
  22. $quote= 0;
  23. $len = strlen($line);
  24. for ($i = 0; $i < $len; $i++)
  25. {
  26. $char = $line[$i];
  27. if ('\\' == $char)
  28. {
  29. $i++;
  30. $char = $line[$i];
  31. switch ($char)
  32. {
  33. case '"':
  34. $buff .= '"';
  35. break;
  36. case '\'':
  37. $buff .= '\'';
  38. break;
  39. case ',';
  40. $buff .= ',';
  41. break;
  42. default:
  43. $buff .= '\\' . $char;
  44. break;
  45. }
  46. }
  47. elseif ('"' == $char)
  48. {
  49. if (0 == $quote)
  50. {
  51. $quote++;
  52. }
  53. else
  54. {
  55. $quote = 0;
  56. }
  57. }
  58. elseif (',' == $char)
  59. {
  60. if (0 == $quote)
  61. {
  62. $field_name = $field_list[count($arr)];
  63. $arr[$field_name] = trim($buff);
  64. $buff = '';
  65. $quote = 0;
  66. }
  67. else
  68. {
  69. $buff .= $char;
  70. }
  71. }
  72. else
  73. {
  74. $buff .= $char;
  75. }
  76. if ($i == $len - 1)
  77. {
  78. $field_name = $field_list[count($arr)];
  79. $arr[$field_name] = trim($buff);
  80. }
  81. }
  82. $goods_list[] = $arr;
  83. }
复制代码
更改为
  1. /* 将Excel文件数据导入数据库 */
  2. $line_number = 0;
  3. $goods_list = array();
  4. $field_list = array_keys($_LANG['upload_goods']); // 字段表
  5. Read_Excel_File($_FILES['file']['tmp_name'],$data); // 将文件数据读入数组
  6. foreach ($data[goods_list] AS $line) // $data[goods_list]goods_list 为Excel工作表名
  7. {
  8. // 跳过第一行
  9. if ($line_number == 0)
  10. {
  11. $line_number++;
  12. continue;
  13. }

  14. // 转换编码
  15. if ($_POST['charset'] != 'UTF8')
  16. {
  17. foreach ($line AS $value)
  18. {
  19. $value = $iconv->convert($_POST['charset'], 'UTF8', $value);
  20. }
  21. }

  22. // 初始化
  23. $arr = array();
  24. foreach ($line AS $field)
  25. {
  26. $field_name = $field_list[count($arr)];
  27. $arr[$field_name] = trim($field);
  28. }
  29. $goods_list[] = $arr;
  30. }
复制代码
注意:导入的Excel文件格式字段必须和官方的字段顺序和格式一样!
其中Excel的工作表名为:goods_list


ECSHOPv2.1.5-批量上传补丁.rar (15.43 KB)

重新上传

goods_batch.rar (11.46 KB)


回答:
正好操作到这部分,虽然还没看太明白,但是慢慢研究!!!谢谢!!

2、修改 [商店根目录]/admin/goods_batch.php 文件
行号 20 require('includes/init.php');
加入require('includes/lib_excel.php');



请问这个代码require('includes/lib_excel.php');是替代 require('includes/init.php');这个?还是直接加在这个后面,怎么我的总是出现错误!!!急!!!

是在后面“加入”

楼主果然厉害

图片怎么直接批量导入阿

请问楼主或其他朋友可以帮忙上传一份附件吗,现在附件下载不了了~
多谢了!

ECSHOPv2.1.5-批量上传补丁.rar (15.43 KB) 與 goods_batch.rar (11.46 KB)有一樣嗎??

ExcelXLS文件格式导入,上传了补订,怎么还是报错啊!以前试的时候就可以,现在用以前的文件传上去也不行,麻烦帮忙看看吧!


我在2.5下修改后发现经处理后的数据为负数,lib_excel.php不适合了,目前只能在本机环境下测试通过。

2.5修改后的新补丁已经有朋友测试通过了。

ECSHOPv2.5.0-批量上传补丁.rar (15.88 KB)


感谢顶了

喜欢 DEDE 那样的上传方式 转载很方便

什么是根目录
什么是上传到空间
用什么上传!!!???

刚装完2.15的程序,批量上传有出错,如下:
Warning: opendir(../languages): failed to open dir: Permission denied in /usr/vhome/g/a/m/gamedoll.cn/www/admin/goods_batch.php on line 37

能指点下吗 ??