2

このエラー「式の循環参照」を受け取り続けます。

Excelファイルをダウンロードしようとしているとき。

今、私のファイルから式の「=」を削除するとき

$this->exportObj->setActiveSheetIndex(0)
                                ->setCellValue(strtoupper($this->abc[$currentColumn]).$currentLine, (str_replace("=", "", $column)) );

ファイルをダウンロードすることはできますが、もちろんフォーマルは機能しません..

これは私の Excel ファイルです: http://www.2shared.com/document/SPtnvq6e/excel.html

そこにある私の数式の何が問題になっていますか? 私が間違っていることは何も見えません..

4

2 に答える 2

8

循環式とは、(たとえば) セル A1 に式 =B1+1 が含まれ、セル B1 に =A1+1 が含まれているようなものです。式を実行すると、それ自体にループバックする一連の計算が行われます。

これは Excel で有効ですが、既定の動作では、エラーが発生したときにエラー メッセージが生成されます。ただし、この動作を変更して、Excel が指定されたサイクル数または反復回数で数式を処理するようにすることができます。

PHPExcel は両方の動作をサポートしています。デフォルトでは、Excel と同様にエラー メッセージが生成されます。ただし、計算エンジンの $cyclicFormulaCount プロパティを 0 より大きい値に設定すると、Excel が実行できる 2 番目の動作がエミュレートされます。最も単純なレベルでは:

PHPExcel_Calculation::getInstance()->cyclicFormulaCount = 1;

循環エラーを抑制し、基本的な循環計算を実行できるようにします。 $cyclicFormulaCount をより高い値に設定すると、(指定した値まで) いくつかのサイクルまたは反復を介して数式を計算できます。

getOldCalculatedValue() メソッドは、MS Excel 自体によって最後に実行された計算の結果を取得します。これは正しいかもしれませんが、保証されていません (例: Excel 自体で数式の計算が抑制されている場合)。

または、ファイルを保存する前に PHPExcel が式を計算しないようにすることもできます。

$objWriter->setPreCalculateFormulas(FALSE);

編集

バージョン 1.7.9 以降、計算エンジンはワークブック ファイルごとに 1 つの計算エンジン インスタンスが存在するように変更されているため、どのインスタンスに対して cyclicFormulaCount を設定する必要があるかを示す必要があります。

それよりも

PHPExcel_Calculation::getInstance()->cyclicFormulaCount = 1;

あなたが使うだろう

PHPExcel_Calculation::getInstance($objPHPExcel)->cyclicFormulaCount = 1;
于 2012-12-09T11:44:38.593 に答える
0

私にとって、これは後方の列範囲を指定したときに発生しました。そのため、 E10:E11 の代わりに E11:E10 を与えていましたが、それを下位から上位に並べると、エラーはなくなりました。私は =SUM() 関数を使用していましたが、phpExcel と Excel では逆方向に処理できないと思います......

于 2020-07-01T02:55:38.717 に答える