2017-05-23 119 views
0

我正在使用PHP_XLSXWriter代碼來生成XLSX文件。該文件正在生成罰款,並在Excel中打開罰款,但我用這個文件上傳到DHL服務器生成送貨單。問題是,他們的服務抱怨無效的行。該行中的數據實際上非常好,Excel可以像我之前提到的那樣讀取它。但是,作爲測試,我所做的是將PHP生成的電子表格保存爲單獨的文件,從而使Microsoft Excel保存爲自己的格式。當我將微軟工作表上傳到DHL服務器時,它接受了它,沒有任何問題。PHP XLSXWriter - 不同格式化

經過對兩者進行十六進制比較後,它們完全不同,這使我相信PHP生成的XLSX文件使用的是DHL尚未使用的OpenOffice或LibreOffice格式。

有沒有什麼辦法來解決這個問題? 我有一個想法,就是拋開PHP XLSXWriter的功能,並將數據保存爲帶有製表符分隔數據的原始文本文件(DHL也接受)。

這裏是在我的代碼的主要功能的一個簡單的例子:

$filename = "test.xlsx"; header('Access-Control-Allow-Origin: mysite.com'); header('Content-disposition: attachment; filename="'.XLSXWriter::sanitize_filename($filename).'"'); header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); header('Content-Transfer-Encoding: binary'); header('Cache-Control: must-revalidate'); header('Pragma: public');

$rows = array(
     array('Pick-up Account Number', 'Sales Channel', 'Shipment Order ID', 'Tracking Number', 'Shipping Service Code', 'Company',      'Consignee Name',            'Address Line 1',    'Address Line 2',    'Address Line 3',    'City',     'State',      'Postal Code',     'Destination Country Code',  'Phone Number',   'Email Address',  'Shipment Weight (g)', 'Length (cm)', 'Width (cm)', 'Height (cm)', 'Currency Code', 'Total Declared Value',  'Incoterm', 'Freight', 'Is Insured', 'Insurance', 'Is COD', 'Cash on Delivery Value', 'Recipient ID', 'Recipient ID Type', 'Duties', 'Taxes', 'Workshare Indicator', 'Shipment Description', 'Shipment Import Description', 'Shipment Export Description', 'Shipment Content Indicator', 'Content Description', 'Content Import Description', 'Content Export Description', 'Content Unit Price', 'Content Origin Country', 'Content Quantity', 'Content Weight (g)', 'Content Code', 'HS Code', 'Content Indicator', 'Remarks', 'Shipper Company', 'Shipper Name', 'Shipper Address1', 'Shipper Address2', 'Shipper Address3', 'Shipper City', 'Shipper State', 'Shipper Postal Code', 'Shipper CountryCode', 'Shipper Phone Number', 'Shipper Email address', 'Return Company', 'Return Name', 'Return Address Line 1', 'Return Address Line 2', 'Return Address Line 3', 'Return City', 'Return State', 'Return Postal Code', 'Return Destination Country Code', 'Return Phone Number', 'Return Email Address', 'Service1', 'Service2', 'Service3', 'Service4', 'Service5', 'Grouping Reference1', 'Grouping Reference2', 'Customer Reference 1', 'Customer Reference 2',),    
     array('123456789',    '',     $order_id,    '',     'PPS',      $order->shipping_company,  $order->shipping_first_name.' '.$order->shipping_last_name,  $order->shipping_address_1,  $order->shipping_address_2,  $order->shipping_address_3,  $order->shipping_city, $order->shipping_state,   $order->shipping_postcode,  $order->shipping_country,  $order->billing_phone, $order->billing_email, '160',     '18',   '13',   '6',   'AUD',    '70',      '',   '',   '',    '',    '',   '',       '',    '',      '',   '',   '',      'Printer Cartridge', '',        '',        '',        'Printer Cartridge', '',        '',        '70',     'AU',      '1',    '',      'TEST_2214', '',   '',      '',   '',     '',    '',     '',     '',     '',    '',     '',      '',      '',      '',       '',     '',    '',       '',       '',       '',    '',    '',      '',         '',      '',      '',   '',   '',   '',   '',   '',      '',      '',      '',),    
    ); 

    $writer = new XLSXWriter(); 
    $writer->setAuthor('TEST'); 

    foreach($rows as $row) 
    $writer->writeSheetRow('Sheet1', $row); 
    $writer->writeToStdOut();` 

作爲一個說明,該DHL服務器似乎抱怨含有「PPS」的行中的數據。

謝謝。

回答

0

通過寫標籤解決分隔文件:

header("Content-type: text/csv"); 
    header("Content-Disposition: attachment; filename=example.txt"); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 

    $rows = array(
    array('Pick-up Account Number', 'Sales Channel', 'Shipment Order ID', 'Tracking Number', 'Shipping Service Code', 'Company',      'Consignee Name',            'Address Line 1',    'Address Line 2',    'Address Line 3',    'City',     'State',      'Postal Code',     'Destination Country Code',  'Phone Number',   'Email Address',  'Shipment Weight (g)', 'Length (cm)', 'Width (cm)', 'Height (cm)', 'Currency Code', 'Total Declared Value',  'Incoterm', 'Freight', 'Is Insured', 'Insurance', 'Is COD', 'Cash on Delivery Value', 'Recipient ID', 'Recipient ID Type', 'Duties', 'Taxes', 'Workshare Indicator', 'Shipment Description', 'Shipment Import Description', 'Shipment Export Description', 'Shipment Content Indicator', 'Content Description', 'Content Import Description', 'Content Export Description', 'Content Unit Price', 'Content Origin Country', 'Content Quantity', 'Content Weight (g)', 'Content Code', 'HS Code', 'Content Indicator', 'Remarks', 'Shipper Company', 'Shipper Name', 'Shipper Address1', 'Shipper Address2', 'Shipper Address3', 'Shipper City', 'Shipper State', 'Shipper Postal Code', 'Shipper CountryCode', 'Shipper Phone Number', 'Shipper Email address', 'Return Company', 'Return Name', 'Return Address Line 1', 'Return Address Line 2', 'Return Address Line 3', 'Return City', 'Return State', 'Return Postal Code', 'Return Destination Country Code', 'Return Phone Number', 'Return Email Address', 'Service1', 'Service2', 'Service3', 'Service4', 'Service5', 'Grouping Reference1', 'Grouping Reference2', 'Customer Reference 1', 'Customer Reference 2',),    
    array('123456789',    '',     $order_id,    '',     'PPS',      $order->shipping_company,  $order->shipping_first_name.' '.$order->shipping_last_name,  $order->shipping_address_1,  $order->shipping_address_2,  $order->shipping_address_3,  $order->shipping_city, $order->shipping_state,   $order->shipping_postcode,  $order->shipping_country,  $order->billing_phone, $order->billing_email, '160',     '18',   '13',   '6',   'AUD',    '70',      '',   '',   '',    '',    '',   '',       '',    '',      '',   '',   '',      'Printer Cartridge', '',        '',        '',        'Printer Cartridge', '',        '',        '70',     'AU',      '1',    '',      'TEST_2214', '',   '',      '',   '',     '',    '',     '',     '',     '',    '',     '',      '',      '',      '',       '',     '',    '',       '',       '',       '',    '',    '',      '',         '',      '',      '',   '',   '',   '',   '',   '',      '',      '',      '',),    
); 

    foreach ($rows as $arr) 
    { 
     $row = implode("\t", $arr); 
     $row.="\n"; 
     echo $row; 
    } 

這生成了正確的數據和DHL接受它。謝謝。