无法将CSV分隔符更改为选项卡

时间:2017-09-25 13:40:08

标签: codeigniter phpexcel

我将使用带有CSV格式的PHPExcel导出mySQL中的所有数据。这是我的代码:

function exportHartatoCSV() {
    $memberid = $this->input->post('memberid');
    $tahun = $this->input->post('tahunpajak');

    $this->db->where('taxYear', $tahun);
    $this->db->where('memberID', $memberid);
    $query = $this->db->get('list_harta');

    $this->load->library("excel");

    $objPHPExcel = new PHPExcel();

    $objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue('A1', 'Tahun Pajak')
                ->setCellValue('B1', 'Pembetulan')
                ->setCellValue('C1', 'Kode Harta')
                ->setCellValue('D1', 'Jenis Harta')
                ->setCellValue('E1', 'Tahun Perolehan')
                ->setCellValue('F1', 'Harga Perolehan')
                ->setCellValue('G1', 'Keterangan');

    $row = 2;

    $workbookName = $this->MemberModel->getNPWP($memberid);

    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="'.$workbookName.'.csv"');
    header('Cache-Control: max-age=0');

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');

    $objWriter->setDelimiter("\t");
    $objWriter->setEnclosure('');

    $total = 0;

    foreach ($query->result() as $key) {
        $objPHPExcel->getActiveSheet()->setCellValue('A'.$row, $key->taxYear);
        $objPHPExcel->getActiveSheet()->setCellValue('B'.$row, $key->pembetulan);
        $objPHPExcel->getActiveSheet()->setCellValue('C'.$row, $key->hartaID);
        $objPHPExcel->getActiveSheet()->setCellValue('D'.$row, $key->hartaName);
        $objPHPExcel->getActiveSheet()->setCellValue('E'.$row, $key->hartaYear);
        $objPHPExcel->getActiveSheet()->setCellValue('F'.$row, $key->hartaPrice);
        $objPHPExcel->getActiveSheet()->setCellValue('G'.$row, $key->hartaDesc);
        $total += $key->hartaPrice;
        $row++;
    }

    $objPHPExcel->getActiveSheet()->setCellValue('E'.$row, "Total Harta:");
    $objPHPExcel->getActiveSheet()->setCellValue('F'.$row, $total);

    $objWriter->save('php://output');
}

我想将分隔符从,更改为制表符(就像将数据写入下一列。但它不起作用。字符串相互粘连。输出如下:< / p>

Output

但我希望输出是这样的:

Expected Output

我真正想要的是一个看起来很正常的excel表,但是使用.csv格式。

2 个答案:

答案 0 :(得分:1)

所以你需要制表符分隔文本(csv)文件,或者你只需​​要&#34;普通&#34; - 看excel表?

您必须记住默认情况下在Excel中使用系统列表分隔符。在Windows中,您可以在其他设置中的区域和语言中设置分隔符。它在那里被称为List分隔符。在某些国家/地区,默认值为&#34 ;;&#34;,在其他国家&#34;,&#34;。

如果您不想更改默认分隔符,则可以选择在打开文件时在Excel中选择分隔符。

<强>更新

您可以使用这两个选项,但看起来更容易将PHPExcel导出设置中的分隔符设置为默认情况下在客户端操作系统中设置的分隔符,而不是解释它们以设置自定义打开文件时excel中的分隔符。

  

$ objWriter-&GT; setDelimiter(&#34 ;;&#34);

  

$ objWriter-&GT; setDelimiter(&#34;&#34);

更新2

如果您有来自不同国家/地区的客户和/或他们使用不同的操作系统(mac / linux,windows),那么他们可能有不同的系统分隔符,那么您需要保存每个文件的2个版本(两者,和;分隔符)。或者您需要向他们解释如何使用它。

我将此系统设置屏幕截图仅作为示例:

Mac OS

Windows

答案 1 :(得分:0)

正如@teeyo所提到的,您可能需要确保使用Excel(或其他电子表格编辑器)中的分隔符导入它。在CI生成的数据中可能已经是正确的:

enter image description here

要验证文件本身的数据是否正确,您可以在例如中打开它。 Notepad ++并使用“显示所有字符”功能:

enter image description here