Как сохранить лидирующие нули при загрузке CSV - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь загрузить CSV со списком товаров и количеств на мою веб-страницу.Но когда CSV загружается в phpexcel, он сбрасывает ведущие нули на идентификаторы продуктов.Как сохранить начальные нули для одного столбца для разных размеров CSV.Я также использую createReader ('CSV')

Я пытался использовать setFormatCode, но получаю сообщение об ошибке, в котором говорится, что функция не существует.Даже после того, как я включу файлы.Я также пытался использовать setCellValueExplicit, но он по-прежнему сбрасывает начальный ноль.

Вот обрабатываемые заголовки:

$objPHPExcel = $objReader->load($uploadFile);
$sheet = $objPHPExcel->getActiveSheet();
$validateDelimiter = $sheet->getCell('A1')->getValue();

И это то, где обрабатываются строки не заголовки:

    //process rows
    if(isset($headers['asin/upc']) || isset($headers['asin']) || isset($headers['barcode/asin'])) {
        foreach($sheet->getRowIterator() as $row) {
          $cellIterator = $row->getCellIterator();
          foreach($cellIterator as $cell) {
            if(!$S_EW_Errors->Errors()) {
              //Set useful vars
              $column = $cell->getColumn();
              $columnIndex = PHPExcel_Cell::columnIndexFromString($column);
              $rowIndex = $row->getRowIndex();

              //grab header detail details
              if($rowIndex > 1) {
                //This code throws an error
                //$sheet->getStyle($cell->getCoordinate())->getNumberFormat()->setFormatCode('0000000000');
                //This code doesn't preserve leading zeros
                //$sheet->setCellValueExplicit('A'.$rowIndex, $sheet->getCell($asinColumn.$rowIndex)->getValue(), PHPExcel_Cell_DataType::TYPE_STRING);
                $asin = trim($sheet->getCell($asinColumn.$rowIndex)->getValue());
                //see if this needs explored or not
                $detailArr[$asin]['explored'] = $PoMgr->asinExists($asin);
                if(isset($columnMappings[$column])) {
                  if($columnMappings[$column] == 'asin' || $columnMappings[$column] == 'asin/upc' || $columnMappings[$column] == 'barcode/asin') {
                    //stringify asin
                    $detailArr[$asin][$columnMappings[$column]] = trim($sheet->getCell($column.$rowIndex)->getValue());
                  } else if ($columnMappings[$column] == 'unit_price' || $columnMappings[$column] == 'buy cost') {
                    //replace $ values
                    $detailArr[$asin]['unit_price'] = trim(str_replace('$', '', $sheet->getCell($column.$rowIndex)->getValue()));
                  } else if ($columnMappings[$column] == 'quantity') {
                    if(isset($detailArr[$asin]['quantity'])) {
                      $detailArr[$asin]['quantity'] += trim($sheet->getCell($column.$rowIndex)->getValue());
                    } else {
                      $detailArr[$asin][$columnMappings[$column]] = trim($sheet->getCell($column.$rowIndex)->getValue());
                    }
                  } else if ($columnMappings[$column] == 'title') {
                    $detailArr[$asin]['name'] = trim($sheet->getCell($column.$rowIndex)->getValue());
                  } else {
                    //special case for android csv
                    if (!isset($asin) && $columnMappings[$column] == 'productid') {
                      $asin = trim($sheet->getCell('G'.$rowIndex)->getValue());
                    } 
                    $detailArr[$asin][$columnMappings[$column]] = trim($sheet->getCell($column.$rowIndex)->getValue());
                  }
                }

              } //index > 1
            } //no errors
          } //foreach as cell
          if($rowIndex > 1) {
            if(!empty($vendorId)) $detailArr[$asin]['vendor_id'] = $vendorId;
            if(!empty($affiliateId)) $detailArr[$asin]['affiliate_id'] = $affiliateId;
            if(!empty($accountId)) $detailArr[$asin]['account_id'] = $accountId;
            if(!empty($userId)) $detailArr[$asin]['user_id'] = $userId;
          }
        } //foreach as row
    }

Я прокомментировал строки, которые я пробовал ранее.

Все идентификаторы - 10 символов, так что именно этого ожидает веб-страница, и она должна быть точной для создания планов отгрузки.Но если они начинаются с 0, то на странице создаются планы с 9-значными идентификаторами.

...