Skip to content

ロケールプロファイル ​

Excel の挙動は完全にはロケール非依存ではありません。関数名、区切り文字、日付解析、文字幅、通貨、テキスト処理は、プラットフォームとロケールによって変わることがあります。そのため Formulon は、単一のグローバル互換モードではなく、名前付きプロファイルを公開します。

用語: 互換性プロファイル

Excel 365 のホストとロケールの組に名前を付け、互換性の根拠となる Oracle データを紐付けたものです。ロケール依存の評価はプロファイルに従います。アプリとテストはホスト OS の既定値ではなく、プロファイルを明示的に固定してください。

現在のプロファイル ​

Formulon は 28 個のプロファイル ID を提供します。形式は {mac,win}-365-{ja_JP,en_US,de_DE,fr_FR,zh_CN,ko_KR,th_TH,es_ES,es_MX,pt_BR,ru_RU,zh_TW,it_IT,nl_NL} です。新しいワークブックは、別のプロファイルを選択しない限り win-365-en_US を使います。createForProfile(profileId) を使うと、そのロケールの Excel と同じフォント、スタイル名、シート名を持つワークブックを作れます。詳しくは ワークブックの流れ を参照してください。

ホストプロファイル測定状況
Mac Excel 36514 ロケールすべてに対する mac-365-14 個すべて実測済みです。mac-365-ja_JP が数式と条件付き書式の主 Oracle で、ほかの 13 ロケールにも専用の数式ゴールデンがあります。
Windows Microsoft 36514 ロケールすべてに対する win-365-win-365-ja_JP は実測済みで、ワークブック(ピボットテーブルと印刷)の Oracle です。ほかの 13 個は、Windows での取得に置き換わるまで推定値です。

localeFacts(profileId) は測定状況を 2 つのフラグで返します。measured は区切り文字や通貨などのロケール情報、collationMeasured は文字列の照合順序についての測定状況です。後者はすべての Mac プロファイルで true、win-365-ja_JP を含むすべての Windows プロファイルで false です。どちらも個々の関数が実装済みかどうかは示しません。Python と C のフィールド名は collation_measured です。

ロケール情報 ​

次の値は現在の localeFacts() の内容です。配列 列は(列区切り、行区切り)です。通貨の prefix / suffix は記号の位置を示し、space は記号と数値の間に 1 個の空白を出力することを示します。これらのスカラー値は同じロケールの Mac と Windows で共通で、measured の値だけが上記の測定状況に従って変わります。

ロケール小数桁区切りリスト配列真偽値の名前日付順通貨
ja_JP.,,, ;TRUE / FALSEymd¥、prefix、0 桁
en_US.,,, ;TRUE / FALSEmdy$、prefix、2 桁
de_DE,.;. ;WAHR / FALSCHdmy€、suffix、空白、2 桁
fr_FR,空白;. ;VRAI / FAUXdmy€、suffix、空白、2 桁
zh_CN.,,, ;TRUE / FALSEymd¥、prefix、2 桁
ko_KR.,,, ;TRUE / FALSEymd₩、prefix、0 桁
th_TH.,,, ;TRUE / FALSEdmy฿、prefix、2 桁
es_ES,.;\ ;VERDADERO / FALSOdmy€、suffix、空白、2 桁
es_MX.,,, ;VERDADERO / FALSOdmy$、prefix、2 桁
pt_BR,.;\ ;VERDADEIRO / FALSOdmyR$、prefix、空白、2 桁
ru_RU,空白;; :ИСТИНА / ЛОЖЬdmy₽、suffix、空白、2 桁
zh_TW.,,, ;TRUE / FALSEymd$、prefix、2 桁
it_IT,.;\ .VERO / FALSOdmy€、suffix、空白、2 桁
nl_NL,.;\ ;WAAR / ONWAARdmy€、prefix、空白、2 桁

localeFacts() は、ローカライズされたエラー名も返します。R1C1 の文字、日付・時刻名、TEXT() の書式規則はプロファイルが内部で制御しますが、公開されている LocaleFacts の結果には含まれません。これらを通貨や区切り文字の表から推測しないでください。

コードページと文字幅 ​

ロケールプロファイルは、バイト数を数える関数と文字コード関数のコードページも選択します。DbcsCodepage は LENB、LEFTB、RIGHTB、MIDB、CHAR、CODE が使う 2 バイトページです。CHAR / CODE の 1 バイトページは別に示します。

ロケールDBCS ページCHAR / CODE のバイトページ文字幅の折りたたみ
ja_JPJIS X 0208CP932mac-* は Mac 規則、win-* は Windows 規則
zh_CNGB2312DBCS の高位バイトは空白なし
ko_KRKS X 1001DBCS の高位バイトは空白mac-* は Mac 規則、win-* は Windows 規則
zh_TWBig5DBCS の高位バイトは空白なし
その他なしmac-* は MacRoman、win-* は Windows-1252。ただし th_TH と ru_RU は除くmac-* は Mac 規則、win-* は Windows 規則

th_TH のバイトページは MacThai、ru_RU は MacCyrillic です。対応する win-* ID でも同じページを使います。中国語プロファイルでは、ソースの照合器が区別する経路で幅とかなを区別します。関数ごとの正確な強度は テキスト照合 を参照してください。

ピボットのラベル ​

ピボットの見出しもプロファイルデータです。以下では ␠ が保存される末尾の空白を表します。grand total は通常の合計見出し、hierarchy total は localeFacts() が返す階層合計見出しです。

ロケールGrand totalHierarchy total行の接頭辞列の接頭辞値の接頭辞
ja_JP合計総計行フィールド␠列フィールド␠値␠
en_USTotalGrand TotalRow Field␠Column Field␠Value␠
de_DEGesamtGesamtergebnisZeilenfeld␠Spaltenfeld␠Wert␠
fr_FRTotalTotal généralChamp de ligne␠Champ de colonne␠Valeur␠
zh_CN总计总计行字段␠列字段␠值␠
ko_KR합계총합계행 필드␠열 필드␠값␠
th_THผลรวมผลรวมทั้งหมดเขตข้อมูลแถว␠เขตข้อมูลคอลัมน์␠ค่า␠
es_ES, es_MXTotalTotal generalCampo de fila␠Campo de columna␠Valor␠
pt_BRTotalTotal GeralCampo de linha␠Campo de coluna␠Valor␠
ru_RUИтогоОбщий итогПоле строки␠Поле столбца␠Значение␠
zh_TW總計總計列欄位␠欄欄位␠值␠
it_ITTotaleTotale complessivoCampo riga␠Campo colonna␠Valore␠
nl_NLTotaalEindtotaalRijveld␠Kolomveld␠Waarde␠

プロファイルが評価に与える影響 ​

プロファイルが制御する領域は次のとおりです。

  • 数値・真偽値・エラーの表記と解析(小数点・桁区切り、ローカライズされた TRUE / FALSE の名前、日付順)
  • TEXT() の書式文字、キーワード、色名、月名、曜日名
  • 文字列の比較、並べ替え、検索、グループ化、型変換(文字幅とかなの扱いを含む)
  • R1C1 参照の文字と CELL() のコード
  • FORMULATEXT() の関数名と区切り文字(Excel に別名がある場合を含む)
  • DBCS コードページと 1 バイトの CHAR() / CODE() ページ
  • GROUPBY() / PIVOTBY() のラベル
  • 環境依存の INFO() の値
  • シート名の規則(win-* プロファイルでは、追加と名前変更で大文字小文字を問わず History を拒否し、mac-* プロファイルでは受け付けます)
  • ピボットテーブルのラベルとレイアウトの既定値

数式は、英語の関数名と不変の区切り文字で保存されます。プロファイルが変えるのは数式テキストの解釈と結果の表示であり、保存形式ではありません。functionMetadata(name) はロケールに依存せず、構造的なメタデータを返します。利用者向けの関数名や数式テキストを変える場合は、プロファイル対応のローカライズメソッドを使ってください。ワークブックの言語ガイドで境界を、セルの言語切り替えでエディターの挙動を説明しています。

プロファイルを暗黙に切り替えない

同じ数式に見えても、別プロファイルで再計算すると結果が変わる場合があります。アプリが対象にするプロファイル ID を永続化し、起動時に確認してください。

プロファイルの選択と永続化 ​

JavaScript バインディングでは次のように選択します。

ts
const selected = 'mac-365-de_DE'
const status = wb.setExcelProfileId(selected)
if (!status.ok) throw new Error(status.message)
const profile = wb.excelProfileId()
if (!profile.status.ok) throw new Error(profile.status.message)
console.log(profile.value) // mac-365-de_DE
wb.recalc()
python
selected = "mac-365-de_DE"
wb.set_excel_profile_id(selected)
print(wb.excel_profile_id())  # mac-365-de_DE
wb.recalc()

プロファイルはランタイム全体のフラグではなく、ワークブックのインスタンスに属します。そのため同じプロセスで異なるプロファイルのワークブックを共存させられます。プロファイルは XLSX / XLSB ファイルへシリアライズされません。アプリケーションの状態として ID を保存し、読み込み後に再適用してください。プロファイルを変更すると数式は再計算待ちになります。値を読む前に recalc() を呼び出してください。

次に読むもの ​

事実の根拠は Formulon の src/excel_profile.h、src/excel_locale.h、src/excel_locale.cpp と、ロケールおよび照合の Oracle 検証データです。