sironekotoroの日記

Perl で楽をしたい

Perl で Google Sheet API をつかってセルに値を書き込む

さくっとやりました!と言いたいところなのですが

3 ヶ月じゃないな 2 ヶ月くらいだな。

Google Sheet API でセルの内容を書き換えるメソッドは 3 つあるんですが、自分の用途に合致した values/batchUpdate を使いました。

developers.google.com

後、Qiita のこの記事がとても参考になりました。

qiita.com

こんな感じでセルを埋めることができます。

f:id:sironekotoro:20201123121228p:plain

#!/usr/bin/env perl
use strict;
use warnings;

use Data::Dumper;
use HTTP::Tiny;
use JSON;
use URI;
use utf8;

my $ACCESS_TOKEN = '';

my $SPREADSHEET_ID = '1sVNSpvtWPPkv5Qnb0tifYHpKMxaehxj5ChAeQ1G1kgA';

my $GOOGLE_SHEET_API = "https://sheets.googleapis.com/v4/spreadsheets/";

my $bearer = join " ", ( 'Bearer', $ACCESS_TOKEN );

# Method: spreadsheets.values.batchUpdate  |  Sheets API
# https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/batchUpdate
values_batchUpdate();

sub values_batchUpdate {
    my $ht
        = HTTP::Tiny->new( default_headers => { Authorization => $bearer, } );

    my $SHEET_URI
        = $GOOGLE_SHEET_API . $SPREADSHEET_ID . '/values:batchUpdate';
    my $URI = URI->new($SHEET_URI);

    my $response = $ht->request(
        'POST', $URI,
        {   content => encode_json(
                {   valueInputOption => 'USER_ENTERED',
                    data             => [
                        {   range  => 'シート1!A1',
                            values => [
                                [ 200,    100, '=A1+B1' ],
                                [ 'hoge', '',  'fuga' ]
                                ]
                        }
                    ],
                    includeValuesInResponse      => 'true',
                    responseValueRenderOption    => 'UNFORMATTED_VALUE',
                    responseDateTimeRenderOption => 'FORMATTED_STRING',
                }
            )
        },
    );
    # print Dumper $response;
}