Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
463 views
in Technique[技术] by (71.8m points)

excel - spout php read new column from xlsx then insert to existing file xlsx

I want to update a column of test.xlsx file from testinput.xlsx file when names are equal.

I have these

test.xlsx enter image description here

testinput.xlsx enter image description here

I want this

testnew.xlsx enter image description here

this is my php code

but i am really confused, i think i am lost in iterating and problem with the $writer->addRow($row);

<?php

require_once 'spout/src/Spout/Autoloader/autoload.php';

use BoxSpoutReaderCommonCreatorReaderEntityFactory;
use BoxSpoutWriterCommonCreatorWriterEntityFactory;

$existingFilePath = 'test.xlsx';
$existingFilePath2 = 'testinput.xlsx';
$newFilePath = 'testnew.xlsx';

// we need a reader to read the existing file...
$reader = ReaderEntityFactory::createReaderFromFile($existingFilePath);
$reader->open($existingFilePath);

$reader2 = ReaderEntityFactory::createReaderFromFile($existingFilePath2);
$reader2->open($existingFilePath2);
//$reader->setShouldFormatDates(true); // this is to be able to copy dates

// ... and a writer to create the new file
$writer = WriterEntityFactory::createWriterFromFile($newFilePath);
$writer->openToFile($newFilePath);


// let's read the entire spreadsheet
foreach ($reader->getSheetIterator() as $sheetIndex => $sheet) {
    // Add sheets in the new file, as you read new sheets in the existing one
    if ($sheetIndex !== 1) {
        $writer->addNewSheetAndMakeItCurrent();
    }

    foreach ($sheet->getRowIterator() as $rowIndex => $row) {
        $name = $row->getCellAtIndex(0);
        $name_index = 0;
        $data = $row->getCellAtIndex(1);
        $data_index = 1;
        $input = $row->getCellAtIndex(2);
        $input_index = 2;
        echo "<br><br>rowIndex = {$rowIndex} name = {$name} <br>";

        foreach ($reader2->getSheetIterator() as $sheetIndex2 => $sheet2) {

            foreach ($sheet2->getRowIterator() as $rowIndex2 => $row2) {
                $name2 = $row2->getCellAtIndex(0);
                $name_index2 = 0;
                $newinput2 = $row2->getCellAtIndex(1);
                $newinput_index2 = 1;

                if ($name == $name2) {


                    $temp_rowIndex = intval($rowIndex)+1;
                    $temp_rowIndex2 = intval($rowIndex2)+1;

                    echo "rowIndex = {$rowIndex} name = {$name} ---- rowIndex2 = {$rowIndex2} name2 = {$name2} <br>";

                    $row->setCellAtIndex(WriterEntityFactory::createCell($newinput2), 3);

                }
            }
        }
        // write the edited row to the new file
        $writer->addRow($row);
    }
}

$reader->close();
$writer->close();
question from:https://stackoverflow.com/questions/65897948/spout-php-read-new-column-from-xlsx-then-insert-to-existing-file-xlsx

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...