Magento使用phpexcel导出 商品订单 /订单条目表sales_flat_order_item

本文介绍了一个使用Magento系统导出特定状态及创建日期范围内订单条目数据的方法,并将数据转化为Excel表格进行下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php
/**
 * 导出商品订单(订单条目表sales_flat_order_item)
 * @date 2015年6月9日
 */

define('MAGENTO', realpath(dirname(__FILE__)));
require_once MAGENTO . '/app/Mage.php';
umask(0);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

//echo date('Y-m-d H:i:s',strtotime('2015-06-02') - 7*3600);
//准备订单的查询条件
$order_status = isset($_GET['status']) ? $_GET['status'] :'Pending'; //订单状态
/*时间数据库存的是格林威治时间,所以查询时应该减去7个小时*/
$order_created = $_GET['created'] = '2015-06-08';  //订单创建时间
$order_created = date('Y-m-d H:i:s',strtotime($_GET['created']) - 7*3600);
//$order_payment = isset($_GET['payment']) ? $_GET['payment'] :'checkmo'; //订单支付方式,checkmo:货到付款

//1.查询
/*
不同商品一条记录
*/

$sql = "SELECT
  order_table.increment_id,item_table.parent_item_id,
item_table.created_at,item_table.sku,item_table.name,item_table.qty_ordered,item_table.original_price,item_table.price,item_table.row_total,item_table.row_weight,
order_table.customer_email, CONCAT_WS('',order_table.customer_firstname,order_table.customer_middlename,order_table.customer_lastname) AS `BilltoName`, CONCAT_WS('',address_table.firstname,address_table.middlename,address_table.lastname) AS `ShiptoName`, CONCAT_WS(', ',address_table.street,address_table.city,address_table.region) AS `ShippingAddress`,
 address_table.city,region_table.code,address_table.postcode,
 address_table.telephone
FROM sales_flat_order_item AS item_table
LEFT JOIN sales_flat_order AS order_table ON order_table.entity_id=item_table.order_id
LEFT JOIN sales_flat_order_address AS address_table ON address_table.parent_id=order_table.entity_id
LEFT JOIN directory_country_region AS region_table ON region_table.default_name=`address_table`.region
WHERE item_table.created_at >= '{$order_created}' AND address_table.address_type='shipping' and order_table.`status`='{$order_status}'";


$handle = Mage::getSingleton('core/resource')->getConnection('core_write');
$query = $handle->query($sql);
$order_list = array();
while ($row = $query->fetch()) {
    /*parent_item_id如果存在,该记录行价格就为0,这里排除*/
   if(!isset($row['parent_item_id'])){
       $order_list[] = $row;
   }
}



/*
*+----------------------------------------------------------------------
*   PHPExcel导出Excel表格
*   array $rearr  需要导出的数组
*+----------------------------------------------------------------------
*/
function export($rearr) {
    $result = array(
        '订单编号',
        '时间',
        'SKU',
        '商品名称',
        '数量',
        '原价',
        '成交价',
        '总价',
        '付款人Email',
        '付款人名称',
        '收货人名称',
        '收货人地址',
        '收货人城市',
        '州或省',
        '收货邮编',
        '收货人电话'
    );
    $arr = array(
        'A',
        'B',
        'C',
        'D',
        'E',
        'F',
        'G',
        'H',
        'I',
        'J',
        'K',
        'L',
        'M',
        'N',
        'O',
        'p'
    );
    //导入excel类
    require_once MAGENTO . '/lib/PHPExcel/PHPExcel.php';
    // 创建一个excel
    $objPHPExcel = new PHPExcel();

    /****************************************设置居中开始**************************************/
    foreach ($arr as $key => $value) {
        $objPHPExcel->getActiveSheet()->getStyle($value)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    }
    /****************************************设置居中结束**************************************/
    // 循环$arr定义的列设置每列内容居中
    $objPHPExcel->getProperties()->setCreator("Maarten Balliauw")->setLastModifiedBy("Maarten Balliauw")->setTitle("Office 2007 XLSX Test Document")->setSubject("Office 2007 XLSX Test Document")->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")->setKeywords("office 2007 openxml php")->setCategory("Test result file");

    /**************************************设置标题开始*****************************************/
    // 循环$arr定义的列和$result设置表头
    $objPHPExcel->setActiveSheetIndex(0);
    foreach ($arr as $key => $value) {
        $objPHPExcel->getActiveSheet()->setCellValue($value . "1", $result[$key]);
    }
    /**************************************设置标题结束*****************************************/

    /**************************************设置内容开始*****************************************/
    $objPHPExcel->setActiveSheetIndex(0);
    $i = 2;
    // $rearr需要导出的数据二维数组
    foreach ($rearr as $key => $value) {
        // 这里从二维数组里面通过键名获取到值放到相应的表格中
        $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $value['increment_id']);
        $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, date('Y-m-d H:i:s',strtotime($value['created_at']) - 7*3600));
        $objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $value['sku']);
        $objPHPExcel->getActiveSheet()->setCellValue('D' . $i, $value['name']);
        $objPHPExcel->getActiveSheet()->setCellValue('E' . $i, $value['qty_ordered']);
        $objPHPExcel->getActiveSheet()->setCellValue('F' . $i, $value['original_price']);
        $objPHPExcel->getActiveSheet()->setCellValue('G' . $i, $value['price']);
        $objPHPExcel->getActiveSheet()->setCellValue('H' . $i, $value['row_total']);
        $objPHPExcel->getActiveSheet()->setCellValue('I' . $i, $value['customer_email']);
        $objPHPExcel->getActiveSheet()->setCellValue('J' . $i, $value['BilltoName']);
        $objPHPExcel->getActiveSheet()->setCellValue('K' . $i, $value['ShiptoName']);
        $objPHPExcel->getActiveSheet()->setCellValue('L' . $i, $value['ShippingAddress']);
        $objPHPExcel->getActiveSheet()->setCellValue('M' . $i, $value['city']);
        $objPHPExcel->getActiveSheet()->setCellValue('N' . $i, $value['code']);
        $objPHPExcel->getActiveSheet()->setCellValue('O' . $i, $value['postcode']);
        $objPHPExcel->getActiveSheet()->setCellValue('P' . $i, $value['telephone']);
        $i++;
    }
    /**************************************设置内容结束*****************************************/

    /**************************************设置宽度开始*****************************************/
    // 循环$arr定义的列设置每列宽度
    foreach ($arr as $key => $value) {
        if($value == 'D'){
            $objPHPExcel->getActiveSheet()->getColumnDimension($value)->setWidth(70);
        }elseif($value == 'K'){
            $objPHPExcel->getActiveSheet()->getColumnDimension($value)->setWidth(50);
        }else{
            $objPHPExcel->getActiveSheet()->getColumnDimension($value)->setWidth(20);
        }

    }
    /**************************************设置宽度结束*****************************************/

    //导出的文件名
    $filename = 'orderItem-'.date('Y-m-d',time()).'.xls';
    /**************************************设置导出下载开始*****************************************/
    $objPHPExcel->getSheet(0)->setTitle('phpexcel'); // 工作区域标题
    header('Content-Type: application/vnd.ms-excel');
    header("Content-Disposition: attachment;filename=$filename");//导出文件
    header('Cache-Control: max-age=0');
    header('Cache-Control: max-age=1');
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
    header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
    header('Pragma: public'); // HTTP/1.0
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');//导出文件
    /**************************************设置导出下载结束*****************************************/
}


//导出
export($order_list);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值