2013-03-07 7 views
0

PHP의 fputcsv 함수를 사용하여 CSV 파일로 배열을 내보내려고합니다. |PHP CSV 파일로 내보내기 Excel 2007 및 2010에서 다른 동작

AAA : 나는 Excel 2007에서 파일을 여는 두 개의 완전히 다른 행동과 Excel 2007에서 2010

를 얻을 그러나 나는 모든 필드는이 같은 자신의 별도의 컬럼에 있기 때문에 내가 원하는 것을 얻을 수 BBB | ccc | dddd

123 | 456 | 789

"aaa"| "bbb"|

그러나 엑셀 2010의 모든 필드는이 같은 동일한 열에있는

:

AAA, BBB, CCC는
123,456,789
"AAA", "" "BBB" ""

DDDD Excel 2007과 2010 모두에서 Excel 2007 동작을 어떻게 얻을 수 있습니까? ("응용 프로그램/vnd.ms-엑셀의 Content-Type;");

 $filename = "test.csv"; 
    //header("Content-Type: application/vnd.ms-excel;"); 
    header('Content-Type: text/csv'); 
    header('Content-Disposition: attachment; filename="' . $filename . '"'); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 
    $list = array (
     array('aaa', 'bbb', 'ccc', 'dddd'), 
     array('123', '456', '789'), 
     array('"aaa"', '"bbb"') 
    ); 
    $fp = fopen("php://output", 'w'); 
    foreach ($list as $fields) { 
     fputcsv($fp, $fields); 
    } 
    fclose($fp); 

내가 헤더를 사용하여 시도했다 :

나는 다음과 같은 스크립트를 사용 또는 헤더 ('Content-Type : text/csv'); 하지만 나는 똑같은 행동을한다. : S

미리 감사드립니다.

편집 : 방금 PHPExcel을 사용하여 종료했습니다. 훌륭한 도서관입니다 !!

+0

상태 구분 기호 fputcsv ($ fp, $ fields, ","); – zkanoca

+0

방금 ​​fputcsv ($ fp, $ fields, ","); 행을 변경했습니다. 하지만 행동은 똑같아.무엇이 잘못되었는지에 대한 아이디어가 있습니까? – SnitramSD

+0

어쩌면 마이크로 소프트 자체! 누가 알아? – zkanoca

답변

1

excel에서 구분 기호를 변경하는 설정이 있는데 ','문자로 설정하면됩니다.

이 읽기 ​​: http://office.microsoft.com/en-gb/excel-help/import-or-export-text-txt-or-csv-files-HP010099725.aspx#BMimport_data_from_a_text_file_by_openi

+0

방금 ​​fputcsv ($ fp, $ fields, ","); 행을 변경했습니다. 그러나 행동은 동일합니다. 무엇이 잘못되었는지에 대한 아이디어가 있습니까? – SnitramSD

+0

내가 링크 된 기사를 읽었습니까? CSV 파일이 제대로 생성됩니다 (한 버전의 Excel에서 열리기 때문에). 엑셀 2010에서 여는 옵션을 변경해야합니다. – Husman

+0

예, 해당 문서를 읽었지만 어떤 옵션인지 이해하지 못하고 있습니까? – SnitramSD

1

이것은 PHP의 잘못이 아닙니다; 그것은 CSV를 가져올 때 쓰레기가되는 Excel의 잘못입니다.

Excel의 CSV 처리에는 더 많은 버그가 있습니다 (또는 더 정확하게는 CSV 파일의 아이콘을 두 번 클릭하여 Excel에서 열 때의 기본 CSV 처리).

일반적인 문제 중 하나는 UTF-8 : UTF-8로 인코딩 된 CSV 파일의 Excel 초크입니다. 인코딩을 확인하십시오. 파일을 UTF-8로 저장하는 경우 가능한 경우 표준 ASCII로 전환하십시오.

설명 된 문제를 일으킬 수있는 또 다른 문제는 Excel에 쉼표를 소수 구분 기호로 사용하는 로캘 설정이있는 경우입니다. 이렇게하면 필드 값의 일부로 쉼표가 표시되므로 Excel에서 CSV 파일을 읽을 수 없습니다.

거의 모든 문제는 파일 아이콘을 두 번 클릭하지 않고 Excel 내에서 파일을 열면 해결할 수 있습니다. 이 방법으로 CSV 파일을 열면 Excel에서 파일 가져 오기 마법사를 통해 안내하므로 파일 형식을 지정하여 Excel에서 올바르게 열 수 있습니다. 이상적은 아니지만 일부 CSV 파일의 경우 상당히 표준적인 것처럼 보이지만 (PHP로 작성되었는지 여부에 관계없이) 유일한 옵션입니다.

희망이 있습니다.