0

Google Sheets API v4 を介してフィルター ビューを追加します。さまざまな SO 投稿やその他のリソースを確認しましたが、自分の状況に合った説明が見つかりません。

これらのスプレッドシートを 4 倍にチェックしましたが、すべてのシートに sheetId が 2 のシートがあります。複数の異なるファイルでコードを実行したところ、このエラーが発生しました。sheetId: 0 を使用して一部のファイルでコードを実行すると、同じエラー メッセージが表示されます。'Invalid requests[0].addFilterView: No grid with id: 0'

コードは次のとおりです。

私の実際の生産スプレッドシート

const request = {
        spreadsheetId: '1qWoAjFHik5oJ8_hXTatEgVj5sVExxQWxgFVCM_uHwXE',
        resource: {
            requests: [{
                "addFilterView": {
                    filter: {
                        filterViewId: 11,
                        title: 'Claims Without A Status',
                        range: {
                            sheetId: 2,
                            startRowIndex: 0,
                            endRowIndex: 50,
                            startColumnIndex: 0,
                            endColumnIndex: 3
                        },
                        filterSpecs: [
                            {
                                filterCriteria: {
                                    condition: {
                                        type: 'BLANK',
                                        values: []
                                    }
                                },
                                columnIndex: 1
                            }
                        ]
                    }
                }
            }]
        }
    }

    sheets.spreadsheets.batchUpdate(request).then(res => console.log(res)).catch(err => console.log(err))

これにより、次が生成されます。

errors: [
    {
      message: 'Invalid requests[0].addFilterView: No grid with id: 2',
      domain: 'global',
      reason: 'badRequest'
    }
  ]

別のシートで実行したテスト:

const request = {
        spreadsheetId: '1Fnu1s2DEZaSIX94rJug2sbmeseHO7tQ_M9nJX4rvPHE',
        resource: {
            requests: [{
                "addFilterView": {
                    filter: {
                        filterViewId: 11,
                        title: 'Claims Without A Status',
                        range: {
                            sheetId: 2,
                            startRowIndex: 0,
                            endRowIndex: 50,
                            startColumnIndex: 0,
                            endColumnIndex: 3
                        },
                        filterSpecs: [
                            {
                                filterCriteria: {
                                    condition: {
                                        type: 'BLANK',
                                        values: []
                                    }
                                },
                                columnIndex: 1
                            }
                        ]
                    }
                }
            }]
        }
    }

    sheets.spreadsheets.batchUpdate(request).then(res => console.log(res)).catch(err => console.log(err))

プロデュース:

[
    {
      message: 'Invalid requests[0].addFilterView: No grid with id: 2',
      domain: 'global',
      reason: 'badRequest'
    }
  ]

しかし、このコードは実際に機能しました:

const request = {
        spreadsheetId: '1Fnu1s2DEZaSIX94rJug2sbmeseHO7tQ_M9nJX4rvPHE',
        resource: {
            requests: [{
                "addFilterView": {
                    filter: {
                        filterViewId: 12,
                        title: 'Claims Without A Status',
                        range: {
                            sheetId: 0,
                            startRowIndex: 0,
                            endRowIndex: 50,
                            startColumnIndex: 0,
                            endColumnIndex: 3
                        },
                        filterSpecs: [
                            {
                                filterCriteria: {
                                    condition: {
                                        type: 'BLANK',
                                        values: []
                                    }
                                },
                                columnIndex: 1
                            }
                        ]
                    }
                }
            }]
        }
    }

    sheets.spreadsheets.batchUpdate(request).then(res => console.log(res)).catch(err => console.log(err))

プロデュース:

status: 200,
  statusText: 'OK',
  request: {
    responseURL: 'https://sheets.googleapis.com/v4/spreadsheets/1Fnu1s2DEZaSIX94rJug2sbmeseHO7tQ_M9nJX4rvPHE:batchUpdate'
  }

したがって、両方のシートに少なくとも 6 枚のシートがあるという事実にもかかわらず、2 番目のインデックスを持つものを考えました (これは、インデックス/ID が 2 のシートが常に存在することを意味しますよね?)。そこで、本番シートで sheetId: 0 コードを実行してみました。コード:

const request = {
        spreadsheetId: '1qWoAjFHik5oJ8_hXTatEgVj5sVExxQWxgFVCM_uHwXE',
        resource: {
            requests: [{
                "addFilterView": {
                    filter: {
                        filterViewId: 12,
                        title: 'Claims Without A Status',
                        range: {
                            sheetId: 0,
                            startRowIndex: 0,
                            endRowIndex: 50,
                            startColumnIndex: 0,
                            endColumnIndex: 3
                        },
                        filterSpecs: [
                            {
                                filterCriteria: {
                                    condition: {
                                        type: 'BLANK',
                                        values: []
                                    }
                                },
                                columnIndex: 1
                            }
                        ]
                    }
                }
            }]
        }
    }

    sheets.spreadsheets.batchUpdate(request).then(res => console.log(res)).catch(err => console.log(err))

プロデュース:

errors: [
    {
      message: 'Invalid requests[0].addFilterView: No grid with id: 0',
      domain: 'global',
      reason: 'badRequest'
    }
  ]

そのため、状況が同じであっても、異なるスプレッドシートから矛盾する応答が返されます。スプレッドシートが存在するためには、1 つのシートが必要です。つまり、常にインデックス/ID 0 にシートが存在することになります。

編集

これを 2 つの異なるスプレッドシートで試してみました。使用している古いスプレッドシートと、作成したばかりの別のテスト スプレッドシートです。API 呼び出しは古いスプレッドシートと同じメッセージで失敗しましたが、API 呼び出しは新しいスプレッドシートでは上記のように機能しました。

これは、開始時に静的に割り当てられている sheetIds に要約される可能性があります。いくつかのシートを作成し、いくつかを削除してからさらに作成すると、他のシートを削除した場合でも、シート番号は前の最大値である最後のシートに増加します。たとえば、Sheet1 Sheet2 と Sheet3 がある場合、Sheet3 を削除して別のシートを作成すると、次のシートは Sheet4 になり、Sheet1 Sheet2 Sheet4 になります。これにより、古いファイルで同様のことが起こっている可能性があると思います。それらの古いシートで多くのシートを削除して作成しました。

編集2

テスト シートに新しいシートを追加し、フィルター ビューを sheetId 1 に適用しようとしましたが、エラー メッセージが表示されましたNo grid with id: 1。ここで何が起こっているのか想像もつきません。バグのようです。

4

1 に答える 1