如何通过Google API批量将MySQL查询结果导入Google Sheets
批量导入MySQL数据到Google Sheets并添加分组标识行
需求说明:遍历MySQL查询结果,批量导入Google Sheets,当refnumber(即PONumber)变更时插入带背景色的标识行,替代原逐行添加的低效方式。
修改后的代码
$service = new \Google_Service_Sheets($client); $spreadsheetId = 'xxxxxxxxxxx'; $spreadsheet = $service->spreadsheets->get($spreadsheetId); $result = $db->query("SELECT * from pomasterview"); $oldref = '1'; $allRows = []; $highlightRows = []; $currentRow = 1; if($result->num_rows > 0){ while($row = $result->fetch_assoc()){ if ($oldref != $row['refnumber']){ // 插入PONumber变更的标识行 $highlightRow = ["PO #{$row['refnumber']}", ""]; $allRows[] = $highlightRow; $highlightRows[] = $currentRow; $currentRow++; } // 添加当前数据行 $dataRow = [$row['partitem'], $row['partqty']]; $allRows[] = $dataRow; $currentRow++; $oldref = $row['refnumber']; } } // 批量插入所有数据 if(!empty($allRows)){ $valueRange = new \Google_Service_Sheets_ValueRange(); $valueRange->setValues($allRows); $range = 'Sheet1'; $options = ['valueInputOption' => 'USER_ENTERED']; $service->spreadsheets_values->append($spreadsheetId, $range, $valueRange, $options); // 批量设置标识行背景色 $requests = []; $sheetId = $spreadsheet->getSheets()[0]->getProperties()->getSheetId(); foreach($highlightRows as $rowNum){ $requests[] = [ 'repeatCell' => [ 'range' => [ 'sheetId' => $sheetId, 'startRowIndex' => $rowNum - 1, 'endRowIndex' => $rowNum, 'startColumnIndex' => 0, 'endColumnIndex' => 2 ], 'cell' => [ 'userEnteredFormat' => [ 'backgroundColor' => [ 'red' => 0.9, 'green' => 0.7, 'blue' => 0.0 ] ] ], 'fields' => 'userEnteredFormat.backgroundColor' ] ]; } if(!empty($requests)){ $batchUpdateRequest = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest([ 'requests' => $requests ]); $service->spreadsheets->batchUpdate($spreadsheetId, $batchUpdateRequest); } }
核心改动说明
- 新增
$allRows数组统一存储所有待插入行(含标识行和数据行),最后仅调用一次append完成批量导入,减少API调用次数提升效率。 - 新增
$highlightRows记录标识行位置,通过batchUpdate批量设置背景色,实现分组标识效果。 - 移除原循环内的逐行插入逻辑,改为一次性提交所有数据。
- 标识行的文本内容、背景色、覆盖列数均可根据需求自定义调整。
内容的提问来源于stack exchange,提问作者Joey Martin
相关产品推荐
相关产品推荐

