【问题标题】:Export CSV file have many empty rows导出 CSV 文件有许多空行
【发布时间】:2014-12-09 19:38:14
【问题描述】:

我正在使用带有 MSSQL Server 2012 的 CakePHP 1.3 制作应用程序。我成功地从数据库中导出了 CSV 文件。

第一次,我没有问题。我继续在我的应用程序中制作一些其他功能。然后我再次尝试测试导出功能。

问题就出现了。问题出在我的 CSV 文件中,出现了很多空行。我检查了我的数据库,它没有空值,并且在我的控制器和 export.ctp 中也是如此。

我不知道为什么会出现问题,所以有人能意识到我的错误吗?

我的控制者:

function csv_export() {
    $this->set('title_for_layout','Export Words List');
    Configure::write('debug',0);
    $this->layout=false;
    $filename = 'Wordlist_'.date('YmdHis');
    $th=array('id','avoidance_word','avoidance_word_yomi','replace_word','replace_word_yomi','creator','create_time','updator','update_time','invalid_flg');
    $Th_name=array('ID','Avoidance Words','Avoidance Words Yomi','Replace Word','Replace Word Yomi','Creator','Create Time','Updator','Update Time','Invalid Flag');
    $td=$this->MAvoidanceWord->find('all', array('fields'=>$th));
    $this->set(compact('filename','Th_name','td'));
}

我的观点:

<?php
$csv->addRow($Th_name);
foreach ($td as $t){
    $csv->addRow();
    $csv->addField($t['MAvoidanceWord']['id']);
    $csv->addField($t['MAvoidanceWord']['avoidance_word']);
    $csv->addField($t['MAvoidanceWord']['avoidance_word_yomi']);
    $csv->addField($t['MAvoidanceWord']['replace_word']);
    $csv->addField($t['MAvoidanceWord']['replace_word_yomi']);
    $csv->addField($t['MAvoidanceWord']['creator']);
    $csv->addField($t['MAvoidanceWord']['create_time']);
    $csv->addField($t['MAvoidanceWord']['updator']);
    $csv->addField($t['MAvoidanceWord']['update_time']);
    $csv->addField($t['MAvoidanceWord']['invalid_flg']);
    $csv->endRow();}
    $csv->setFilename($filename);
    echo $csv->render(true,'UTF-8');
?>

还有我的 CSV 文件:

更新:我的 CSV 文件使用 Notepad++ 打开

【问题讨论】:

  • 当您使用 Notepad++ 或其他文本编辑器打开 CSV 文件时,您会看到什么?
  • @SurgeonofDeath 是一样的
  • 你试过我的答案了吗?我有同样的问题

标签: php sql-server cakephp csv cakephp-1.3


【解决方案1】:

可能问题不在此代码中。
检查两次,您没有任何换行符在任何地方回显。
可能是这样的:

  <?php
     //php code
    ?>
    ↓
    ↓
    ↓

&lt;?php ?&gt; 块之外的所有内容都等同于 echo "...";
因此,这些换行符打印为 echo "\n\n\n\n";

好的做法是完全删除最后一个?&gt;

【讨论】:

    【解决方案2】:

    从 foreach 中删除 addRow

    foreach ($td as $t){
        // $csv->addRow();
        $csv->addField($t['MAvoidanceWord']['id']); 
        ...
    

    您现在可以使用addRow(array)addField(多次)和endRow The fact that you haveaddRow`,这意味着它正在多次添加空行。

    第二种方法:尝试在$csv-&gt;addRow($Th_name);之前添加ob_clean();

    【讨论】:

    • @comelb:我做到了,但没有任何改变。仍然插入了空行@@
    • 我更新了我的答案。请也尝试 ob_clean()。其他文件似乎有一些输出
    猜你喜欢
    • 2023-01-20
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 2021-08-29
    • 2018-08-21
    • 2020-06-13
    相关资源
    最近更新 更多