OpenFormula (OpenDocument formula specification) は、どのスプレッドシートのユーザーでも、そのアプリケーションに制約されることなく数式を相互に運用することを可能にするために起案されたオープン標準に関する草案の名称である。同様にオープンな文書フォーマットであるOpenDocument (ISO/IEC 26300) の追加草案。オープンソース、フリーウェアの分野で知られているコンピューター科学者のデイビット・A・ホイーラーにより提案された。
OpenDocument 1.0が制定された当時の背景には、どのオフィススイートのユーザーであっても、互換性の問題なく文書ファイルを相互にやり取りすることへの要求があったが、表計算ソフトにおける数式の記述に関しても同様の要求がある。SUM関数のようなごく一般的な数式を除いては、各アプリケーションにより規定されている数式は異なっており、あるアプリケーションで作成されたスプレッドシートを別のアプリケーションで読み込むことは(出来なくないにせよ)、特殊な対応を行うことではじめて可能であった。そうした障害を避けるために構想されたのがOpenFormulaである。
OpenDocumentでは数式を扱う際に、MathMLを利用しており、また、スプレッドシート上のデータ、フォーマット、テーブル等、表計算ソフト上で一般的に利用される情報をやり取りすることも可能である。OpenDocumentでは関数のような(スプレッドシートで計算された)数式は、table:formulaという形式を用いて表示される。
例えばODSファイルに含まれるcontent.xmlは、SUM関数を用いて計算した場合、office:body以下では次のようになる。
<office:body> <office:spreadsheet> <table:table table:name="Table1" table:style-name="ta1" table:print="false"> <office:forms form:automatic-focus="false" form:apply-design-mode="false"/> <table:table-column table:style-name="co1" table:number-columns-repeated="256" table:default-cell-style-name="ce1"/> <table:table-row table:style-name="ro1"> <table:table-cell office:value-type="float" office:value="1"> <text:p>1</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="255"/> </table:table-row> <table:table-row table:style-name="ro1"> <table:table-cell office:value-type="float" office:value="2"> <text:p>2</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="255"/> </table:table-row> <table:table-row table:style-name="ro1"> <table:table-cell office:value-type="float" office:value="3"> <text:p>3</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="255"/> </table:table-row> <table:table-row table:style-name="ro1"> <table:table-cell office:value-type="float" office:value="3"> <text:p>4</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="255"/> </table:table-row> <table:table-row table:style-name="ro1"> <table:table-cell table:formula="oooc:=SUM([.A1:.A4])" office:value-type="float" office:value="10"> <text:p>10</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="255"/> </table:table-row> <table:table-row table:style-name="ro1" table:number-rows-repeated="65530"> <table:table-cell table:number-columns-repeated="256"/> </table:table-row> <table:table-row table:style-name="ro1"> <table:table-cell table:number-columns-repeated="256"/> </table:table-row> </table:table> </office:spreadsheet> </office:body>
しかし、この table:formula の構文や意味論は十分に定義されていないとする声もある。OpenDocument 1.0においてスプレッドシートの数式は、例えば値域やSUM関数を指定する方法を表示するような、ごく単純な例のセットによってしか定義されておらず、それらの例について、構文や意味論を含めた上で、より詳細で正確な仕様が求められていると批判された[1][2][3][4]。
当時、OpenDocumentの委員会は数式の相互運用性については気にかけておらず、「コメントは、スプレッドシートの、準拠的な実装をサポートするべき数式の文法に関してなされるものであり、確かに相互運用性はユーザーの利益となると思うが、これは目下の仕様の狙うところではないと信じる〔ママ〕。なぜなら、相互運用性は現在その仕様が記述するところのXMLフォーマットとは特に関係がないからである。技術委員会 (Technical Committee) は仕様に定義されている以上の相互運用性の規格の文書化に関して解決法を探ってゆくであろう。」とコメントした[5]。
一方では、仕様はそれほど明確でないが(特に数式は数十年の伝統に沿う傾向があるので)、またほとんどのスプレッドシートでは結局のところ普遍的に使われている数式はごくわずかしかない(例えばSUM関数)ため、仕様の意図は十分に明確であるとされることもある。ただ実際には、多くのディベロパーはOpenOffice.orgを「基準となる実装」と見ている。なぜならOpenOffice.orgのソースコードは公開されていて、またXMLのアウトプットはバイナリデータと異なり、容易に調べることが出来るためである。オープン・スタンダードに沿ったやり方で機能の実装を行うことは、アプリケーションに渡って数式をやり取りする際に生じる多くの問題を解消するといえよう。
規格の草案作成はOpenDocumentの外部コメンターであるホイーラーにより始められた。彼の草案は2005年2月に公開され、これを機に表計算ソフトの様々な開発者が議論を始める。
2005年10月、ホイーラーは当初の草案とその後の開発者による議論に基づき、数式の仕様の草案を作成することを目的とし、OpenDocument Fellowship(オープンドキュメント・フェローシップ)によるサポートの下で非公式プロジェクトを一般に向け開始する。プロジェクトは2006年1月までに膨大な量の仕様を開発し、その後各表計算ソフトウェア開発者は、彼ら独自の仕様を草案のそれに適合させる作業を開始した。
2006年2月、OASISはホイーラーを委員長とする数式分科委員会を公式に設立した。議論の結果、OpenFormulaプロジェクトの文書を基にして作業を進めることとなった。同月、OASISは詳細なフレームワークと100を超える機能が定義された草案を作成した。
2005年、マイクロソフトが取り扱うMicrosoft Officeの現プログラムマネージャーであるブライアン・ジョーンズは、OpenDocumentはスプレッドシートの数式を詳細に定義していないと述べた[6]が、当時競合していたマイクロソフトのプロプライエタリなXMLフォーマットもそのような詳細な仕様は数式に実装していなかったのもまた事実である[7]。
マイクロソフトは、OpenDocumentはスプレッドシートの数式のフォーマットを規定していないため、OpenDocumentを使うことは出来ないと繰り返してきたが、結局OpenFormulaの最初のバージョンに1年3ヶ月遅れ、OASISが最初に提出した仕様の草案に3ヶ月遅れる形で、2006年5月にマイクロソフトもまたXMLフォーマットで数式を定義する作業を開始した。MicrosoftはこれをOpenXMLと呼んでいる。
OpenFormulaの仕様と開発のプロセスを比較すると、OpenDocumentと重複する点があるが、再計算された数式フォーマットのそれと比較して多くの異なる特性がある。例えば、
OpenFormulaの重要な側面に、あらかじめ定義された「グループ」の処理セットを提供することが挙げられる。それらの内で最も重要なのは、小 (small)、中 (medium) そして大 (large) である。
他にも、ユーザーが自身の必要性に基づき、特定のグループに適合する実装を要求するであろうと予測されている。
OpenFormulaは2006年から数回に渡り、公開時期を延期してきていたが、2007年の6月に、品質保証 (QA) のレビューに提出する前にすべき4つのタスクが残っているというアナウンスがされた[9]。
また、この規格は作業中でありながらも、草稿の規格に従う必要のあるアプリケーションを修正することで既に多くの実装者が規格を実装していることに留意すべきである。草稿の大部分はいくらかに渡って変更されなかったため、多くの表計算ソフト開発者は既に草稿の規格の大部分を実装している。