«

csv文件和xlsx文件内容根据指定字段比较

时间:2023-3-1 21:12     作者:wen     分类: PHP


<?php
set_time_limit(0);
ini_set('memory_limit', '-1');

require_once "../vendor/autoload.php";

use PhpOffice\PhpSpreadsheet\IOFactory;

//读取数据
$file_old = __DIR__ . DIRECTORY_SEPARATOR . "sqlResult_3313390.csv";
$file_new = __DIR__ . DIRECTORY_SEPARATOR . "zipbusiness_2021.xlsx";
//打开文件
$fp_old = fopen($file_old, 'r');
$result_old = array();
while (false !== ($row = fgetcsv($fp_old))) {
   $result_old[] = [$row[0], $row[2]];
}

//打开文件
$spreadsheet = IOFactory::load($file_new);
$worksheet = $spreadsheet->getActiveSheet();
$highestRow = $worksheet->getHighestRow(); // 总行数
$highestColumn = $worksheet->getHighestColumn(); // 总列数字母

$highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn); //总列数数字

for ($row = 2; $row <= $highestRow; ++$row) {
   $zipcode = $worksheet->getCellByColumnAndRow(1, $row)->getValue();//邮编
   $city = $worksheet->getCellByColumnAndRow(3, $row)->getValue(); //城市
   foreach ($result_old as $result) {
      if ($result[0] == $zipcode and strtoupper($result[1]) == strtoupper($city)) {
         echo $row . PHP_EOL;
         $worksheet->setCellValueByColumnAndRow($highestColumnIndex + 1, $row, '相同');
         break;
      }
   }
}

//导出工作表
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('./write.xlsx');