2017-08-25 18 views
0

PHPExcelライブラリを使用してCSVファイルをXLSXファイルに変換しようとしています。 csvファイルがPHPExcelオブジェクトに読み込まれ、xlsxファイルとして保存される前に、関連する列の内容に基づいて列幅を再計算して設定します。私は、ファイル内の任意の式が存在する場合、(setAutoSizeするために呼び出すことがわかった研究のビットとPHPExcelが計算式を妨げる

$objReader = PHPExcel_IOFactory::createReader('CSV'); 
$objPHPExcel = $objReader->load("test.csv"); 

$activesheet = $objPHPExcel->getActiveSheet(); 
$lastColumn = $activesheet->getHighestColumn(); // get last column with data 
$lastColumn++; 
for ($column = 'A'; $column != $lastColumn; $column++) { // for each column until last 
    $activesheet->getColumnDimension($column)->setAutoSize(true); // set autowidth 
} 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save("downloads/test.xls"); 

)列幅を計算するときにそれらを利用するための値を計算します。 私の問題は、私のcsvファイルの中に、公式ではない=(等号)で始まる値が含まれていることです。例えば、 '===='のようなセル値。これにより、上記のコードでエラーPHPExcel_Calculation_Exception Formula Error: An unexpected error occuredがスローされます。

私の入力csvファイルに式が含まれていないことがわかっているので、= signで始まる値を含むセルの値を計算するPHPExcelを防ぐ方法がありますか?

+1

値を入力する前にセルをテキストに設定するか(または設定後に再入力する)、またはその前に '' 'を追加する=>追加のコードを実行する...とはい、迷惑です:/ –

+0

@DirkReichel ;それらのセルを '= 'で式に変換するロジックをオーバーライドするカスタムバインダーを使用すると、単純化することができます –

答えて

0

リサーチと提案があった後、私はすべてのセルを繰り返して、セル値(=記号で始まる)を書き直してしまい、PHPExcelを数式として考えることができなくなりました。この場合、setCellValueExplicit()メソッドは、セルの値を数式として考慮しないようPHPExcelに指示します。

foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { 
    foreach ($worksheet->getRowIterator() as $row) { 
     $cellIterator = $row->getCellIterator(); 
     $cellIterator->setIterateOnlyExistingCells(true); 
     foreach ($cellIterator as $cell) { 
      if (preg_match('/^=/', $cell->getValue())) { 
       $cellcoordinate = $cell->getCoordinate(); 
       $worksheet->setCellValueExplicit($cellcoordinate,$worksheet->getCell($cellcoordinate)); 
      } 
     } 
    } 
} 

これは痛いですが、より良い解決策を見つけることができませんでした。

関連する問題