2015-11-24 6 views
0

Я пытаюсь изменить загруженную таблицу электронной таблицы googe, а затем сохранить ее на своем сервере. Загрузка файла в порядке, я получаю его сохраненным на моем сервере, и он открывается нормально, и все в порядке. Проблема возникает, когда я загружаю файл в объект PHPExcel, а затем модифицирую некоторые из ячеек и затем сохраняю измененный файл. Может ли кто-нибудь увидеть, где я ошибаюсь? Игнорируйте строки, получающие значение запаса из базы данных, они правильно закодированы в моем коде. Я только что удалил запрос из образца вставленного кода.PHPExcel редактирует ячейки и сохраняет - «Недействительный координат ячейки»

Я получаю сообщение об ошибке:

Fatal error: Uncaught exception 'Exception' with message 'Invalid cell coordinate 'CURRENT PRODUCTS'!A2' in .. /PHPExcel\Classes\PHPExcel\Cell.php:508 Stack trace: #0 ....

function updateDoc($url) 
{ 
    file_put_contents("filename.xlsx",fopen($url,"r")); 
    $filename = "filename.xlsx"; 
    $objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
    $objReader->setReadDataOnly(true); 
    $excel2 = $objReader->load('filename.xlsx'); 
    $excel2->setActiveSheetIndexByName("Current Products"); 
    $rowIterator = $excel2->getActiveSheet()->getRowIterator(); 
    $rows = 1; 
    $columnAsLetters = 'E'; 
    foreach($rowIterator as $row) 
    { 
     if($rows <= 2) 
     { 
      continue;//skip first 2 rows 
     } 
     else 
     { 
      $data = $excel2->getActiveSheet()->getCell($columnAsLetters.$rows)->getCalculatedValue(); 
      $sku = trim($data); 
      $stock = //** I select stock from database **// 
      $r = //** returned sql row **// 
      $stk = $r[0]; 
      $excel2->getActiveSheet()->setCellValue("G" . $rows, $stk); 
     } 
     $rows++; 
    } 

    $objWriter = PHPExcel_IOFactory::createWriter($excel2, 'Excel2007'); 
    $objWriter->setPreCalculateFormulas(FALSE); 
    $objWriter->save('filename2.xlsx'); 
} 
+0

Какая строка в вашем коде генерирует исключение и каково фактическое значение, которое вы пытаетесь сохранить? –

+0

@Alon Насколько я могу судить, комментируя различные разделы своей последней строкой $ objWriter-> save ('filename2.xlsx'); что порождает ошибку. Я просто пытаюсь переписать значение запаса в столбце G с новым значением запаса, взятым из базы данных. –

ответ

0

Хорошо, я наконец-то получил эту работу. Мне пришлось переписать его, чтобы создать второй объект PHPExcel и создать новый файл, скопировав значение каждой ячейки из исходного файла в новый файл и обновив значения, которые я хочу обновить, когда я скопирую файл в новый один. Я вручную задал количество столбцов/строк для копирования, потому что у меня есть представление о том, сколько из них требуется. Мне также пришлось модифицировать файл Calculation.php PHPExcel, так как в моем файле есть vlookup, который ссылается на лист, который не существует в файле, и он все время выдавал ошибку вызова функции cellExists на не-объекте, поэтому я добавил проверьте, существует ли лист, прежде чем пытаться получить ячейку. Мой код:

function updateDoc($url) 
{ 
    file_put_contents("filename.xlsx",fopen($url,"r")); 
    $filename = "filename.xlsx"; 
    $objPHPExcel = new PHPExcel(); 
    $objReader = new PHPExcel_Reader_Excel2007(); 
    $objReader->setLoadAllSheets(); 
    $objPHPExcel = $objReader->load($filename); 
    $sheets = $objReader->listWorksheetNames($filename); 
    // Created file 
    $objPHPExcel2 = new PHPExcel(); 
    $objPHPExcel2->getProperties()->setCreator("User") 
        ->setLastModifiedBy("User") 
        ->setTitle("filename2") 
        ->setSubject("filename2") 
        ->setDescription("filename2") 
        ->setCategory("PublicWEB"); 
    $s=0; 
    foreach($sheets as $sheet) 
    { 
     if($s != 0) 
     { 
      $objPHPExcel2->createSheet($s); 
      $objPHPExcel2->getSheet($s)->setTitle($sheet); 
     } 
     else 
     { 
      $objPHPExcel2->getSheet($s)->setTitle($sheet); 
     } 
     $objPHPExcel->setActiveSheetIndexByName($sheet); 
     $objPHPExcel2->setActiveSheetIndex($s); 
     for($rows = 1 ; $rows < 250 ; $rows++) 
     { 
      for ($col=0 ;$col < 100 ; $col++) 
      { 

       $cellV = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow($col, $rows)->getValue(); 
       if($sheet == "Current Products" && $col == 6 && $rows > 2) 
       { 
        $data = $objPHPExcel2->getActiveSheet()->getCellByColumnAndRow(4,$rows)->getValue(); 
        $sku = trim($data); 
        if($sku != "") 
        { 
         $stock = $mysqli->query("SELECT stock FROM table WHERE partno = '$sku'"); 
         if($stock->num_rows > 0) 
         { 
          $r = $stock->fetch_array(); 
          $stk = $r[0]; 
          $objPHPExcel2->getActiveSheet()->setCellValueByColumnAndRow($col, $rows, $stk); 

         } 
         else 
         { 
          $objPHPExcel2->getActiveSheet()->setCellValueByColumnAndRow($col, $rows, "NA"); 
         } 
        } 
        else 
        { 
         $objPHPExcel2->getActiveSheet()->setCellValueByColumnAndRow($col, $rows, ""); 
        } 
       } 
       else 
       { 
        $objPHPExcel2->getActiveSheet()->setCellValueByColumnAndRow($col, $rows, $cellV); 

       } 
      } 
     } 
     ++$s; 
    } 
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel2, 'Excel2007'); 
    $objWriter->save('filename2.xlsx'); 
} 
Смежные вопросы