PhpSpreadsheet: ワークブックの操作と対応ファイル形式

PhpSpreadsheetライブラリの中心となるのはSpreadsheetクラスです。このクラスは、ワークブックに含まれるシート群、ドキュメントのセキュリティ設定、およびメタデータへの参照を管理します。PhpSpreadsheetの概念を簡潔に表現すると、SpreadsheetクラスはExcelの「ワークブック」そのものを表します。

ワークブックの作成方法は主に二つあります。一つは既存の電子計算表ファイルから内容を読み込む方法、もう一つは全く新しいワークブックを手動で構築する方法です。これら以外に、既存のワークブックをクローンして利用することも可能ですが、これはあまり一般的ではありません。

既存ファイルからのワークブック読み込み

PhpSpreadsheetがサポートする多様な電子計算表形式と、それらをSpreadsheetオブジェクトとして読み込むための詳細なオプションについては、別途「ファイルの読み込み」に関するドキュメントで詳しく解説されています。

以下は、指定されたファイルパスからワークブックをロードする基本的な例です。

<?php

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;

$sourceFilePath = './data/sales_report.xlsx'; // 読み込むファイルのパス

try {
    /** 指定されたファイルパスからワークブックオブジェクトをロード **/
    $loadedWorkbook = IOFactory::load($sourceFilePath);
    echo "ワークブック 'sales_report.xlsx' が正常にロードされました。\n";
    // 以降、loadedWorkbook オブジェクトを利用して操作を行います
} catch (\PhpOffice\PhpSpreadsheet\Reader\Exception $e) {
    die('ファイルの読み込み中にエラーが発生しました: ' . $e->getMessage());
}

新しいワークブックの生成

ファイルから読み込むのではなく、まっさらな新しいワークブックを作成したい場合は、単にSpreadsheetクラスのインスタンスを生成します。

<?php

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;

/** 新しいワークブックオブジェクトを初期化 **/
$freshWorkbook = new Spreadsheet();

echo "新しい空のワークブックが作成されました。\n";
// 新しく作成されたワークブックには、デフォルトで1つのワークシートが含まれています

新しくインスタンス化されたワークブックオブジェクトには、常に1つのワークシートが初期状態で含まれています。

メモリからのワークブック解放

PhpSpreadsheetのオブジェクトは、循環参照(例えば、ワークブックがワークシートを参照し、ワークシートが親ワークブックを参照する関係)を持つことがあります。これにより、PHPがunset()関数を呼び出した際や、ローカルスコープの終了時にオブジェクトをメモリから完全に解放しようとした際に問題が生じることがあります。結果として「メモリリーク」が発生し、PHPが利用できる限られたメモリを大量に消費してしまう可能性があります。

この問題は手動で解決する必要があります。ワークブックオブジェクトをunset()する際には、事前にこれらの循環参照を「切断」する必要があります。PhpSpreadsheetは、この目的のためにdisconnectWorksheets()メソッドを提供しています。

<?php

// 上記でロードまたは作成されたワークブックオブジェクトがあるとする
// 例: $loadedWorkbook または $freshWorkbook

// ワークシートとの循環参照を解除
$loadedWorkbook->disconnectWorksheets();

// オブジェクトをメモリから解放
unset($loadedWorkbook);

echo "ワークブックオブジェクトがメモリから安全に解放されました。\n";

サポートされるファイル形式

PhpSpreadsheetは、多岐にわたるスプレッドシート形式の読み書きに対応していますが、特定の機能は形式によってサポート状況が異なります。どのリーダーがどの機能をサポートしているかについては、機能のクロスリファレンスを参照してください。

現在、PhpSpreadsheetは以下のファイル形式での読み込みをサポートしています。

XLS

Microsoft Excel™ 95から2003までで利用されていたバイナリファイル形式(BIFF5およびBIFF8)です。ほとんどのスプレッドシートソフトウェアで(程度の差はありますが)サポートされています。BIFFファイルは通常.xlsという拡張子を持ちます。

XML (SpreadsheetML 2003)

Microsoft Excel™ 2003では、SpreadsheetMLというXMLベースのファイル形式オプションが導入されました。この形式は圧縮されたXMLドキュメントであり、あまり普及していませんが、PhpSpreadsheetはその中核機能をサポートしています。

XLSX

Microsoft Excel™ 2007以降で採用された新しいファイル形式で、Microsoft Office Open XML SpreadsheetMLと呼ばれます。Excel 2010ではスパークラインなどの新機能でさらに拡張されました。これらのファイルは通常.xlsx拡張子を持ちます。この形式は、圧縮された一連の拡張マークアップ言語(XML)ファイルに基づいています。Microsoft Office Open XML SpreadsheetMLは主にECMA-376およびISO/IEC 29500として標準化されています。

ODS

Open Document Format(ODF)またはOASISとしても知られる、OpenOffice.orgのXMLベースのスプレッドシートファイル形式です。複数のテキストファイル(そのほとんどがXMLでマークアップされています)を含むzipアーカイブで構成されます。OpenOffice.org CalcやStarCalcの標準ファイル形式であり、ファイルは通常.ods拡張子を持ちます。この形式の公開仕様は、OASIS Open Office XML Format Technical Committeeのウェブページで入手可能です。

SLK

Microsoft MultiplanのSymbolic Link Exchange(SYLK)ファイル形式です。MultiplanはMicrosoft Excel™の前身にあたるソフトウェアでした。ファイルは通常.slk拡張子を持ちます。あまり一般的ではありませんが、CSVファイルと比較して基本的なデータやセル書式設定をサポートし、実装が容易なため、クロスプラットフォームオプションとしてSYLKファイルを生成するアプリケーションがいくつか存在します。

Gnumeric

Gnumericファイル形式は、GNOMEのGnumericスプレッドシートアプリケーションで利用されており、通常.gnumericという拡張子を持ちます。ファイルの内容は拡張マークアップ言語(XML)タグを使用して保存され、その後GNUプロジェクトのgzip圧縮ライブラリで圧縮されます。

CSV

コンマ区切り値(CSV)ファイル形式は、テキストファイルで構造化データを扱う一般的な方法です。CSVファイルでは、ファイルの各行が1つのデータレコードを表し、(各行内で)異なるデータフィールド(または列)はコンマ(,)で区切られます。データフィールドにコンマが含まれる場合は、通常引用符(")で囲む必要があります。時にはコンマの代わりにタブ(\t)、パイプ記号(|)、またはセミコロン(;)が区切り文字として使用されることもあります。CSVはプレーンテキスト形式であるため、データ書式設定オプションはサポートされていません。

「CSV」は単一の厳密に定義された形式ではありません(一般的に使用される定義についてはRFC 4180を参照)。実際には「CSV」という用語は、以下のいずれかの特徴を持つファイルを指します。

  • ASCII、Unicode、EBCDIC、Shift JISなどの文字セットを使用するプレーンテキストであること。
  • レコード(通常は各行に1レコード)で構成されていること。
  • レコードが区切り文字(通常はコンマ、セミコロン、タブなどの単一の予約文字)で区切られたフィールドに分割されていること。
  • 各レコードが同じフィールド順序を持っていること。

これらの一般的な制約の下で、多くのバリエーションが存在します。そのため、「CSV」ファイルは完全にポータブルではありません。しかし、変更点はわずかであり、多くの実装ではユーザーがファイルを参照し(プレーンテキストであるため可能)、区切り文字や引用ルールなどを指定できます。

注意: Microsoft Excel™は.csvファイルを開きますが、システムの地域設定によっては、一部の言語でコンマが小数点区切り文字として使用されるため、コンマではなくセミコロンを区切り文字として期待する場合があります。また、Excelの多くの地域版では、CSVファイル内のUnicode文字を正しく処理できないことがあります。

HTML

ハイパーテキストマークアップ言語(HTML)は、ウェブページやウェブブラウザで表示されるその他の情報を作成するための主要なマークアップ言語です。ファイルは通常.htmlまたは.htmという拡張子を持ちます。HTMLのマークアップは、見出し、段落、リスト、リンク、引用などのテキストの構造的意味を表現することで、構造化されたドキュメントを作成する方法を提供します。1996年以来、World Wide Web Consortium(W3C)がHTML仕様を維持しており、商用ソフトウェアベンダーからの意見も取り入れています。2000年には、HTMLは国際標準(ISO/IEC 15445:2000)にもなりました。HTML 4.01は1999年末にリリースされ、その後2001年までエラー訂正が行われました。2004年には、Web Hypertext Application Technology Working Group(WHATWG)がHTML5の開発を開始し、2008年にW3Cと共同でリリースされました。

タグ: PhpSpreadsheet PHP Excel SpreadsheetML ODS

7月17日 22:36 投稿