今回は PhpSpreadsheet で行う「ワークシート」の 「セル」への漢字(全角文字)の設定 について説明したいと思います。
■ワークシートの「セル」への漢字(全角文字)の設定の簡単なプログラム(エラー発生)
ワークシートの setCellValue() メソッドで全角文字列を指定すれば問題無いであろうとも思って、以下の様なソースを実行しました。
<?php // ライブラリ読込 require '../vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // Spreadsheetオブジェクト生成 $objSpreadsheet = new Spreadsheet(); // ワークシートオブジェクト $objSheet = $objSpreadsheet->getActiveSheet(); // [A1]セルに文字列設定 $objSheet->setCellValue('A1', 'あいうえお漢字全角ABCDE'); // [test5-1.xlsx]:Excel2007形式で保存する $objWriter = new Xlsx($objSpreadsheet); $objWriter->save('test5-1.xlsx'); exit(); ?>
しかし、実際のエクセルファイル[test5-1.xlsx]を開くと以下の様な表示になります。 全角文字列がうまく反映していない様です。
■エラー発生したソースの文字コードの確認
上記のソースの文字コードを確認したら Shift-JIS コードになっていました。 これを UTF-8 に変更しプログラムを実行後、エクセルファイル(「test5-2.xlsx」としました)を開いてみると正しく文字が設定されました。
■ワークシートのデフォルトスタイルを使用したフォント設定
ワークシートの全てのセルに同じスタイルを設定したい場合に、デフォルトスタイルを設定します。
Spreadsheetオブジェクト のデフォルトスタイルを取得し(getDefaultStyle()メソッド)、 さらにそのスタイルからフォントオブジェクト取得します(getFont()メソッド)。
フォントオブジェクトの setName() メソッドでフォント名を設定し、 setSize() メソッドでフォントサイズを設定します。
セルの縦位置の設定には、デフォルトスタイルからアライメントオブジェクトを取得し setVertical() メソッドでセルの縦方向の設定をします。
<?php // ライブラリ読込 require '../vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Style\Alignment; // Spreadsheetオブジェクト生成 $objSpreadsheet = new Spreadsheet(); // ワークシートオブジェクト $objSheet = $objSpreadsheet->getActiveSheet(); // デフォルトスタイルオブジェクト取得 $objDefaultStyle = $objSpreadsheet->getDefaultStyle(); // フォントオブジェクト取得 $objFont = $objDefaultStyle->getFont(); // フォント名設定 $objFont->setName('MS Pゴシック'); // フォントサイズ設定 $objFont->setSize(12); // アライメントオブジェクトでセルの縦方向の設定 $objDefaultStyle->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); // [A1]セルに文字列設定 $objSheet->setCellValue('A1', 'あいうえお漢字全角ABCDE'); // [A2]セルに[A1]と同じ文字列設定 $objSheet->setCellValue('A2', 'あいうえお漢字全角ABCDE'); // [A3]セルに数値設定 $objSheet->setCellValue('A3', '123456789'); // [test5-3.xlsx]:Excel2007形式で保存する $objWriter = new Xlsx($objSpreadsheet); $objWriter->save('test5-3.xlsx'); exit(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
これは余談ですが、上記のソースでオブジェクトを変数で受けて処理していますが、以下の様に一気に書いてしまっても問題はありません。
<?php // ライブラリ読込 require '../vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Style\Alignment; // Spreadsheetオブジェクト生成 $objSpreadsheet = new Spreadsheet(); // ワークシートオブジェクト $objSheet = $objSpreadsheet->getActiveSheet(); // フォント名設定 $objSpreadsheet->getDefaultStyle()->getFont()->setName('MS Pゴシック'); // フォントサイズ設定 $objSpreadsheet->getDefaultStyle()->getFont()->setSize(12); // アライメントオブジェクトでセルの縦方向の設定 $objSpreadsheet->getDefaultStyle()->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); // [A1]セルに文字列設定 $objSheet->setCellValue('A1', 'あいうえお漢字全角ABCDE'); // [A2]セルに[A1]と同じ文字列設定 $objSheet->setCellValue('A2', 'あいうえお漢字全角ABCDE'); // [A3]セルに数値設定 $objSheet->setCellValue('A3', '123456789'); // [test5-3.xlsx]:Excel2007形式で保存する $objWriter = new Xlsx($objSpreadsheet); $objWriter->save('test5-3.xlsx'); exit(); ?>
コメント