PHP完全自学手册(珍藏版) 中文pdf扫描版下载


ecshop订单批量导出是通过PHPExcel类实现方法,效果见上图:
第一步,将PHPExcel类包解压到后台根目录下。

第二步,页面上部署操作按钮:打开admin/templates/order_list.htm文件,在打印订单按钮后面(约第73行)加上
|
|
<input name="export" type="submit" id="btnSubmit5" value="导出到Excel" class="button" disabled="true" onclick="this.form.target = '_blank'" /> |
第三步,部署代码:打开admin/order.php文件,在适当位置加上如下代码,(代码就不再一行行解析了,都有注释)
|
|
/* 批量导出订单 */elseif (isset($_POST['export'])) { if (empty($_POST['order_id'])) { sys_msg($_LANG['pls_select_order']); } /* 赋值公用信息 */ $smarty->assign('shop_name', $_CFG['shop_name']); $smarty->assign('shop_url', $ecs->url()); $smarty->assign('shop_address', $_CFG['shop_address']); $smarty->assign('service_phone', $_CFG['service_phone']); $smarty->assign('print_time', local_date($_CFG['time_format'])); $smarty->assign('action_user', $_SESSION['admin_name']); $html = ''; $order_sn_list = explode(',', $_POST['order_id']); ////////////////////////// error_reporting(E_ALL); date_default_timezone_set('Europe/London'); require_once dirname(__FILE__) . '/Classes/PHPExcel.php'; echo date('H:i:s') . " Create new PHPExcel object\n"; $objPHPExcel = new PHPExcel(); echo date('H:i:s') . " Set properties\n"; $objPHPExcel->getProperties()->setCreator("wdz")->setLastModifiedBy("wdz")->setTitle("我的订单")->setSubject("我的订单")->setDescription(date('Y/m/d H:i:s') . "导出的订单")->setKeywords("我的订单")->setCategory("Test result file"); /*设置标题属性*/ //字体大小 $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(16); //加粗 $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true); //表格宽度 $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20); //垂直居中 $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); //水平居中 $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); /////////////////////// //字体大小 $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(16); //加粗 $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setBold(true); //表格宽度 $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(10); //垂直居中 $objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); //水平居中 $objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //////////////////// //字体大小 $objPHPExcel->getActiveSheet()->getStyle('C1')->getFont()->setSize(16); //加粗 $objPHPExcel->getActiveSheet()->getStyle('C1')->getFont()->setBold(true); //表格宽度 $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(40); //垂直居中 $objPHPExcel->getActiveSheet()->getStyle('C1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); //水平居中 $objPHPExcel->getActiveSheet()->getStyle('C1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); /////////////////////// //字体大小 $objPHPExcel->getActiveSheet()->getStyle('D1')->getFont()->setSize(16); //加粗 $objPHPExcel->getActiveSheet()->getStyle('D1')->getFont()->setBold(true); //表格宽度 $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(30); //垂直居中 $objPHPExcel->getActiveSheet()->getStyle('D1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); //水平居中 $objPHPExcel->getActiveSheet()->getStyle('D1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //////////////////// //字体大小 $objPHPExcel->getActiveSheet()->getStyle('E1')->getFont()->setSize(16); //加粗 $objPHPExcel->getActiveSheet()->getStyle('E1')->getFont()->setBold(true); //表格宽度 $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(10); //垂直居中 $objPHPExcel->getActiveSheet()->getStyle('E1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); //水平居中 $objPHPExcel->getActiveSheet()->getStyle('E1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //////////////////// //字体大小 $objPHPExcel->getActiveSheet()->getStyle('F1')->getFont()->setSize(16); //加粗 $objPHPExcel->getActiveSheet()->getStyle('F1')->getFont()->setBold(true); //表格宽度 $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(10); //垂直居中 $objPHPExcel->getActiveSheet()->getStyle('F1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); //水平居中 $objPHPExcel->getActiveSheet()->getStyle('F1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //////////////////// //字体大小 $objPHPExcel->getActiveSheet()->getStyle('G1')->getFont()->setSize(16); //加粗 $objPHPExcel->getActiveSheet()->getStyle('G1')->getFont()->setBold(true); //表格宽度 $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(10); //垂直居中 $objPHPExcel->getActiveSheet()->getStyle('G1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); //水平居中 $objPHPExcel->getActiveSheet()->getStyle('G1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //////////////////// //字体大小 $objPHPExcel->getActiveSheet()->getStyle('H1')->getFont()->setSize(16); //加粗 $objPHPExcel->getActiveSheet()->getStyle('H1')->getFont()->setBold(true); //表格宽度 $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(10); //垂直居中 $objPHPExcel->getActiveSheet()->getStyle('H1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); //水平居中 $objPHPExcel->getActiveSheet()->getStyle('H1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //////////////////// //字体大小 $objPHPExcel->getActiveSheet()->getStyle('I1')->getFont()->setSize(16); //加粗 $objPHPExcel->getActiveSheet()->getStyle('I1')->getFont()->setBold(true); //表格宽度 $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(40); //垂直居中 $objPHPExcel->getActiveSheet()->getStyle('I1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); //水平居中 $objPHPExcel->getActiveSheet()->getStyle('I1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //////////////////// //字体大小 $objPHPExcel->getActiveSheet()->getStyle('J1')->getFont()->setSize(16); //加粗 $objPHPExcel->getActiveSheet()->getStyle('J1')->getFont()->setBold(true); //表格宽度 $objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(15); //垂直居中 $objPHPExcel->getActiveSheet()->getStyle('J1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); //水平居中 $objPHPExcel->getActiveSheet()->getStyle('J1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //////////////////// //字体大小 $objPHPExcel->getActiveSheet()->getStyle('K1')->getFont()->setSize(16); //加粗 $objPHPExcel->getActiveSheet()->getStyle('K1')->getFont()->setBold(true); //表格宽度 $objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(15); //垂直居中 $objPHPExcel->getActiveSheet()->getStyle('K1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); //水平居中 $objPHPExcel->getActiveSheet()->getStyle('K1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //////////////////// //字体大小 $objPHPExcel->getActiveSheet()->getStyle('L1')->getFont()->setSize(16); //加粗 $objPHPExcel->getActiveSheet()->getStyle('L1')->getFont()->setBold(true); //表格宽度 $objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(15); //垂直居中 $objPHPExcel->getActiveSheet()->getStyle('L1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); //水平居中 $objPHPExcel->getActiveSheet()->getStyle('L1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //////////////////// echo date('H:i:s') . " Add some data\n"; $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->setCellValue('A1', '订货日期'); $objPHPExcel->getActiveSheet()->setCellValue('B1', '款号'); $objPHPExcel->getActiveSheet()->setCellValue('C1', '商品名称'); $objPHPExcel->getActiveSheet()->setCellValue('D1', '属性'); $objPHPExcel->getActiveSheet()->setCellValue('E1', '数量'); $objPHPExcel->getActiveSheet()->setCellValue('F1', '价格'); $objPHPExcel->getActiveSheet()->setCellValue('G1', '收件人'); $objPHPExcel->getActiveSheet()->setCellValue('H1', '地址'); $objPHPExcel->getActiveSheet()->setCellValue('I1', '电话'); $objPHPExcel->getActiveSheet()->setCellValue('J1', '邮箱'); $objPHPExcel->getActiveSheet()->setCellValue('K1', '发货日期'); $hang = 2; /////////////////////// foreach ($order_sn_list as $order_sn) { /* 取得订单信息 */ $order = order_info(0, $order_sn); if (empty($order)) { continue; } /* 根据订单是否完成检查权限 */ if (order_finished($order)) { if (!admin_priv('order_view_finished', '', false)) { continue; } } else { if (!admin_priv('order_view', '', false)) { continue; } } /* 如果管理员属于某个办事处,检查该订单是否也属于这个办事处 */ $sql = "SELECT agency_id FROM " . $ecs->table('admin_user') . " WHERE user_id = '$_SESSION[admin_id]'"; $agency_id = $db->getOne($sql); if ($agency_id > 0) { if ($order['agency_id'] != $agency_id) { continue; } } /* 取得用户名 */ if ($order['user_id'] > 0) { $user = user_info($order['user_id']); if (!empty($user)) { $order['user_name'] = $user['user_name']; } } /* 取得区域名 */ $sql = "SELECT concat(IFNULL(c.region_name, ''), ' ', IFNULL(p.region_name, ''), " . "' ', IFNULL(t.region_name, ''), ' ', IFNULL(d.region_name, '')) AS region " . "FROM " . $ecs->table('order_info') . " AS o " . "LEFT JOIN " . $ecs->table('region') . " AS c ON o.country = c.region_id " . "LEFT JOIN " . $ecs->table('region') . " AS p ON o.province = p.region_id " . "LEFT JOIN " . $ecs->table('region') . " AS t ON o.city = t.region_id " . "LEFT JOIN " . $ecs->table('region') . " AS d ON o.district = d.region_id " . "WHERE o.order_id = '$order[order_id]'"; $order['region'] = $db->getOne($sql); /* 其他处理 */ $order['order_time'] = local_date($_CFG['time_format'], $order['add_time']); $order['pay_time'] = $order['pay_time'] > 0 ? local_date($_CFG['time_format'], $order['pay_time']) : $_LANG['ps'][PS_UNPAYED]; $order['shipping_time'] = $order['shipping_time'] > 0 ? local_date($_CFG['time_format'], $order['shipping_time']) : $_LANG['ss'][SS_UNSHIPPED]; $order['status'] = $_LANG['os'][$order['order_status']] . ',' . $_LANG['ps'][$order['pay_status']] . ',' . $_LANG['ss'][$order['shipping_status']]; $order['invoice_no'] = $order['shipping_status'] == SS_UNSHIPPED || $order['shipping_status'] == SS_PREPARING ? $_LANG['ss'][SS_UNSHIPPED] : $order['invoice_no']; /* 此订单的发货备注(此订单的最后一条操作记录) */ $sql = "SELECT action_note FROM " . $ecs->table('order_action') . " WHERE order_id = '$order[order_id]' AND shipping_status = 1 ORDER BY log_time DESC"; $order['invoice_note'] = $db->getOne($sql); /* 参数赋值:订单 */ $smarty->assign('order', $order); $shuliang = 0; /* 取得订单商品 */ $goods_list = array(); $goods_attr = array(); $sql = "SELECT o.*, g.goods_number AS storage, o.goods_attr, IFNULL(b.brand_name, '') AS brand_name " . "FROM " . $ecs->table('order_goods') . " AS o " . "LEFT JOIN " . $ecs->table('goods') . " AS g ON o.goods_id = g.goods_id " . "LEFT JOIN " . $ecs->table('brand') ." AS b ON g.brand_id = b.brand_id " . "WHERE o.order_id = '$order[order_id]' "; $res = $db->query($sql); $shuliang = 0; $chanpin = $hang; while ($row = $db->fetchRow($res)) { $shuliang = $shuliang + 1; /* 虚拟商品支持 */ if ($row['is_real'] == 0) { /* 取得语言项 */ $filename = ROOT_PATH . 'plugins/' . $row['extension_code'] . '/languages/common_' . $_CFG['lang'] . '.php'; if (file_exists($filename)) { include_once($filename); if (!empty($_LANG[$row['extension_code'] . '_link'])) { $row['goods_name'] = $row['goods_name'] . sprintf($_LANG[$row['extension_code'] . '_link'], $row['goods_id'], $order['order_sn']); } } } $objPHPExcel->getActiveSheet()->setCellValue('B' . $chanpin, $row['goods_sn']); $objPHPExcel->getActiveSheet()->setCellValue('C' . $chanpin, $row['goods_name']); $objPHPExcel->getActiveSheet()->setCellValue('D' . $chanpin, $row['goods_attr']); $objPHPExcel->getActiveSheet()->setCellValue('E' . $chanpin, $row['goods_number']); $objPHPExcel->getActiveSheet()->setCellValue('F' . $chanpin, $row['goods_price']); $row['formated_subtotal'] = price_format($row['goods_price'] * $row['goods_number']); $row['formated_goods_price'] = price_format($row['goods_price']); $goods_attr[] = explode(' ', trim($row['goods_attr'])); //将商品属性拆分为一个数组 $goods_list[] = $row; $chanpin = $chanpin + 1; } $attr = array(); $arr = array(); foreach ($goods_attr AS $index => $array_val) { foreach ($array_val AS $value) { $arr = explode(':', $value); //以 : 号将属性拆开 $attr[$index][] = @array( 'name' => $arr[0], 'value' => $arr[1] ); } } $smarty->assign('goods_attr', $attr); $smarty->assign('goods_list', $goods_list); $smarty->template_dir = '../' . DATA_DIR; for ($kk = $hang; $kk < ($hang + $shuliang); $kk++) { $objPHPExcel->getActiveSheet()->mergeCells('A' . $hang . ':A' . $kk); $objPHPExcel->getActiveSheet()->mergeCells('H' . $hang . ':H' . $kk); $objPHPExcel->getActiveSheet()->mergeCells('I' . $hang . ':I' . $kk); $objPHPExcel->getActiveSheet()->mergeCells('J' . $hang . ':J' . $kk); $objPHPExcel->getActiveSheet()->mergeCells('K' . $hang . ':K' . $kk); $objPHPExcel->getActiveSheet()->mergeCells('G' . $hang . ':G' . $kk); $objPHPExcel->getActiveSheet()->getStyle('A' . $hang . ':A' . $kk)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('A' . $hang . ':A' . $kk)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('H' . $hang . ':H' . $kk)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('H' . $hang . ':H' . $kk)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('I' . $hang . ':I' . $kk)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('I' . $hang . ':I' . $kk)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('J' . $hang . ':J' . $kk)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('J' . $hang . ':J' . $kk)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('K' . $hang . ':K' . $kk)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('K' . $hang . ':K' . $kk)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('G' . $hang . ':G' . $kk)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('G' . $hang . ':G' . $kk)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); } $objPHPExcel->getActiveSheet()->setCellValue('A' . ($hang), $order['order_time']); $objPHPExcel->getActiveSheet()->setCellValue('G' . ($hang), $order['consignee']); $objPHPExcel->getActiveSheet()->setCellValue('H' . ($hang), $order['address']); $objPHPExcel->getActiveSheet()->setCellValue('I' . ($hang), $order['tel']); $objPHPExcel->getActiveSheet()->setCellValue('J' . ($hang), $order['email']); $objPHPExcel->getActiveSheet()->setCellValue('K' . ($hang), $order['shipping_time']); $hang = $hang + $shuliang; } $objPHPExcel->getActiveSheet()->setTitle(("我的订单")); $objPHPExcel->setActiveSheetIndex(0); require_once 'Classes/PHPExcel/IOFactory.php'; $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save(str_replace('.php', '.xls', __FILE__)); 转载请注明:谷谷点程序 » ecshop订单批量导出到excel表方法 |