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

Posted

技术标签:

【中文标题】导出为 CSV 文件时分号拆分字段?【英文标题】:Semicolon splits fields when export as a CSV file? 【发布时间】:2014-07-04 16:55:52 【问题描述】:

我从我的 magento 网站以 csv 格式导出了评论。评论包含:,;,?,! 等。通常评论在字段中很好。当评论包含 ; 时,它会被拆分到下一个字段。 (我使用 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"');

我怎样才能得到我的预期输出?

【问题讨论】:

这与 PHP 无关,与如何让 Openoffice 导入该文件有关。如果 OO 将 ; 视为分隔符,那么这不是 PHP 的错。你告诉 PHP 使用;。如果 ; 自然地在您的文本中,并且您将其用作 CSV 分隔符,那么这又是您的错。 CSV 是最后的导出格式,因为在 CSV 中封装/转义文本没有通用标准。有些引擎可能喜欢\;,有些引擎可能想要;; iirc 有一些方法可以转义分号/任何分隔符,但实际上,只需使用其他东西作为分隔符。 \t 也许。 另外,如果你把你的字符串放在“引号”中,它没有帮助吗? @MightyPork 是的,即使我遇到了这个问题,我也使用过引号! 这完全取决于您在 CSV 导入对话框中选择的内容。这真的是一种丑陋的格式,我在使用它时也遇到了问题。 【参考方案1】:

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

我建议查看您使用 openoffice 的方式 - 已经有一段时间了,但我相信在加载 csv 期间有一个名为“分隔符选项”的选项 - 更改这些,一切都会正常工作。

可悲的是,如果这是正确的答案,那就离题了 :-( 但我希望这可以帮助您实现目标!

谢谢, //P

【讨论】:

是的!你说的对。我可以看到分隔符选项。【参考方案2】:

我正在使用我制作的这个类将数据导出为 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);
        
    

【讨论】:

当然我不知道 Magento 是什么,但我相信你可以让它与这个类一起工作。只需填写单元格,然后导出。

以上是关于导出为 CSV 文件时分号拆分字段?的主要内容,如果未能解决你的问题,请参考以下文章

mysql 导入导出csv文件

mysql 导入导出csv文件

mysql 导入导出csv文件

mysql 导入导出csv文件

在 rsreportserver.config 文件中,如何将 CSV 导出设置为无字段分隔符

使用 pyspark 从 CSV 文件中拆分字段