使用 WordPress开发网站时,有时候会遇到数据量非常大的情况,如果一个个在后台上传,效率太低了。提高效率的一个有效方法是直接导入 Excel 到数据库,特别是针对一些结构性不强的数据,如果数据是现成的 Excel 表格,那就太好了,直接上传,保存文章,数据就直接保存在数据库中了,可以节省不少时间。下面我来为大家简单介绍一下导入 Excel 表格到 WordPress Database的方法,本文的实现方法中用到了鼎鼎大名的 PHPExcel 库,首先我们假设你已经引入了这个库。
第一步:上传 Excel 表格,并保存为附件,附加到文章。
这一步相对简单,具体的步骤就不说了,很多 Metabox 插件生成的表单都支持添加一个自定义函数作为回调,当然,如果你对 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 的方式保存到了Custom Fields,在这一步,我们先获取保存的 Excel 附件 ID,然后再根据附件 ID 获取 Excel 文件的实际路径。得到了 Excel 文件后,我们就可以用 PHPExcel 库读取文件,然后根据读取的信息生成一个 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(); // 获取最大行数
$highestColumn = $worksheet->getHighestColumn(); // 获取最大列数
$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 表格保存到自定义字段中,前台显示的时候,直接调用这个自定义字段就可以了。
update_post_meta( $post_ID, 'wizhi_excel_imported_content', $output );
总结和说明
这个案例里面,实际需求只是把 Excel 表格里面的数据导入,转换成 HTML 表格,所以,我们直接粗暴的保存成了 HTML 表格的方式,并没有根据字段类型导入相应的文章字段里面。如果需要把 Excel 表格里面的数据导入到文章字段,如标题、正文等,在第二步生成 HTML 表格的时候,做一些判断,然后写入相应的字段就可以了,不同的应用场景,实现方法各不相同,在这是就不展开讲了。如果你对文章中介绍的方法有疑问,或者有更好的实现方法,欢迎在评论中交流。