无法将 CSV 分隔符更改为制表符

Cannot change CSV delimiter to tab

我将使用 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');
}

我想将分隔符从 , 更改为制表符(就像将数据写入下一列一样。但是它不起作用。字符串彼此粘在一起。输出是这样的:

Output

但我希望输出是这样的:

Expected Output

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

如@teeyo 所述,您可能需要确保使用 Excel(或其他电子表格编辑器)中的定界符导入它。 CI:

生成的数据可能已经正确

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

所以您需要制表符分隔的文本 (csv) 文件,或者您只想要 "normal" 外观 excel table?

您必须记住,excel 默认使用系统列表分隔符。在 windows 中,您可以在其他设置中的 区域和语言 中设置该分隔符。它在那里被称为列表分隔符。在某些国家/地区,默认值为“;”,在其他国家/地区,默认值为“,”。

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

更新

您可以使用这两个选项,但在 PHPExcel 中设置分隔符似乎更容易将导出设置导出到客户端 OS 中默认设置的分隔符, 而不是解释他们在打开文件时在 excel 中设置自定义分隔符。

$objWriter->setDelimiter(";");

$objWriter->setDelimiter(",");

更新 2

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

我把这个系统设置截图举例:

Mac OS

Windows