我以一種快速的方式來達到這個目的 - 因爲它很長而且囉嗦,我只是用概念而不是代碼來解釋它。
如果您想在PHP中徹底操作文檔,XLSX將遵循ISO 29500的規定。否則,請認識到xlsx文件是一堆xml文件的壓縮文件。
製作一個你想要的模板,假設它有不同類型的風格交替排列的行,在excel中或者在某些描述中打開xml編輯器。確保你在那裏放置了一些數據,並確保一些字段是平等的(僅用於學習目的)。
然後將文件保存爲xlsx,將其重命名爲.zip,或者在存檔提取器中將其打開並觀察其內容。
首先,請注意[Content_Types] .xml文件,它描述了檔案中主要文件的位置以及它本身遵守的標準以及這些文件的內容類型。
0123'文件夾之外的所有內容都只是元數據。但觀察docProps/core.xml
包含作者,修改和時間戳信息 - 您可以在重新創建此文件時在php中替換。此外,所有指出的,docProps/core.xml
可以重新命名爲您的口味,[Content_Types].xml
不能。
好吧,所以現在你明白了這一點,你會開始觀察在這個地方拋出的ID。他們喜歡以文件格式使用它,所有內容都通過索引在特定的xml屬性列表或類似內容中引用其他所有內容。他們通常也會描述這些清單中的項目數量。您可以看到themes.xml, styles.xml, workbook.xml, sharedStrings.xml, _rels/, worksheets/
。
如果您使用了樣式,那麼樣式將會被大量不必要的樣式誇大,默認情況下將生成默認樣式。但是你應該能夠看到這些風格是如何工作的,以便你可以定製你自己的風格。
給我的主題是毫無意義的,所以我在整個過程中刪除它和它的引用ID。
接下來,您將看到工作簿,這是包含有關電子表格文檔內部工作表信息的文件,因爲您顯然可以有1個以上的工作表。它還包含一些表單元數據,例如其大小等。
現在出現您將遇到的第一個大華。 sharedStrings.xml
是一個奇怪的文件,它存儲了所有要插入靜態電子表格單元格中的信息。它們被編入索引,但讀取文檔的引擎計算出它們的索引是什麼。重複的任何內容可以返回到工作表本身(工作表文件夾內)的舊索引,以便在具有重複值的大文檔中節省文件大小。 不是sst
元素中的屬性count
和uniquecount
以及它們的明顯含義。
這是在php的階段,您可以在表單中填充包含所需內容的數據數組,並將其轉儲到xml格式的列表中,例如此文件出現。還要注意,如果沒有換行符或換行字符,這些文件不需要被卡住,因爲有或沒有仍然是有效的XML,並且它們將在讀卡器中工作。
查看_rels文件夾,它再次顯而易見。
最後是工作表本身。這裏的字段中的數字是指sharedStrings.xml
中字符串的索引位置。屬性s是樣式,t是字段中的數據類型。 R是單元格的位置,儘管爲什麼它需要超出我的範圍,因爲它可以很容易地計算出來。
在php中生成這個文件也不應該太困難。只需使用您用於製作sharedStrings.xml
文件的數據陣列中的索引即可。
哦,也有工作表中的列寬信息,你可以根據你使用的字體計算出來,如果需要的話也可以在php中自動調整大小。
最後是它的所有包裝在PHP中。
我的代碼是在一個類中接收數據和我用excel創建的特定保存文件以保持簡單。
$this->folder_structure_simple = Array(
"_rels/.rels" => "_rels__rels",
"docProps/app.xml" => "docProps_app_xml",
"docProps/core.xml" => "docProps_core_xml",
"xl/_rels/workbook.xml.rels",
"xl/theme/theme1.xml",
"xl/worksheets/sheet1.xml",
"xl/sharedStrings.xml",
"xl/styles.xml",
"xl/workbook.xml",
"[Content_Types].xml" => "Content_Types_xml"
);
$zip = new ZipArchive;
$res = $zip->open($this->file_name, ZipArchive::CREATE);
if($res === TRUE){
foreach($this->folder_structure_simple as $file => $function){
$zip->addFromString($file, $this->$funtion);
}
$zip->close();
echo 'ok';
}else{
return FALSE;
}
並且函數產生所需的數據。非常快,不是很靈活。
'OpenTBS不完全是一個Excel庫'。那麼,從tinybutstrong.com索引頁: 'TinyButStrong是一個**庫**,使您可以動態創建XML/HTML頁面...' – Pere 2014-12-24 10:52:02