linebot 串google sheetg使用php的坑

linebot 串google sheetg使用php的坑

目前發現

1.如果有時候正常,有時候不正常,到後來完全無作用不寫入google sheet,但之前都沒問題,很有可能不是你的程式碼錯誤,是主機商怪怪的,我之前用sugxx 主機,一開始ˇ沒問題用爽爽,後來開始line串不到google sheet,會timeout(可能)的樣子,後來,改用另一家主機商 遠X 居然好了,曾經一度有懷疑可能是ignore_user_abort(true) 不起作用,但目前還是不清楚,確實換主機完全正常了,line串到php去驅動google sheet又成功了。

google sheet如果不指定範圍就append只要輸入空格就會發生推移-Appending rows with empty cells results in increasing row indentation

使用google sheet api V4 with php

google sheet如果不指定範圍就寫append程式只要輸入空格就會發生推移如下

row

 

$rangeNOW=’代墊費’;

$values = [[date(‘Y/m/d’),$item, $money, ‘ ‘ ,’努狗巴弟巴弟紀錄’]]

$body = new \Google_Service_Sheets_ValueRange([
‘values’ => $values
]);

$params = [
‘valueInputOption’ => ‘USER_ENTERED’
];

$service->spreadsheets_values->append($spreadsheetId, $rangeNOW, $body, $params);

 

只要插入新的一行,會從你上一列最後出現值的欄位下方開始插入新一列的資料,
非常靠北

後來再github找到解
(這裡尾巴解)
https://github.com/burnash/gspread/issues/537

也就是你一定要"指定範圍"

$rangeNOW=’代墊費!:A60′;
//要指定代墊費這個工作表從A60格開始 append
‘工作表名稱!欄位點’

那很靠北的,也就是你要知道目前最後一列用到哪格了,
很抱歉sheet api沒有提供這個給php,不像mysql那樣方便

所以我自己用了很愚蠢的方式,先取得這工作表資料,再算出最後一列

//這邊算取得最後一ROW是第幾ROW
$range=’代墊費’;
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
$value_all = $response->getValues();//所有資料
$lastRow_number=count($value_all); //取得最後一行,例如第111行

//$lastRow_number 這個就是目前最後一ROW囉

再回到上述程式

$rangeNOW=’代墊費!A’.$lastRow_number; //這樣就是 代墊費!A60 囉

$service->spreadsheets_values->append($spreadsheetId, $rangeNOW, $body, $params);

google sheet api wiht php 好多坑