2

ECMA-376、第2版、パート1-基本およびマークアップ言語リファレンスによると、SpreadsheetMLは、3つの可能な互換性設定とさまざまな範囲で日付シリアル値をサポートします。

http://www.documentinteropinitiative.com/implnotes/ISO-IEC29500-2008/001.018.017.004.001.000.000.aspx

  • 1900日付ベースシステムでは、下限は1月1日-9999で、シリアル値は-4346018です。この日付ベースシステムの基準日は1899年12月30日で、シリアル値は0です。
  • 1900下位互換性の日付ベースシステムでは、下限は1900年1月1日で、シリアル値は1です。この日付ベースシステムの基準日は1899年12月31日で、シリアル値は0です。
  • 1904下位互換性の日付ベースシステムでは、下限は1904年1月1日で、シリアル値は0です。この日付ベースシステムの基準日は1904年1月1日で、シリアル値は0です。

ただし、Microsoft Office Excel2010を使用して日付シリアルが1の*.xlsxファイルを生成すると、*。xlsxファイルにはdateCompatibility属性セット(「1900日付ベースシステム」を示す)がなく、日付シリアルに関連付けられた日付が設定されます。 1は1900年1月1日です(「1900下位互換性」を示します)。

workbookPr要素はこれであり、編集されておらず、dateCompatibility属性はありません。

<x:workbookPr defaultThemeVersion="124226" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main" />

そして、これは1の日付シリアルとそれを日付としてフォーマットしたテキスト結果を示すデータの行です。

   <x:row r="3" spans="1:2">
     <x:c r="A3">
       <x:v>1</x:v>
     </x:c>
     <x:c r="B3" t="str">
       <x:f t="shared" si="0" />
       <x:v>1900-01-01 00:00:00.0</x:v>
     </x:c>
   </x:row>

数式は日付の書式設定であり、ワークシートの前半で参照されています。

    <x:f t="shared" ref="B1:B42" si="0">TEXT(A1, "yyyy-mm-dd HH:mm:ss.0")</x:f>

この式は、以下のスクリーンショットに示されているように、日付のシリアル番号に日付形式のパターンを適用した場合と同じ結果になります。

代替テキスト

また、負の日付をフォーマットするとエラーが発生します。これは、にdateCompatibility属性がないにもかかわらず、Excelが実際に下位互換性のある日付システムを使用していることを示すもう1つの指標ですworkbookPr

ワークブックのオプションには、1904日付システムのチェックされていないチェックボックスのみが表示されます。1900年の日付ベースと1900年の下位互換性のオプションが表示されません。

仕様を間違って読んでいますか?またはSpreadsheetML?または、他の何か?

4

1 に答える 1

3

Excelのデフォルトの実装はdateCompatibility="1"(つまり、1900の下位互換性)であるため、存在しない場合でも、そのままですdateCompatibility="1"。ExcelはSpreadsheetMLを完全には実装していないことに注意してください(WordとPowerPointもそれぞれのMLを完全に実装しておらず、2010クライアントバージョンでは、標準でサポートされていない方法でMLを拡張します)。1と3は、シリアル値から日付値への変換では(非常にうまく)実装されていないようです。

これと使用に関してECMAにいくらかの反発がありました。http: //xmlguru.cz/2008/01/ecma-response-to-czech-ooxml-commentsdate1904を参照し、 dateCompatibilityで検索してください。

于 2011-01-22T05:45:55.833 に答える