Elementorの話題じゃない!ExcelをWordPressで利用したいのだがPHPExcelってアップデートが止まってる!WordPressでExcelを活用するにはどうすりゃいんだ!
サイトのタイトルにElementorが入っている割にElementorの話題が少ないんでは…と突っ込まれそうだけど、いかにエディターとしてElementorがすぐれていてもすべての問題がElementorで解決できるわけではない!そりゃちょっとぐらいコード書くのは必要なんです!
とある会社からCSVをアップロードするんで、その内容を表示してねと言われたのが2年ほど前のお話。そん時はPHPExcelは利用せずにfgetcsvを使って事なきを得たんですが…次はCSVでなくExcelでやりたいという要望が。
ExcelファイルをPHPで利用するにはPHPExcelが有名で、過去にExcelファイルをアップロードするからPHPで表示しなさいという仕様は進めたことはあったんだけど、よくよく今現在PHPExcelを検索してみると、なななななんと!開発終わってます。
でも後継のPhpSpreadsheetがあるんですねと安心したのもつかの間…インストールはComposerで…そんなんでWordPressで使えるんか!!
PHPExcelの後継としてPhpspreadSheetが開発されており、こちらを使えばPHPとExcelとの連携は素晴らしく完璧。しかもGoogleのSpleadsheetの読み書きも可能。
しかし…インストールはComposerのみというWordPressユーザーには高いハードルが…。ComposerインストールということはWordPressもComposer使って、そのあとにPhpspreadSheetをインストールするかって…そんなんやってられない!composer.json書くなんて気が滅入る。
PhpspreadSheetのプラグインを検索してみると、いがいと簡単に発見
Composer使いたくない!ってプラグインを検索してみると、あったあったよ!公式にはないけれどGithubに置かれていた。
その名も「Cbx Phpspreadsheet」。Githubからダウンロードしてインストールすると利用が可能!
具体的なコードは下記を参照。
コード内で指定したファイルの内容を配列として格納できる。
今回、自分が試したのはデータ参照のみ。新規でファイルを保存したり、既存のファイルを変更したりと様々な場面で利用できる。GoogleのSpleadsheetでも利用できるので応用の範囲が広がる。
// PhpSpreadSheetをWordPressで使うcbxphpspreadsheetの開始
// プラグインの有無を確認して実行
if ( defined( 'CBXPHPSPREADSHEET_PLUGIN_NAME' ) && file_exists( CBXPHPSPREADSHEET_ROOT_PATH . 'lib/vendor/autoload.php' ) ) {
// PhpSpreadSheetの読み込み
require_once( CBXPHPSPREADSHEET_ROOT_PATH . 'lib/vendor/autoload.php' );
// 初期設定 ファイルタイプ、シート名、ファイル名(サーバー内のフルパス)を指定する
$excelFileType = 'Xlsx';
$excelSheetName = 'Sheet1';
$excelFilePath = '/home/サーバーID/独自ドメイン名/public_html/';
// ファイルタイプ、ファイル名、シート名を設定してシートを配列に格納
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader( $excelFileType );
$reader->setLoadSheetsOnly( $excelSheetName );
$spreadSheet = $reader->load( $excelFilePath );
// シートの内容を配列として読み込む
$dataArray = $spreadSheet->getActiveSheet()
->rangeToArray(
'A1:D20', // The worksheet range that we want to retrieve
NULL, // Value that should be returned for empty cells
TRUE, // Should formulas be calculated (the equivalent of getCalculatedValue() for each cell)
TRUE, // Should values be formatted (the equivalent of getFormattedValue() for each cell)
TRUE // Should the array be indexed by cell row and cell column
);
}