1. 程式人生 > >Magento使用phpexcel匯出 商品訂單 /訂單條目表sales_flat_order_item

Magento使用phpexcel匯出 商品訂單 /訂單條目表sales_flat_order_item

<?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);