如何批量更新 Google 工作表附加数字而不是 strings/apostrophes
How to BatchUpdate Google Sheets appending numbers instead of strings/apostrophes
我花时间开发了一个将数据附加到 Google sheet 的解决方案。我正在使用 PHP 库,一切正常。
我有一个功能可以正常工作。我可以在需要时附加数据。函数为:
function addRowToSpreadsheet($sheetsService, $spreadsheetId, $sheetId, $newValues = []) {
// Build the CellData array
$values = [];
foreach ($newValues AS $d) {
$cellData = new Google_Service_Sheets_CellData();
$value = new Google_Service_Sheets_ExtendedValue();
$value->setStringValue($d);
$cellData->setUserEnteredValue($value);
$values[] = $cellData;
}
// Build the RowData
$rowData = new Google_Service_Sheets_RowData();
$rowData->setValues($values);
// Prepare the request
$append_request = new Google_Service_Sheets_AppendCellsRequest();
$append_request->setSheetId($sheetId);
$append_request->setRows($rowData);
$append_request->setFields('userEnteredValue');
// Set the request
$request = new Google_Service_Sheets_Request();
$request->setAppendCells($append_request);
// Add the request to the requests array
$requests = array();
$requests[] = $request;
// Prepare the update
$batchUpdateRequest = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest(array(
'requests' => $requests
));
try {
// Execute the request
$response = $sheetsService->spreadsheets->batchUpdate($spreadsheetId, $batchUpdateRequest);
if ($response->valid()) {
return true;// Success, the row has been added
}
} catch (Exception $e) {
error_log($e->getMessage());// Something went wrong
}
return false;
}
问题是:如果我通过以下数组发送:
('Joe', 'Schmo', 23)
插入的是:
乔 |嘘 | '23
我怎样才能发送这些数据而不是让号码带有撇号。我想要的是:
乔 |嘘 | 23
-- 根据答案更新:
如果我这样设置数组:
$values = array('25000.00','test', intval(2));
我试图通过推送 intval() 来强制类型。问题是这会触发以下错误:
Google_Service_Exception in REST.php line 118:
{
"error": {
"code": 400,
"message": "Invalid value at 'requests[0].append_cells.rows.values[2].user_entered_value.string_value' (TYPE_STRING), 2",
"errors": [
{
"message": "Invalid value at 'requests[0].append_cells.rows.values[2].user_entered_value.string_value' (TYPE_STRING), 2",
"domain": "global",
"reason": "badRequest"
}
],
"status": "INVALID_ARGUMENT"
}
}
谢谢
在excel '23是一个字符串(字符),23是一个数字。数组元素需要转换
参见:Openpyxl Numbers Stored as Text
经过大量审查、谷歌搜索和其他废话。我已经弄清楚了这个问题。问题很简单。我循环遍历值的这段代码:
foreach ($newValues AS $d) {
$cellData = new Google_Service_Sheets_CellData();
$value = new Google_Service_Sheets_ExtendedValue();
$value->setStringValue($d);
$cellData->setUserEnteredValue($value);
$values[] = $cellData;
}
需要一个小更新:
foreach ($newValues AS $d) {
$cellData = new Google_Service_Sheets_CellData();
$value = new Google_Service_Sheets_ExtendedValue();
if(is_numeric($d)){
$value->setNumberValue($d);
} else {
$value->setStringValue($d);
}
$cellData->setUserEnteredValue($value);
$values[] = $cellData;
}
问题是 PHP 库已经支持它,但它的文档很少。我不得不深入图书馆。
在:vendor/google/apiclient-services/src/Google/Service/Datastore/Value.php
还有其他函数可以处理其他类型的数据。我只需要 运行 一个 if/else 或案例。
我花时间开发了一个将数据附加到 Google sheet 的解决方案。我正在使用 PHP 库,一切正常。
我有一个功能可以正常工作。我可以在需要时附加数据。函数为:
function addRowToSpreadsheet($sheetsService, $spreadsheetId, $sheetId, $newValues = []) {
// Build the CellData array
$values = [];
foreach ($newValues AS $d) {
$cellData = new Google_Service_Sheets_CellData();
$value = new Google_Service_Sheets_ExtendedValue();
$value->setStringValue($d);
$cellData->setUserEnteredValue($value);
$values[] = $cellData;
}
// Build the RowData
$rowData = new Google_Service_Sheets_RowData();
$rowData->setValues($values);
// Prepare the request
$append_request = new Google_Service_Sheets_AppendCellsRequest();
$append_request->setSheetId($sheetId);
$append_request->setRows($rowData);
$append_request->setFields('userEnteredValue');
// Set the request
$request = new Google_Service_Sheets_Request();
$request->setAppendCells($append_request);
// Add the request to the requests array
$requests = array();
$requests[] = $request;
// Prepare the update
$batchUpdateRequest = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest(array(
'requests' => $requests
));
try {
// Execute the request
$response = $sheetsService->spreadsheets->batchUpdate($spreadsheetId, $batchUpdateRequest);
if ($response->valid()) {
return true;// Success, the row has been added
}
} catch (Exception $e) {
error_log($e->getMessage());// Something went wrong
}
return false;
}
问题是:如果我通过以下数组发送:
('Joe', 'Schmo', 23)
插入的是:
乔 |嘘 | '23
我怎样才能发送这些数据而不是让号码带有撇号。我想要的是:
乔 |嘘 | 23
-- 根据答案更新:
如果我这样设置数组:
$values = array('25000.00','test', intval(2));
我试图通过推送 intval() 来强制类型。问题是这会触发以下错误:
Google_Service_Exception in REST.php line 118:
{
"error": {
"code": 400,
"message": "Invalid value at 'requests[0].append_cells.rows.values[2].user_entered_value.string_value' (TYPE_STRING), 2",
"errors": [
{
"message": "Invalid value at 'requests[0].append_cells.rows.values[2].user_entered_value.string_value' (TYPE_STRING), 2",
"domain": "global",
"reason": "badRequest"
}
],
"status": "INVALID_ARGUMENT"
}
}
谢谢
在excel '23是一个字符串(字符),23是一个数字。数组元素需要转换
参见:Openpyxl Numbers Stored as Text
经过大量审查、谷歌搜索和其他废话。我已经弄清楚了这个问题。问题很简单。我循环遍历值的这段代码:
foreach ($newValues AS $d) {
$cellData = new Google_Service_Sheets_CellData();
$value = new Google_Service_Sheets_ExtendedValue();
$value->setStringValue($d);
$cellData->setUserEnteredValue($value);
$values[] = $cellData;
}
需要一个小更新:
foreach ($newValues AS $d) {
$cellData = new Google_Service_Sheets_CellData();
$value = new Google_Service_Sheets_ExtendedValue();
if(is_numeric($d)){
$value->setNumberValue($d);
} else {
$value->setStringValue($d);
}
$cellData->setUserEnteredValue($value);
$values[] = $cellData;
}
问题是 PHP 库已经支持它,但它的文档很少。我不得不深入图书馆。
在:vendor/google/apiclient-services/src/Google/Service/Datastore/Value.php
还有其他函数可以处理其他类型的数据。我只需要 运行 一个 if/else 或案例。