通过传递电子表格ID和工作表ID获取g​​ooglesheet数据

时间:2019-02-05 05:42:15

标签: php google-sheets

我需要获取Google表格数据,然后将其下载为csv。但问题是我需要按网址中的工作表ID获取数据。 我正在使用此软件包"google/apiclient": "^2.0"

代码

        $sheets = new \Google_Service_Sheets($client);

        //get spreadsheet id from db
        $google_sheet_link = TeamGoogleSheet::where('team_id',$team_id)->first();
        $url_array         = parse_url($google_sheet_link->url);
        $path_array        = explode("/",$url_array["path"]);
        $spreadsheetId     = $path_array[3];
        \Log::info('Spreadsheet id');
        \Log::info($spreadsheetId);

        $range = 'Sheet1';
        $rows = $sheets->spreadsheets_values->get($spreadsheetId, $range, ['majorDimension' => 'ROWS']);
        if (isset($rows['values'])) {
            $filename = storage_path("chat_bots.csv");
            if (file_exists($filename))
                unlink($filename);
            $handle = fopen($filename, 'a'); 
            foreach ($rows['values'] as $key => $data) {
                fputcsv($handle, $data);
            }
            fclose($handle);

            $headers = array(
                'Content-Type' => 'text/csv',
            );

            return \Response::download($filename, 'chat_bots.csv', $headers);       

        }

但这需要工作表名称(范围属性),并且也只需要1张工作表。我想使其动态化。我们可以从url获取sheetid,但找不到通过传递此工作表ID来检索数据的方法。

1 个答案:

答案 0 :(得分:0)

        $spreadsheet_data = $sheets->spreadsheets->get($spreadsheetId); 

        //get sheet titles
        $work_sheets = [];
        $gid_sheet = '';
        foreach($spreadsheet_data->getSheets() as $s) {
            $work_sheets[] = $s['properties']['title'];
        }
        if(preg_match("/[#&]gid=([0-9]+)/", $google_sheet_link->url)){
            $explode_array = explode("#gid=",$google_sheet_link->url);
            $gid = $explode_array[1];                
            foreach($spreadsheet_data->getSheets() as $s) {
                if($s['properties']['sheetId'] == $gid)
                    $gid_sheet = $s['properties']['title'];
            }
        }
        if($gid_sheet != ''){
            $range = $gid_sheet;
        }
        else{
            $range = $work_sheets[0];
        }