导出为CSV文件时,分号会拆分字段吗?

时间:2014-07-04 16:55:53

标签: php csv openoffice.org openoffice-calc

我以csv格式从我的magento网站导出评论。评论包含:,;,?,!等。通常评论都在字段中。如果评论包含;,则会将其拆分为下一个字段。 (我使用OpenOffice电子表格打开了csv文件)

例如:

Review -> It's nice to use; looks good.

现在输出 - >

Field A-> It's nice to use
Field B->  looks good

预期产出

Field A ->It's nice to use; looks good

我使用以下标题导出为php

中的acsv文件
header('Content-type: application/utf-8');  
header('Content-disposition: attachment; filename="file.csv"');

如何获得预期的输出?

2 个答案:

答案 0 :(得分:0)

我正在使用我用于将数据导出为CSV电子表格的类。诀窍是fputcsv(),它应该正确格式化。然后,当然,你必须正确地将它导入OpenOffice(或现在的LibreOffice),但这是不同的故事。

也许它会帮助你。

<?php

class Spreadsheet {

    private $grid = array();

    /**
     * Set cell value at position X, Y
     */
    public function setCell($x, $y, $value) {
        for($yy=0; $yy<=$y; $yy++) {
            if(!isset($this->grid[$yy])) {
                $this->grid[$yy] = array();
            }
        }

        for($xx=0; $xx<=$x; $xx++) {
            if(!isset($this->grid[$y][$xx])) {
                $this->grid[$y][$xx] = null;
            }
        }

        $this->grid[$y][$x] = $value;
    }

    /**
     * final command executed, including "exit".
     * Sends CSV to browser.
     */
    public function sendAsCsv(/*string*/ $filename) {
        header('Content-type: text/csv; charset=utf-8');
        header('Content-Language: cs');
        header('Content-Disposition: attachment; filename="' . $filename . '"');
        header("Pragma: no-cache");
        header("Expires: 0");

        ob_end_clean();

        $outputBuffer = fopen("php://output", 'w');

        $this->appendToFile($outputBuffer);

        fclose($outputBuffer);
        exit;
    }

    /**
     * Appends content to a file (rarely used outside this class)
     */
    public function appendToFile(/*resource*/ $fileHandle) {
        foreach($this->grid as $val) {
            fputcsv($fileHandle, $val);
        }
    }
}

答案 1 :(得分:0)

我建议从另一方面解决问题 - 我认为这是Magento争论的焦点,因为有些用户想要分号。

我建议你看看你使用openoffice的方式 - 已经有一段时间但是我相信在加载csv期间有一个选项叫做“Separator options” - 改变这些选项并且一切都应该运行良好。

令人遗憾的是,如果这是正确的答案,那就是主题:-(但我希望这可以帮助你实现目标!

谢谢, // P