2012-10-09 58 views
0

我有一張大型表格,其中包含未知數量的列,我希望能夠通過下載鏈接將其導出到MS Excel。我之前完成了這個任務,沒有任何問題。但是,那是當我有一個已知的數字或列。我目前能夠成功發送數據到Excel文件。表格標題顯示在表格的頂部。問題在於數據。不是將數據放置在正確的列中,而是將其全部放在第一列中。這裏是我的代碼部分:在PHP中將動態表格導出到Excel

while($row = mysql_fetch_row($result))   
{ 
    // Loops through the results 
    for($i=0; $i < $num_cols; $i++) 
    { 
     // Prints out the data in a table cell 
     echo("<Td class='data'>$row[$i]</Td>"); 
     $FileRecord = Array($row[$i]); 
     $exportFile->Export_Record($FileRecord); 
    } 
} 

通常我做$FileRecord = Array($row[0], $row[1], ..., $row[n])和一切都很正常,但我不知道該怎麼辦,如果我不知道有多少列有。任何幫助將是偉大的!

我沒有使用任何庫。 $exportFile來自我正在使用的功能。它看起來像這樣:

class CSV_File { 
private $out=''; 
private $name=''; 
private $column_names=""; 
private $count = 0; 

//Creates the file name and the header columns 
function __Construct($buf, $names) { 
    $GLOBALS["name"] = $buf; 
    $GLOBALS["column_names"] = ($names."\n"); 
} 

public function Export_Record($array) { 
    if (!is_array($array)) 
     throw new Exception("NOT AN ARRAY"); 
    for ($i = 0; $i <= count($array); $i++) { 
     $GLOBALS["out"] .= $array[$i]; 

     if ($i < count($array)-1) { 
      $GLOBALS["out"] .= ","; 
     } 
    } 
    $GLOBALS["out"] .= "\n"; 
    $GLOBALS["out"]++; 
} 

public function ExportButton($align) { 
     $output = $GLOBALS["out"]; 
     $filename = $GLOBALS["name"]; 
     $columns = $GLOBALS["column_names"]; 
     if ($align == null) 
      $align = "align"; 
     echo(" <$align><form name=\"export\" action=\"export.php\" method=\"post\"> 
       <button type=\"submit\" style='border: 0; background: transparent; font-size: 12px;font-weight:bold;'> 
       <img src = 'images/icon_csv.png' width = '16' height ='16' alt ='Download Data'> Download</button> 
       <input type=\"hidden\" value=\"$columns\" name=\"csv_hdr\"> 
       <input type=\"hidden\" value=\"$filename\" name=\"fileprefix\"> 
       <input type=\"hidden\" value=\"$output\" name=\"csv_output\"> 
       </form></align>"); 
} 
} 

然後export.php看起來是這樣的:

if (isset($_POST['csv_hdr'])) 
{ 
$out .= $_POST['csv_hdr']; 
$out .= "\n"; 
} 

if (isset($_POST['csv_output'])) 
{ 
$out .= $_POST['csv_output']; 
} 

if (isset($_POST['fileprefix'])) 
{ 
$fname .= $_POST['fileprefix']; 
} 

//Now we're ready to create a file. This method generates a filename based on the current date & time. 
$filename = $fname."_".date("Y-m-d_H-i",time()); 

//Generate the CSV file header 
header("Content-type: application/vnd.ms-excel"); 
header("Content-disposition: csv" . date("Y-m-d") . ".csv"); 
header("Content-disposition: filename=".$filename.".csv"); 

//Print the contents of out to the generated file. 
print $out; 

//Exit the script 
exit;' 

回答

0

這不是一個Excel表格。這是一個html表格,你恰好在喂入Excel。

你的問題是你沒有爲你正在抓取的每個記錄開始一個新的表格行,所以一切都變成了第一行中的新單元格。

你需要像

while($row = mysql_fetch_assoc($result)) { 
    echo '<tr>'; 
    foreach($row as $val) { 
     echo "<td>$val</td>"; 
    } 
    echo '</tr>'; 
} 
+0

我其實有後 for循環。它正確顯示在頁面上,但不在Excel文件中。之後,我嘗試了$ FileRecord的東西,但它不起作用。 – user1504583