我有一个字符串数组,我需要根据数组的大小将其附加到电子表格中,从第一列到第n列。
字符串可以表示几种类型的值,例如数字,日期等,因此必须在用户输入时将它们放在工作表中以保持其含义。
据我了解,Google API提供了两种附加值的方法,但它们似乎都不适合这种情况。这是我遇到的问题:
这种方法的问题是我无法找到一种方法来设置用户输入的值。这是一个代码示例:
// Build the CellData array
$values = array();
foreach( $ary_values 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(0);
$append_request->setRows($rowData);
$append_request->setFields('userEnteredValue');
// Set the request
$request = new Google_Service_Sheets_Request();
$request->setAppendCells($append_request);
(完整工作代码为here)
即使使用CellData.setUserEnteredValue
,数据也会被解释为字符串,因为必须使用ExtendedValue.setStringValue
(或其他支持的方法,即setBoolValue
,setFormulaValue
来设置值, setNumberValue
)。
使用此方法我可以在用户输入时呈现数据,但在几种情况下,“附加”在错误的位置完成。如the documentation中所述:
输入范围用于搜索 现有数据并找到该范围内的“表格”。价值观将是 附加到表的下一行,从第一列开始 该表。
因此,这种方法的行为与前一种方法不同,这对我来说会产生问题。
这是一段应该做我想要的代码:
$body = new Google_Service_Sheets_ValueRange([
'values' => [ $array_values ]
]);
$params = [
'valueInputOption' => 'USER_ENTERED'
];
// the n-th column
$end_column = chr( ord('A') + count($array_values));
$result = $sheet_service->spreadsheets_values->append(
$fileId,
$sheetName . "!A1:" . $end_column . "1",
$body,
$params
);
事实上,它运作良好但有一些例外,例如:
A1
为空,则append
方法会将值从第2列开始(请参阅此example以了解原因)。append
方法将“填补空白”,而不是将值放在最后写入的行之后。我做错了吗?有没有办法用一种或另一种方法制作我想要的东西?
回顾一下:
欢迎任何建议!