如何使用PHPSpreadsheet同时在Excel上读写?

问题描述 投票:0回答:2

我想读取excel文件并同时将数据写入下一个单元格。

我正在使用 PhpSpreadsheet 库 Github。我尝试过的是

$inputFileType = 'Xlsx';
$inputFileName = 'phones.xlsx';
$sheetname = 'sheet1';

/**  Identify the type of $inputFileName  **/
$inputFileType = \PhpOffice\PhpSpreadsheet\IOFactory::identify($inputFileName);

/**  Create a new Reader of the type that has been identified  **/
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);


/**  Load $inputFileName to a Spreadsheet Object  **/
$spreadsheet = $reader->load($inputFileName);

/**  Convert Spreadsheet Object to an Array for ease of use  **/
$schdeules = $spreadsheet->getActiveSheet()->toArray();

foreach( $schdeules as $single_schedule )
{               
    echo '<div class="row">';
    foreach( $single_schedule as $key => $single_item )
    {
        if($_REQUEST['inbound_phone_no'] == $single_item){
            // echo $key;exit;
            
// I am trying to write the data using this but nothing is going on.
$spreadsheet->getActiveSheet()->setCellValueByColumnAndRow(0, 3, 'PhpSpreadsheet');


            echo '<p class="item">Phone No Exist: ' . $single_item . '</p>';
        }else{
            echo '<p class="item">' . $single_item . '</p>';
        }
    }
    echo '</div>';
}

exit;

如果请求数据和单元格中的值匹配,我想写入一些值,然后通过在工作表的下一个空单元格中写入 1 或 2 来更新状态。 Excel文件图像是

我是这个图书馆的新手。所以如果这是一个新手问题,请忽略它。我已经研究过这些问题了

在PhpSpreadsheet中读取Xlsx文件如何使用 PHPSpreadsheet 在 Excel 上添加新行

非常感谢对此的帮助。

php excel phpexcel phpspreadsheet
2个回答
2
投票

当 ->load 将 xlsx 加载到内存时,您可以更改内存中副本中的值。

完整的方法是这样的:

$fileExcel          = 'load.xlsx';
$target_dir         = 'save.xlsx';
$reader             = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$spreadsheet        = $reader->load($fileExcel);
$sheet              = $spreadsheet->getActiveSheet();
$lsValue            = $sheet->getCell('A1')->getValue();
$spreadsheet->getActiveSheet()->setCellValueByColumnAndRow(0, 3, 'PhpSpreadsheet');
$writer = new  \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->save($target_dir);

因此在退出之前您需要最后两行来保存文件:

$writer = new  \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->save($target_dir);

0
投票

注意:

setCellValueByColumnAndRow
现已弃用;请使用
setCellValue
来代替。

这是使用 phpoffice/phpspreadsheet 版本 1.29 读写相同 Xlsx 文件的简单方法:

$inputFileName = "phones.xlsx";
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
$activeSheet = $spreadsheet->getActiveSheet();
$data = $activeSheet->toArray("", false, false); // the entire sheet as 2D array

// access each row $i, read data from column 3 to new column 4 (zero based index)
for($i=0; $i<count($data); $i++)
{
    $readData = $data[$i][3]; // read row $i, column 3 (zero based index)
    
    $activeSheet->setCellValue([5,$i+1], $readData); // write to column 5, row $i+1 (one based index)
}

$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->save($inputFileName); // save to the same file
© www.soinside.com 2019 - 2024. All rights reserved.