2014-04-29 4 views
5

CSV 파일 만들기 및 첫 번째 행에서 어떻게 열 이름을 가져올 수 있는지 궁금합니다. 지금은 Column 이름을 반향하려고 시도하지만 0'null을 얻으려고한다고 생각합니다. 또한 각 셀에 각 값을 넣을 수 있는지 궁금합니다. 수동으로 Excel에서 수행 할 수 있지만 번거로울 수 있습니다.CSV 파일에 열 이름 가져 오기

$result=sqlsrv_query($conn,$sql) or die("Couldn't execute query:<br>" . sqlsrv_error(). "<br>" . sqlsrv_errno()); 

$file_ending = "csv"; 
$reals=array(); 
//header info for browser 
header("Content-Type: application/csv");  
header("Content-Disposition: attachment; filename=test.csv"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
/*******Start of Formatting for Excel*******/ 
//define separator (defines columns in excel & tabs in word) 
$sep = "\t"; //tabbed character 

$i=0; 
foreach(sqlsrv_field_metadata($result) as $fieldMetadata) {  
     echo $fieldMetadata["Name"]+"\t"; 
     if($fieldMetadata["Type"]=="real")//$fieldMetadata["Type"]=== SQL_REAL 
     { 
      $reals[] = $i; 
     } 
     $i++; 
} 


print("\n");  
//end of printing column names 
//start while loop to get data 
while($row = sqlsrv_fetch_array($result)) 
{ 

    $schema_insert = ""; 
    for($j = 0; $j < sqlsrv_num_fields($result); $j++) 
    { 
     if ($row[$j] != "") { 
     if (in_array($j, $reals)) { 
      $schema_insert .= str_replace(".",",", $row[$j]) . $sep; 
     } else { 
      $schema_insert .= $row[$j] . $sep; 
     } 
     } 
     else 
     $schema_insert .= "" . $sep; 
    } 

    $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert); 
    $schema_insert .= "\t"; 
    print(trim($schema_insert)); 
    print "\n"; 
} 
+1

sql; CSV 파일에는 데이터가 있지만 필드 이름은 없다고 생각합니다. csv 파일에서 첫 번째 행 (필드 이름)을 가져올 수 있습니까? – fanfan1609

+2

필드 이름을 가져 오는 방법을 잘 모르겠지만 첫 번째 필드에 NULL이 나타납니다. 이유도 모르겠다. – user3580316

답변

3

이 작품은 다음과 같습니다

enter image description here

코드인가? sqlsrv_fetch_array는 필드 이름을 키로하는 연관 배열을 반환하므로 첫 번째 행으로 입력 할 수 있습니다.

$result=sqlsrv_query($conn,$sql) or die("Couldn't execute query:<br>" . sqlsrv_error(). "<br>" . sqlsrv_errno()); 

$file_ending = "csv"; 
$reals=array(); 
//header info for browser 
header("Content-Type: application/csv");  
header("Content-Disposition: attachment; filename=test.csv"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
/*******Start of Formatting for Excel*******/ 
//define separator (defines columns in excel & tabs in word) 
$sep = "\t"; //tabbed character 

$firstRow = true; 


//start while loop to get data 
while($row = sqlsrv_fetch_array($result)) 
{ 
    if($firstRow) 
    { 
    $names = array_keys($row); 
    $namesToPrint = ''; 

    foreach($names as $idx => $name) 
    { 
     if($idx % 2 != 0) 
     { 
      $namesToPrint .= $name.','; 
     } 
    } 

    $namesToPrint = substr($namesToPrint, 0, -1); 

    print $namesToPrint."\n"; 

    $firstRow = false; 
    } 

    $schema_insert = ""; 
    for($j = 0; $j < sqlsrv_num_fields($result); $j++) 
    { 
     if ($row[$j] != "") { 
     if (in_array($j, $reals)) { 
      $schema_insert .= str_replace(".",",", $row[$j]) . $sep; 
     } else { 
      $schema_insert .= $row[$j] . $sep; 
     } 
     } 
     else 
     $schema_insert .= "" . $sep; 
    } 

    $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert); 
    $schema_insert .= "\t"; 
    print(trim($schema_insert)); 
    print "\n"; 
} 
+0

고마워요! 그게 효과가 있었어. 하지만 지금은 이름이있는 숫자가 나타납니다. 어떻게 제거하고 이름 만 표시 할 수 있습니까? https://www.dropbox.com/s/4azrphiekb4vsdz/verdi.png – user3580316

+0

숫자 인덱스도 제거하도록 코드를 업데이트했습니다.) – MyWetSocks

+0

또한 분리 기호로 쉼표를 사용했으며 탭을 사용하고 있다고 생각합니다. 그것은 수정하기가 너무 어렵지 않아야한다;) – MyWetSocks