2017-09-25 68 views
0

我将使用带有CSV格式的PHPExcel将mySQL中的所有数据导出。这里是我的代码:无法将CSV分隔符更改为选项卡

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表格,但带有.csv格式。

+0

如果使用双引号的外壳会发生什么,像'setEnclosure( “”);'? – hannebaumsaway

+2

你使用Excel吗?我的意思是你应该用记事本或其他软件查看CSV,看看它是否可行,如果你使用的是Excel,你需要告诉它你正在使用哪个分隔符! – teeyo

回答

1

所以你需要制表符分隔文本(CSV)文件,或者你只是想“正常” -looking excel表格?

您必须记住,缺省情况下在Excel中有一个系统列表分隔符。在Windows中,您可以在其他设置中的区域和语言中设置该分隔符。它在那里被称为列表分隔符。在一些国家,默认值是“;”,在其他国家是“,”。

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

更新

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

$ objWriter-> setDelimiter(“;”);

$ objWriter-> setDelimiter( “”);

更新2

如果您有来自不同国家的客户和/或他们使用不同的操作系统(MAC/Linux操作系统,窗口),所以他们可能有不同的系统分隔符,那么你需要保存每个文件的两个版本(包括和;分隔符)。或者你需要向他们解释如何使用它。

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

Mac OS

Windows

+0

我想要一个“正常”的CSV格式excel表格。由PHPExcel自动生成 –

+0

我了解你的情况。请阅读更新的答案, – user268500

+0

它的工作原理!谢谢 –

0

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

enter image description here

为了验证数据是文件本身是正确的,你可以如打开它。记事本+ +和使用显示所有字符的特点:

enter image description here

+0

此模块将由我的非IT专家的客户使用。因此,我必须自动生成选项卡,而无需在电子表格编辑器(Excel)中配置设置 –

+0

@WilliamsPerdana请参阅我的编辑。您可以使用该方法来验证文件中是否存在选项卡。但是,从个人经验来看,除非以原生Excel格式(而非* .csv)保存文件,否则您将不得不教导最终用户使用导入配置打开它。我不认为Excel具有自动检测CSV文件中分隔符的功能。 –

相关问题