2011-07-08 18 views
1

我需要一種通過Pure PHP編寫格式的excel文件的方法。 警告:請不要關注庫,插件等,請勿打擾。 我google了很多,並沒有找到答案,但在一些關於StackOverflow的文章中,一些人提到了HTML/CSS格式的方式 HTML format solutions that didn't work 我試過這樣做,但在保存列的文件那裏充滿了標籤,什麼也沒有發生。 可能有一些專業人員可以幫助我通過PHP,HTML,CSS或其他方式編寫Excel的純代碼。如何用純PHP格式化excel文件的樣式,字體,顏色,表格等?

並再次舉例來說,我已經使用這樣的概念至極沒有幫助:

// headers for excel 
$headers .= "<div style='font:bold 14px Times;'>Журнал остатков и инкассаций</div>\n"; 
$headers .= "Начало периода\t ".date('d.m.Y')."0:00 \n"; 
$headers .= "Начало периода\t ".date('d.m.Y')."23:59 \n\n"; 

$headers .= "Терминал\t"; 
$headers .= "Место расположения\t"; 
$headers .= "Дата\t"; 
$headers .= "Время\t"; 
$headers .= "Сумма инкассации\t"; 
$headers .= "Банкноты\t"; 

// excel content with overloaded terminals 
if (mssql_num_rows($resCollection)>0) { 
    while ($rowCollection = mssql_fetch_object($resCollection)) { 

    $data .= $rowCollection->Name."\t".$rowCollection->Address."\t" 
      .$rowCollection->TerminalNotes."\t".$rowCollection->TerminalAmount 
      ."\t".$rowCollection->DayAmountAll."\t" 
      .$rowCollection->LastPaymentTime."\n"; 

    } 
} 

$fileName = 'collection'.date('d_m_Y_H_i_s').'.xls'; 


header("Content-type: application/vnd.ms-excel");// application/excel had also been used 
header("Content-Disposition: attachment; filename=$fileName"); 
echo iconv('utf-8', 'cp1251', "$headers\n$data"); 

我不僅用的div和表格太 - 它沒有工作,雖然。

回答

8

下面的例子也許會幫助你:

1 <?php 
    2 header('Content-type: application/excel');         
    3 header('Content-Disposition: attachment; filename="test.xls"'); 
    4 ?> 
    5 
    6 <table> 
    7 <tr><th>Column 1</th><th>Column 2</th></tr> 
    8 <tr><td style="font-size:200%">Answer 1</td><td style="color:#f00">Answer 2< /td></tr> 
    9 <tr><td colspan="2" style="font-weight:bold">Answer 3 with 2 columns</td></t r> 
10 </table> 

保存此爲您的服務器上的PHP文件。

它的作用是:添加標題以強制瀏覽器提供一個Excel文件。然後在其中返回一個表格。我的Excel完美地詮釋了這一點。

注意:示例HTML來自您已經找到的答案。我剛剛將標題添加到開頭。

注意:您剛剛更改了您的問題並添加了一個示例。你的例子不使用HTML!您正在提供TAB分隔文件,其中每行以換行符結尾。

正確的方式做,這就是真正生成HTML,即使用<table>開頭,使用<tr></tr>的每一行,並把字段<td>標籤,然後關閉</table>完成,所以基本上是:

$data='<table>'; 
// excel content with overloaded terminals 
if (mssql_num_rows($resCollection)>0) { 
    while ($rowCollection = mssql_fetch_object($resCollection)) { 
    $data.='<tr>'; 
    $data .= '<td>'.$rowCollection->Name."</td><td>".$rowCollection->Address."</td><td>" 
      .$rowCollection->TerminalNotes."</td><td>".$rowCollection->TerminalAmount 
      ."</td><td>".$rowCollection->DayAmountAll."</td><td>" 
      .$rowCollection->LastPaymentTime."</td>"; 
    $data.='</tr>'; 

    } 
} 
$data.='</table>'; 

然後改變你的最後一行:

echo iconv('utf-8', 'cp1251', "$data"); 

如果這樣的作品,我建議你改變輸出有<th>標籤圍繞您的表格標題,而不是您示例中的div。

+0

現在只需要您查詢數據庫並動態生成表格數據。 – Eljakim

+0

這種類型的東西以前爲我工作 - 它比試圖編寫本機XLS文件更加簡單。唯一的問題是,非Excel電子表格應用程序(即Numbers.app,OpenOffice等)可能無法正確讀取文件。 – Stephen

+0

所以,對我來說 - 這個問題是公開的,它不能正常工作。 –

相關問題