次のExcelファイルがあります。
すべてのセルをloopingで読み取り、getCell(...)->getValue()
で値を取得します。
_$highestColumnAsLetters = $this->objPHPExcel->setActiveSheetIndex(0)->getHighestColumn(); //e.g. 'AK'
$highestRowNumber = $this->objPHPExcel->setActiveSheetIndex(0)->getHighestRow();
$highestColumnAsLetters++;
for ($row = 1; $row < $highestRowNumber + 1; $row++) {
$dataset = array();
for ($columnAsLetters = 'A'; $columnAsLetters != $highestColumnAsLetters; $columnAsLetters++) {
$dataset[] = $this->objPHPExcel->setActiveSheetIndex(0)->getCell($columnAsLetters.$row)->getValue();
if ($row == 1)
{
$this->column_names[] = $columnAsLetters;
}
}
$this->datasets[] = $dataset;
}
_
ただし、データは正常に読み取りますが、計算はliterallyで読み取ります。
私は議論から理解します このような 計算されたセルにgetCalculatedValue()
を使用できること。
問題は、インポートするExcelシートで、どのセルが計算され、どのセルが計算されないかを事前に知らないことです。
単純な値がある場合は自動的に値を取得し、計算であれば計算の結果を取得する方法でセルの値を読み込む方法はありますか?
getCalculatedValue()
はすべてのセルで機能することがわかりますが、なぜこれがgetValue()
のデフォルトではないのか不思議に思います。方程式自体、いずれの場合でもこれは機能します:
_...->getCell($columnAsLetters.$row)->getCalculatedValue();
_
getCalculatedValue()はすべてのセルで機能するようです。上記を参照
セルの内容(値または数式が含まれる)が不明な場合は、主にセルに数式があるかどうかを確認してから、コピーして貼り付けることをお勧めします。この場合、getOldCalculatedValue()は非常に役立ちます。以下にその例を示します。
$code = $sheet->getCell('A'.$y)->getValue();
if(strstr($code,'=')==true)
{
$code = $sheet->getCell('A'.$y)->getOldCalculatedValue();
}
$objPHPExcel4->setActiveSheetIndex(0)
->setCellValue('A'.$l, $code);
大きなデータセットの場合、getCalculatedValue()関数は非常に面倒であり、正しく実行するには大量のメモリが必要になります。
GetCalculatedValue()は非推奨のようです。代わりにgetFormattedValue()を使用してみてください。
getCalculatedValue()
は、あなたが望む正しい仕事をしているようです。セルにFBV(数式ベースの値)が含まれている場合、正しい値が返されます。そうでない場合は、代わりに通常の値が返されます。