PHPExcel编辑单元格并重新保存-';无效的单元格坐标';


PHPExcel edit cells and resave - 'Invalid Cell Coordinate'

我正在尝试修改下载的谷歌文档电子表格,然后将其保存到我的服务器上。文件的下载很好,我把它保存到我的服务器上,它打开得很好,一切都很好。当我将文件加载到PHPExcel对象中,然后修改一些单元格,然后重新保存修改后的文件时,就会出现问题。有人看到我哪里出错了吗?忽略从数据库中获取股票价值的行,它们在我的代码中编码正确——我刚刚从粘贴的代码示例中删除了查询。

我得到错误:

致命错误:未捕获异常"exception",消息为"无效的单元格坐标"CURRENT PRODUCTS"!A2’英寸/PHPExcel''Classes''PHPExcel''Cell.php:508堆栈跟踪:#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');
}

好的,我终于开始工作了。我不得不重写它,这样我就创建了第二个PHPExcel对象,并通过将原始文件中的每个单元格值复制到新文件中来创建一个新文件,并在将文件复制到新的文件时更新我想要更新的值。我手动设置了要复制的列/行的数量,因为我知道需要多少。我还不得不修改PHPExcel的Calculation.php文件,因为我的文件中有一个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');
}