Я использую API google sheet с этой логикой для каждого запроса:
- создать лист,
- добавить туда пользовательский запрос (формула),
- результаты запроса fecth,
- удалить созданный лист.
Код создания является последующим с Laravel:
class GoogleSheetsApiClientManager {
private $client;//authorized API client.
private $service = null;
public function __construct($apiOptions) {
$this->client = new Google_Client();
$this->client->setApplicationName(array_get($apiOptions, 'application_name', 'Google Sheets API PHP'));
$this->client->setScopes(array_get($apiOptions, 'scope', Google_Service_Sheets::SPREADSHEETS));
$this->client->setAuthConfig(array_get($apiOptions, 'credential_path'));
$this->client->setAccessType('offline');
$this->service = new Google_Service_Sheets($this->client);
}
public function addNewSheet($spreadsheetId, $hidden = false, $sheetName = false){
try {
$properties = [
'hidden' => $hidden
];
if($sheetName){
$properties['title'] = $sheetName;
}
$body = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest([
'requests' => [
'addSheet' => [
'properties' => $properties
]
]
]);
$result = $this->service->spreadsheets->batchUpdate($spreadsheetId, $body);
return $result;
}
catch (\Exception $exception) {
Log::error('Add new sheet using Google Sheet API : '.$exception->getMessage());
return false;
}
}
}
И звонок такой:
$apiOptions = [
'application_name' => 'My app name',
'credential_path' => __DIR__.'/service_account-secret.json'
];
$googleSheetManager = new GoogleSheetsApiClientManager($apiOptions);
$spreadsheetId = '--theSpreasheetId--';
$mySheet = $googleSheetManager->addNewSheet($spreadsheetId);
Проблема: каждый раз, когда я создаю новый лист, его имя основывается на последнем, созданном. Например: имя последнего листа sheet5
, даже sheet5
было удалено. Я получил новый лист с именем sheet6
.
Я хотел бы иметь минимально возможное имя, означающее, что если sheet5
& sheet4
нет (но присутствует sheet3
), я хотел бы новое имя sheet4
, а не бесконечное увеличение имя