2

値のみを含む phpexcel ドキュメントを Excel5 形式で保存すると、ドキュメントを参照するユーザーは問題なくドキュメントを開いたり閉じたりできます。

しかし、数式をセルに入れると、望ましくない結果が 2 つあります。

ドキュメントを保存する直前に、列の内容に基づいて列幅を設定しました。数式が計算されていないため、列は列内の最大の単一値と同じ大きさにしか見えず、幅が狭すぎます。Excel で開いた後に =sum() 数式が計算されると、内容がセル幅からはみ出し、### の文字列として表示されます。

2 番目の効果は、合計が Excel によって計算されるときに、書籍が Excel によって変更されたものとしてマークされることです。ユーザーがブックを終了しようとすると、変更を保存するかどうかを確認するプロンプトが表示されます。彼らの心の中では何も変わっていないので、これは当惑させられます。

私はドキュメントを検索してきました。$objWriter->setPreCalculateFormulas(true) への参照を見つけましたが、どちらの問題にも役立ちません。

4

1 に答える 1

2

列がAutoSizeに設定されている場合、PHPExcelは、列の計算値(SUM()式の結果)と、千の区切り記号などのフォーマットマスクによって追加された追加の文字に基づいて列幅を計算しようとします。デフォルトでは、これは推定幅です。GDの使用に基づいて、より正確な計算方法を使用できますが、これははるかに大きなオーバーヘッドであるため、デフォルトでオフになっています。を使用して、より正確な計算を有効にできます

PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);

ワークシートに数式が含まれている場合、MS Excelファイルの一部のバージョンには、計算ツリーの詳細を示す追加情報が含まれています。PHPExcelによって保存されないデータです(ツリー構造の計算は大きなオーバーヘッドであるため)。ブックの保存に使用している形式や、ブックを開くために使用しているMSExcelのバージョンは指定しません。ただし、これは、PHPExcelで生成されたファイルをMSExcelで開いたときに変更を保存するように求めるプロンプトの通常の説明です。

于 2012-11-18T18:00:12.483 に答える