2010-06-28 201 views
19

我目前正試圖找出從PHP創建.xls文件的最佳方式。在我看來,我所需要做的就是將標題內容類型更改爲「application/vnd.ms-excel」,然後以逗號分隔的格式輸出數據。這是做這件事的最好方法嗎?什麼是在PHP中創建XLS文件的最佳方式

感謝您的幫助!
都市報

編輯

難道是壞的,只是將數據輸出爲HTML?我已經有了一個我想延長解決這個問題的課程,所以我寧願遠離第三方解決方案。我只需要知道輸出數據的最佳方式是爲了充分利用該文件格式。

看過PHPExcel後,它似乎是解決此問題的最佳解決方案。我非常感謝你的答案,如果我可以大聲喧譁,我會給出三個正確的答案。但上漲將不得不做:)

+1

將頭文件內容類型更改爲「application/vnd.ms-excel」,然後使用HTML,TAB或CSV格式的文本內容寫入XLS文件時,將可以正常工作。然而,這是一種技巧,因爲MS Excel將能夠打開文件,即使它不是真正的二進制XLS文件,但是您將無法使用任何Excel功能(如多張工作表)。我使用的一種方法是MS Excel應用程序本身,請參閱[這裏](http://php.net/manual/en/class.dotnet.php)。我使用的另一種方法是[這一個](http://www.gemboxsoftware.com/support-center/kb/articles/44-how-to-use-gembox-spreadsheet-in-php)。 – 2016-02-18 10:54:35

回答

13

取決於您是否需要CSV文件或XLS文件。 XLS文件可以包含單元格的格式化信息,以及行/列鎖定,保護和CSV文件中不可能實現的其他功能。另外,請記住,Excel在打開CSV文件時不能正確支持UTF-8編碼的內容。

如果你想有一個格式化的XLS文件,那麼你就需要爲PhpSpreadsheet這樣的庫,可以編寫與格式文件,或COM如果你的服務器運行在Windows上使用Excel安裝

0

是的,這是一種可能的方式 - 如果你需要一個簡單的CSV文件,將在Excel中打開女士。

如果您需要一個豐富的XLS文件,有許多選項,包括使用第三方DLL,如'CarlosAg.ExcelXmlWriter.dll'來創建XLS文件。您可以在網上搜索使用此dll的示例或Look here

3

你可以使用Microsoft Office瞭解的XML formats之一。

有關詳細信息/規格,請參閱微軟的OpenXML Developer網站。

有一個圖書館叫PHPExcel,你可以看看,以幫助你做到這一點。

當然,這一切都取決於你的意思是:

「充分利用該文件格式的」

如果你只是有沒有格式,CSV文件簡單的表格可能是你需要的一切;然而,如果你想使用電子表格的更多功能,我建議看看OpenXML。

2

您可以輸出html和較新版本的Excel將它讀取。我不知道你能用它做多少格式化。

如果您需要數據輸入,豐富的格式或公式,我已成功使用PHPExcel

我的首選項是寫出CSV文件。 CSV是一種非常容易編寫的格式,可以輕鬆轉換現有的html表格腳本。它還具有可被各種非微軟電子表格程序讀取的優點。如果您可以使CSV成爲您的Web應用程序的首選文件格式,那麼當您必須接受電子表格作爲輸入時,您將獲得獎勵。與Excel文件相比,讀取和解析CSV文件要容易得多。

+1

我同意你關於CSV文件斯科特。如果這取決於我將使用的格式。但不幸的是我需要使用XLS .... – Metropolis 2010-06-28 15:33:38

1

聲明:我在開發DocRaptor的公司Expected Behavior工作。

也就是說,您可以使用DocRaptor從HTML生成XLS文件。 DocRaptor是一個Ruby on Rails項目,但您可以將其與PHP結合使用。下面是我們的PHP例子:

DocRaptor PHP example

這裏的另一個鏈接DocRaptor的主頁:

HTML to Excel with DocRaptor

0

您可以開始使用這個文件。它將創建一個excel文件並幫助您下載它。 下載周守軍代碼或現場演示這裏:http://purpledesign.in/blog/to-generate-excel-using-php/

您可以在

01,簡單下載,xlsx.php

$objPHPExcel->setActiveSheetIndex(0) 
      ->setCellValue('A1', 'Roll') 
      ->setCellValue('B1', 'Name') 
      ->setCellValue('C1', 'Total Classes') 
      ->setCellValue('D1', 'Class Attended') 
     ->setCellValue('E1', 'Percentage'); 

可以打印數據添加這樣的行從這樣的數據庫使用while循環。

$i=2; 
while ($row = $database->fetch_array($result)) 
{ 

     $objPHPExcel->setActiveSheetIndex(0) 
      ->setCellValue('A'.$i, $row[0]) 
      ->setCellValue('B'.$i, $row[1]) 
      ->setCellValue('C'.$i, $row[2]) 
      ->setCellValue('D'.$i, $total) 
     ->setCellValue('E'.$i, round(($row[2]/$total)*100)); 
      $i++; 
} 
14

它很容易,因爲excel支持html代碼。所以你只需要在文件頂部添加一個頭文件,然後回顯你的html代碼!

header ("Content-type: application/vnd.ms-excel"); 
header ("Content-Disposition: attachment; filename=foo_bar.xls"); 
echo "<table><tr><th>Header1</th></tr><tr><td>value1</td></tr></table>"; 

這將生成一個excel文件!

+1

太簡單了!你是天才:) – 2017-03-28 22:05:53

+0

如何生成多個工作表?只需關閉並重新打開'

'? – Meloman2017-10-03 13:53:38

+0

**這不是如何工作**。這不是如何工作。 - 將**僞造的** MIME頭部打到HTML輸出上與Excel文件不同。打開帶有錯誤文件擴展名的HTML摘錄只會在幾次Excel警告後觸發盡力而爲的導入功能。幾乎不可靠。 – mario 2017-12-17 00:13:54

相關問題