【问题标题】:PHPExcel edit cells and resave - 'Invalid Cell Coordinate'PHPExcel编辑单元格并重新保存 - '无效的单元格坐标'
【发布时间】:2015-11-24 14:11:58
【问题描述】:

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

我得到错误:

致命错误:在.. /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');
}

【问题讨论】:

  • 代码中引发异常的行是什么,您要保存的实际值是多少?
  • @Alon 据我所知,通过注释掉各个部分,它的最后一行 $objWriter->save('filename2.xlsx');引发错误。我只是想用从数据库中获取的新股票值覆盖 G 列中的股票值。

标签: php phpexcel


【解决方案1】:

好的,我终于搞定了。我不得不重写它,以便创建第二个 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');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 2017-10-06
    相关资源
    最近更新 更多