IT Knowledge Base

~ Without sacrifice, there can be no victory ~

發佈日期:

如何使用PHP‧讀取Microsoft Excel 2003檔案中內容‧並用表格顯示出來

01. 在網上找到了一堆例子,按需要加以更改後,在這裡來分享一下。要求當然不單是讀取Excel檔案中內容,而且讀取檔案必須是最新版本的,再加上可以排序各欄位。02. 為方便取得最新的版本,故放置的Excel檔案,會以日期命名如:10-01-asset_list.xls、10-03-asset_list.xls、10-05-asset_list.xls,故如需要最新的檔案,則只需用glob命令,拿最後一組讀出資料便可。

foreach (glob("data\\*.*") as $filename) {
}
echo '<p class="content_text">Reading file from: '.$filename.'</p>';

03. 為方便用戶閱讀資料,這裡已設置了,所有Excel檔案中欄位排序選擇,分別是擁有者(Owner)、資產描述(Description)、數量(Quantity)、類別(Type)、備註欄(Remark)。

echo '<p class="menu_text">Sorting by:</p>';
echo '<p>';
echo '<span class="selection_text"><a href="asset_list.php?id=owner" target="_self">Owner</a></span>';
echo '<span class="selection_text"><a href="asset_list.php?id=descrption" target="_self">Descrption</a></span>';
echo '<span class="selection_text"><a href="asset_list.php?id=quantity" target="_self">Quantity</a></span>';
echo '<span class="selection_text"><a href="asset_list.php?id=type" target="_self">Type</a></span>';
echo '<span class="selection_text"><a href="asset_list.php?id=remark" target="_self">Remark</a></span>';
echo '</p>';

04.開始執行讀取Excel檔案。

require_once 'Excel/reader.php';
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP950');
$data->read($filename);
error_reporting(E_ALL ^ E_NOTICE);

05. Excel檔案中,第1欄假設為目錄名稱,故只取一次。

echo '<table border="1">';
echo '<tr class="table_menu">';
echo '<td>';
echo '</td>';
echo '<td>';
echo $data->sheets[0]['cells'][1][1];
echo '</td>';
echo '<td>';
echo $data->sheets[0]['cells'][1][2];
echo '</td>';
echo '<td>';
echo $data->sheets[0]['cells'][1][3];
echo '</td>';
echo '<td>';
echo $data->sheets[0]['cells'][1][4];
echo '</td>';
echo '<td>';
echo $data->sheets[0]['cells'][1][5];
echo '</td>';
echo '</tr>';

06. 從第2欄位置開始讀取資料,放入一陣列內。

$i = 0;
for ($j = 1; $j <= $data->sheets[0]['numRows']; $j++) {
if ($data->sheets[0]['cells'][$j+1][1] == NULL) {
break;
}
else {
$content[owner][$i] = $data->sheets[0]['cells'][$j+1][1];
$content[descrption][$i] = $data->sheets[0]['cells'][$j+1][2];
$content[qty][$i] = $data->sheets[0]['cells'][$j+1][3];
$content[type][$i] = $data->sheets[0]['cells'][$j+1][4];
$content[remark][$i] = $data->sheets[0]['cells'][$j+1][5];
$i++;
}
}

07. 根據用戶不同選擇,把陣列內資料作不同方式排序。

$id=$_GET[id];
switch ($id) {
case 'owner':
array_multisort($content[owner],$content[descrption],$content[qty],$content[type],$content[remark]);
break;
case 'descrption':
array_multisort($content[descrption],$content[owner],$content[qty],$content[type],$content[remark]);
break;
case 'quantity':
array_multisort($content[qty],$content[owner],$content[descrption],$content[type],$content[remark]);
break;
case 'type':
array_multisort($content[type],$content[owner],$content[descrption],$content[qty],$content[remark]);
break;
case 'remark':
array_multisort($content[remark],$content[owner],$content[descrption],$content[qty],$content[type]);
break;
}

08. 將排序後資料,以表格方式顯示出來。

for ($j = 0; $j < $i; $j++) {
echo '<tr class="table_text">';
echo '<td>';
echo $j+1;
echo '</td>';
echo '<td>';
echo $content[owner][$j];
echo '</td>';
echo '<td>';
echo $content[descrption][$j];
echo '</td>';
echo '<td>';
echo $content[qty][$j];
echo '</td>';
echo '<td>';
echo $content[type][$j];
echo '</td>';
echo '<td>';
echo $content[remark][$j];
echo '</td>';
echo '</tr>';
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *