mysql — обновить значения в определенной электронной таблице Google с помощью google-api-php-client (версия 2 — без компоновщика)

Для кода ниже я использую https://github.com/googleapis/google-api-php-client библиотека (Требование клиента — эта библиотека должна использоваться без композитора).

Итак, теперь перейдем к требованию — Мой клиент хочет обновить строки данных с MySQL до таблицы Google (это будет любой лист, например, лист 1 или лист 2).

Я также сталкиваюсь с проблемой размещения нескольких строк и ячеек.

db.php code
<?php
$servername = "localhost";
$username = "newuser";
$password = "password";
$db = "google_sheet";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $db);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "SELECT * FROM   table2";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
// output data of each row
$rowData = mysqli_fetch_all($result);
} else {
echo "No records in table";
}

/* $rowData contains below array
array (size=4)
0 =>
array (size=3)
0 => string 'XXX' (length=3)
1 => string 'Developer' (length=9)
2 => string 'IT' (length=2)
1 =>
array (size=3)
0 => string 'YYY' (length=3)
1 => string 'QA' (length=2)
2 => string 'IT' (length=2)
2 =>
array (size=3)
0 => string 'ZZZ' (length=3)
1 => string 'Developer' (length=9)
2 => string 'IT' (length=2)
3 =>
array (size=3)
0 => string 'AAA' (length=3)
1 => string 'Developer' (length=9)
2 => string 'IT' (length=2) */

Примечание. Вот мой полный код, за исключением учетных данных и идентификатора электронной таблицы (он был изменен по соображениям безопасности).

<?php
//echo phpinfo();
ini_set('display_errors', 1);
error_reporting(E_ALL);
session_start();
include_once "examples/templates/base.php";
require_once 'autoload.php';
include 'db.php';

$client_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'; //Client ID
$service_account_name = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'; //Email Address
$key_file_location = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx';

echo pageHeader("Service Account Access");
if (strpos($client_id, "googleusercontent") == false || !strlen($service_account_name) || !strlen($key_file_location)) {
echo missingServiceAccountDetailsWarning();
exit;
}

$client = new Google_Client();
$client->setApplicationName("Sheets API Testing");
$service = new Google_Service_Drive($client);


if (isset($_SESSION['service_token'])) {
$client->setAccessToken($_SESSION['service_token']);
}
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
$service_account_name, array('https://www.googleapis.com/auth/drive', 'https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive.apps.readonly'), $key
);
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();

// Get access token for spreadsheets API calls
$resultArray = json_decode($_SESSION['service_token']);
$accessToken = $resultArray->access_token;

// The file ID was copied from a URL while editing the sheet in Chrome
$fileId = '1JfnVnz8TxxxxxxxxxxxxxxxxxxxxxxxxxxA'; //change for security reasons

function updateFile($service, $fileId, $newTitle, $newDescription, $newMimeType = null, $rowData, $newRevision, $currentRow) {
try {
// First retrieve the file from the API.
$file = $service->files->get($fileId);

// File's new metadata.
$file->setTitle($newTitle);
$file->setDescription($newDescription);
$file->setMimeType($newMimeType);
// File's new content.
//        foreach ($rowData as $row) {
$additionalParams = array(
'newRevision' => $newRevision,
'data' => $rowData,
'mimeType' => $newMimeType,
'uploadType' => 'multipart',
'convert' => true,
);
// Send the request to the API.
$updatedFile = $service->files->update($fileId, $file, $additionalParams);
return $updatedFile;
//        }
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
}

$currentRow = 1;
foreach ($rowData as $row) {
$responseData = updateFile($service, $fileId, 'Update G Excel', 'Update GG Excel Desc', 'text/csv', $row, true, $currentRow);
var_dump($responseData);
$currentRow++;
die;
}

Выше код работает только для ячейки А1 листа 1. Мне нужно обновить несколько ячеек и строк. Но я не получаю никаких полезных документов. Любая помощь будет высоко оценена.

Текущий выход — обновляется только 1 ячейка в первом ряду первого листа.

Ожидаемый результат — что-то вроде этого

Name    Role        Department
XXX     Developer   IT
YYY     QA          IT
ZZZ     Developer   IT
AAA     Developer   IT

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]