无法将 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
我将使用 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