2017-09-25 65 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文件中分隔符的功能。 –

相關問題