PHP导出到CVS,但发生的事情,使CSS完全无法使用

我每天通过自定义的phpscript出口昨天(Magento)的销售。

由于我们有直接银行服务,所以我不得不改变一下代码。 我们的想法是在CC_Type(Visa,JBC,…)中设置“直接”的值,以便我们的分析有良好的数据。

csv看起来实际上是干净的,当我用excel或mssql手动导入(在那里你自定义导入),它的工作原理如下。 但是当我让它自己打开(就像我们的系统会在晚上导入数据一样)奇怪的事情发生。

excel的截图与打开的文件

  • 在数据/function栏(fx)中,您可以看到光标在D上,如果我插入更多字母,它们将在onlineshop后面的p后面显示。
  • 头文件(第一行)和每个后面的数据库都会被导入而不用“” ,我知道excel有时会这样做,但是它从来没有用过这个文件。 那么这是一个谎言,我从来没有支付attation,如果是这样或者没有,因为它只是工作。

//

class Mage_Shell_Compiler extends Mage_Shell_Abstract { const OUTPUT = false; const DEL = "\t"; const BR = "\r\n"; const FILEPATH = '../var/export/'; const FILENAME = 'tdtaCash'; protected $_orders = array(); protected $_csv_output = ''; protected $_headers = array( "dtTag" => false, // Bestelldatum "fiCBox" => 94, "fiCashier" => "onlineshop", "fiCurrency" => array('Visa', 'MC', 'Amex', 'DC', 'JCB', 'Direct'), // Zahlungsart "dtRev" => false // Bruttoumsatz an diesem Tag mit dieser Zahlungsart ); /// @see $_headers for details protected function addOrderToRows($order, $rows) { $order_data = $order->getOrigData(); $type = $order->getPayment()->getAdditionalInformation('CC_BRAND'); switch ($type) { case 'VISA': $type = 'Visa'; break; case 'MasterCard': $type = 'MC'; break; case 'American Express': $type = 'Amex'; break; case 'Diners Club': $type = 'DC'; break; case 'JCB': $type = 'JCB'; break; default: $brand = $order->getPayment()->getAdditionalInformation('BRAND'); if ($brand == 'DirectEbankingAT') { $type = 'Direct'; } break; } if (empty($rows[$type])) { $row = $this->_headers; $row["dtRev"] = 0; } else $row = $rows[$type]; //$row['dtTag'] = date('Ym-d', strtotime($order_data['created_at'])); $row['dtTag'] = $this->formatDate($order_data['created_at'], 'exportdate', true); $row["fiCurrency"] = $type; $row["dtRev"] += $order_data['grand_total']; $rows[$type] = $row; return $rows; } protected function __($msg) { if (self::OUTPUT) print $msg . "\n"; } /** * Get Orders instance * * @return Mage_Sales_Model_Order */ protected function _getOrders($day = 1) { $timeZoneOffset = Mage::getModel('core/date')->getGmtOffset(); $yesterday = date('Ym-d', strtotime("-$day day")) . ' 00:00:00'; $yesterday = date('Ymd H:i:s', strtotime($yesterday) - $timeZoneOffset); $day--; $today = date('Ym-d', strtotime("-$day day")) . ' 00:00:00'; $today = date('Ymd H:i:s', strtotime($today) - $timeZoneOffset); if (!$this->_orders) $this->_orders = Mage::getResourceModel('sales/order_collection') ->addAttributeToSelect('*') /// @note uncommented to remove daily filter ->addAttributeToFilter('created_at', array("from" => $yesterday, "to" => $today)) ->addAttributeToFilter('status', array('nin' => array('holded', 'canceled', 'pending_payment', 'pending'))); return $this->_orders; } protected function addRowToOutput($row) { if (isset($row["dtRev"])) $row["dtRev"] = number_format($row["dtRev"], 2); $this->_csv_output .= '"' . implode('"' . self::DEL . '"', $row) . '"' . self::BR; } protected function addCsvHeader() { $this->addRowToOutput(array_keys($this->_headers)); } /** * Run script * */ public function run() { if ($this->getArg('export')) { $day = is_numeric($this->getArg('day')) ? $this->getArg('day') : 1; $file = self::FILEPATH . self::FILENAME . '.csv'; $this->__('orders to export ' . count($this->_getOrders($day))); // add header if file is empty if (!strlen(trim(file_get_contents(dirname(__FILE__) . '/' . $file)))) $this->addCsvHeader(); $rows = array(); foreach ($this->_getOrders($day) as $order) $rows = $this->addOrderToRows($order, $rows); while ($row = array_shift($rows)) $this->addRowToOutput($row); file_put_contents(dirname(__FILE__) . '/' . $file, $this->_csv_output, FILE_APPEND); $this->__($this->_csv_output); } else { echo $this->usageHelp(); } } /** * Retrieve Usage Help Message * */ public function usageHelp() { return <<<USAGE Usage: php -f export_tdtaCash.php -- [options] export ... Appends data to file tdtaCash.csv in Directory var/export/ day ... days to count back help ... This help USAGE; } } $shell = new Mage_Shell_Compiler(); $shell->run(); 

所以我的问题是,可能有人可以解释一下这种效应是什么样的源头,我可以做什么预防性的不再获得这样的结果?

编辑:这里是记事本+ +中的CSV操作的屏幕截图 Notepad ++中opend CSV的截图

将文件分辨率从CSV更改为TXT并使用Import file ,将TAB符指定为分隔符,您就可以了!

这不是一个C SV,它是一个T SV,一个制表符分隔的值文件。
Excel不会知道,除非你告诉它并曲解数据。