2

この phpspreadsheet は非常に優れていますが、実際にはドキュメントがありません。それで、私はたくさん読んで、自分の個人的な valueBinder を定義しようとしていました。それは正しいと思いますが、実行されていないと思います。

まず最初に、次のようにバインダーを作成します。

class MyValueBinder extends DefaultValueBinder{
/**
 * Bind value to a cell.
 *
 * @param Cell $cell Cell to bind value to
 * @param mixed $value Value to bind in cell
 *
 * @return bool
 */
   public function bindValue(Cell $cell, $value){
       if($cell->getColumn() == 'D'){
          // Set value explicit
          //$cell->setValueExplicit($value, DataType::TYPE_STRING);
          $cell->setValueExplicit("ok", DataType::TYPE_STRING);
       }
       return parent::bindValue($cell, $value);
   }
}

ご覧のとおり、D列のすべてのセルにタイプ文字列をバインドするだけでしたが、デバッグのためにD列のすべてのセルにokの値を入れようとしました。

次に、私のメインページで:

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Cell\Cell;

\PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder(new \PhpOffice\PhpSpreadsheet\Cell\MyValueBinder());

$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();

//After this I load my file e do some modifications and then I make
// a Writer CSV and write everything on a csv file.

この時点で悲しいことがありました。csv ファイルで同じ間違った値を見つけたからです。たとえば、csv に 1345 のような数値がある場合、1,345 があります。

何万もの行があるため、このことを修正するために CSV を再スキャンしたくありません

4

0 に答える 0