使用 WordPress開發(fā)網(wǎng)站時,有時候會遇到數(shù)據(jù)量非常大的情況,如果一個個在后臺上傳,效率太低了。提高效率的一個有效方法是直接導入 Excel 到數(shù)據(jù)庫,特別是針對一些結(jié)構(gòu)性不強的數(shù)據(jù),如果數(shù)據(jù)是現(xiàn)成的 Excel 表格,那就太好了,直接上傳,保存文章,數(shù)據(jù)就直接保存在數(shù)據(jù)庫中了,可以節(jié)省不少時間。下面我來為大家簡單介紹一下導入 Excel 表格到 WordPress 數(shù)據(jù)庫的方法,本文的實現(xiàn)方法中用到了鼎鼎大名的 PHPExcel 庫,首先我們假設你已經(jīng)引入了這個庫。
第一步:上傳 Excel 表格,并保存為附件,附加到文章。
這一步相對簡單,具體的步驟就不說了,很多 Metabox 插件生成的表單都支持添加一個自定義函數(shù)作為回調(diào),當然,如果你對 WordPress Metabox API 非常熟悉的話,也可以直接做一個上傳 Excel 文件用的 Metabox。在這里,關鍵的一步就是獲取上傳的文件,并保存到自定義字段。
$improt_data = sanitize_text_field( $_POST[ 'wizhi_excel_import' ] );
update_post_meta( $post_ID, 'wizhi_excel_import', $improt_data );
第二步:獲取保存的自定義字段
在上一步中,我們把上傳的 Excel 附件以附件 ID 的方式保存到了自定義字段,在這一步,我們先獲取保存的 Excel 附件 ID,然后再根據(jù)附件 ID 獲取 Excel 文件的實際路徑。得到了 Excel 文件后,我們就可以用 PHPExcel 庫讀取文件,然后根據(jù)讀取的信息生成一個 HTML 表格,然后把這個表格保存到自定義字段就可以了。
// 獲取 Excel 附件 ID
$excel_id = get_post_meta( $post_ID, 'wizhi_excel_import', true );
// 獲取 Excel 文件的實際路徑
$excel_file = get_attached_file( $excel_id );
// 實例化 PHPExcel 加載文件類
$objPHPExcel = PHPExcel_IOFactory::load( $excel_file );
// 開始讀取文件,并生成 HTML 表格
ob_start();
foreach ( $objPHPExcel->getWorksheetIterator() as $worksheet ) {
$highestRow = $worksheet->getHighestRow(); // 獲取最大行數(shù)
$highestColumn = $worksheet->getHighestColumn(); // 獲取最大列數(shù)
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString( $highestColumn );
echo '<table>';
for ( $row = 1; $row <= $highestRow; ++$row ) {
echo '<tr>';
for ( $col = 0; $col < $highestColumnIndex; ++$col ) {
$cell = $worksheet->getCellByColumnAndRow( $col, $row );
$val = $cell->getValue();
echo '<td>' . $val . '</td>';
}
echo '</tr>';
}
echo '</table>';
}
$output = ob_get_contents();
ob_end_clean();
// 把生成的 HTML 表格保存到自定義字段中,前臺顯示的時候,直接調(diào)用這個自定義字段就可以了。
update_post_meta( $post_ID, 'wizhi_excel_imported_content', $output );
總結(jié)和說明
這個案例里面,實際需求只是把 Excel 表格里面的數(shù)據(jù)導入,轉(zhuǎn)換成 HTML 表格,所以,我們直接粗暴的保存成了 HTML 表格的方式,并沒有根據(jù)字段類型導入相應的文章字段里面。如果需要把 Excel 表格里面的數(shù)據(jù)導入到文章字段,如標題、正文等,在第二步生成 HTML 表格的時候,做一些判斷,然后寫入相應的字段就可以了,不同的應用場景,實現(xiàn)方法各不相同,在這是就不展開講了。如果你對文章中介紹的方法有疑問,或者有更好的實現(xiàn)方法,歡迎在評論中交流。


