2021-12-20 (C) Questetra, Inc. (MIT License) 2 Delete a single sheet in a Google Sheet. When the Google Sheet has only one sheet, it cannot be deleted. Google スプレッドシートのシートを削除します。ただし、スプレッドシートにシートが 1 つしかない場合は削除できません。 https://support.questetra.com/bpmn-icons/service-task-google-sheets-sheet-delete/ https://support.questetra.com/ja/bpmn-icons/service-task-google-sheets-sheet-delete/ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADbElEQVRYR8WXS0hUURjH/2dGJFDz lqNimmORhAU5hRVFojgTQSTarl3azN5x1aboQdAqGoVc2AyOFoGCpQuN7E6MRIVW4BBZUqJkbYTw +H7M48Sdx3Ve986d0crFuDjfd8/v+5/vcQ7Bf/4jyezPWfX1IKQKDDoAHIj/P8AwBoCCYAwETnqF 71f63YQAXEc1B19aE8DMAOGUfZhRgFig8rTQRieV85EF4Gw1DQC5r3zj6K0YBUMjNTn6pCAkATir 3gJCmpRFnNDKQo18czyruACcVW8HIZcTfjYpA2anRkdjtEsMQHjkvefuoqawQvTxMV8w54S8Y2DM /4uhmRGUZhfj9gcbBn+8lcZirIWaHOZwgwiAwJmrOkIGzro2lOeUJozzxcwITuYf8ts1v2lB39Sw HMTF8JwQAQLZrp4KT7hkAbj0LMxvLOHquwfonuQlIBiFyrsvVB2bADbDTQA3wr1SARD8F9zLuD7a jq6JQSklblEjL+yHTQCrQWgk2akC7FCnY2d6hug+uzqHSy+vSapAjY5dIkCwwz2LtlaqwNz6Ihbd yxHuK551nHpqSpgLfgWkal4pQLxdlj1rKOqqTVgRAQCbwQmgKlUFUgIAhqmRrw4pMA1CtHIAK541 LGxEyhxtr1apkbsjMC4SK4AxauKPhhRg8aIIPwLX7294NPEch3fvR/d3HpUFOuzJ0IhuHuYF//M9 us/eUQYgjE8jT5ICGJoZhU5TivbxPpwvPo2izLxNAJ8X9omBFAGs+oRHICjw6tdHHNMcRNvnXtRq z2BvZr4I4PZ58PBLfxIAzEWNDp3iJBQAeiYdOJJzAJ1fB2AoOoHCzFwRwOvzon/6dRIAkUkYd/RG 58Do7DgqcsvQ+qkHdSWV0GYVRChwz/VEOUBwMIWqQLhqyTaibU9CxvxDSXErFspwyb0q3VgAqAiB RkkZMsxTE++v120ZRik0ojjDSBjH3rTp8IH0V1oxwzzUnpKYcRxoyZEXkqELrTieVyYru9Si0DW1 j+tjl4NnH1qQvZKltLO8kyi9JEBwOm7/pZSxTmpyNETz/atreUzksgqEFv0XFRB79E1J8dEICQfW kNLDRIQIPM3MYDArBhE2JhCeZpYtPc2iIw0ogmoQogMYB5DygA1zAYSCMeGR6pSLWHEOKJZ5i4Z/ AEwJzTC2ALrNAAAAAElFTkSuQmCC { configs.put('conf_OAuth2', 'Google'); configs.put('conf_SheetTitle', sheetTitle); // 文字型データ項目(単一行)を準備 const dataDef = engine.createDataDefinition('スプレッドシートの ID', 1, 'q_SpreadSheetId', 'STRING_TEXTFIELD'); engine.setData(dataDef, spreadSheetId); configs.putObject('conf_SpreadSheetId', dataDef); }; /** * conf_SheetTitle が、空でエラーになる場合 */ test('Sheet Title is blank', () => { prepareConfigs('abc123', ''); try { execute(); fail('not come here'); } catch (e) { expect(e.message).endsWith('Sheet Title is empty.'); } }); /** * conf_SpreadSheetId でデータ項目を選択し、値が空でエラーになる場合 */ test('Spreadsheet ID is blank', () => { prepareConfigs('', 'シート1'); try { execute(); fail('not come here'); } catch (e) { expect(e.message).endsWith('Spreadsheet ID is empty.'); } }); const SAMPLE_GET = { "spreadsheetId": "abc123", "sheets": [ { "properties": { "sheetId": 0, "title": "シート1", "index": 0, "sheetType": "GRID", "gridProperties": { "rowCount": 1000, "columnCount": 26 } } }, { "properties": { "sheetId": 1, "title": "シート2", "index": 1, "sheetType": "GRID", "gridProperties": { "rowCount": 1000, "columnCount": 26 } } } ], "spreadsheetUrl": "https://docs.google.com/spreadsheets/d/abc123/edit?ouid=102859041491136123607" } /** * GET リクエストのテスト(Google スプレッドシートのシート ID を取得) * @param {Object} request * @param request.url * @param request.method * @param spreadSheetId */ const assertGetRequest = ({url, method}, spreadSheetId) => { expect(url).toEqual(`https://sheets.googleapis.com/v4/spreadsheets/${encodeURIComponent( spreadSheetId )}?includeGridData=false`); expect(method).toEqual('GET'); }; const SAMPLE_POST = { "spreadsheetId": "abc123", "replies": [ {} ] } /** * POST リクエストのテスト (Google スプレッドシートのシートを削除) * @param {Object} request * @param request.url * @param request.method * @param request.contentType * @param request.body * @param spreadSheetId * @param sheetId */ const assertPostRequest = ({url, method, contentType, body}, spreadSheetId, sheetId) => { expect(url).toEqual(`https://sheets.googleapis.com/v4/spreadsheets/${encodeURIComponent( spreadSheetId )}:batchUpdate`); expect(method).toEqual('POST'); expect(contentType).toEqual('application/json; charset=UTF-8'); const bodyObj = JSON.parse(body); expect(bodyObj.requests[0].deleteSheet.sheetId).toEqual(sheetId); }; /** * シート削除成功の場合 - 先頭にあるシート */ test('Success - 1st sheet', () => { prepareConfigs('abc123', 'シート1'); let reqCount = 0; httpClient.setRequestHandler((request) => { if (reqCount === 0) { assertGetRequest(request, 'abc123'); reqCount++; return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_GET)); } assertPostRequest(request, 'abc123', 0); return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_POST)); }); execute(); }); /** * シート削除成功の場合 - 2番目にあるシート */ test('Success - 2nd sheet', () => { prepareConfigs('abc123', 'シート2'); let reqCount = 0; httpClient.setRequestHandler((request) => { if (reqCount === 0) { assertGetRequest(request, 'abc123'); reqCount++; return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_GET)); } assertPostRequest(request, 'abc123', 1); return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_POST)); }); execute(); }); /** * シート削除成功の場合 - スプレッドシートの ID を固定値で指定 */ test('Success - Set the Spreadsheet ID as a fixed value', () => { configs.put('conf_OAuth2', 'Google'); configs.put('conf_SpreadSheetId', 'abc123'); configs.put('conf_SheetTitle', 'シート1'); let reqCount = 0; httpClient.setRequestHandler((request) => { if (reqCount === 0) { assertGetRequest(request, 'abc123'); reqCount++; return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_GET)); } assertPostRequest(request, 'abc123', 0); return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_POST)); }); execute(); }); /** * Google Sheets への GET API リクエストでエラー */ test('GET Failed', () => { prepareConfigs('defg4567', 'シート1'); httpClient.setRequestHandler((request) => { assertGetRequest(request, 'defg4567'); return httpClient.createHttpResponse(400, 'application/json', '{}'); }); try { execute(); fail('not come here'); } catch (e) { expect(e.message).endsWith('Failed to get sheet information. status: 400'); } }); /** * Box への POST API リクエストでエラー */ test('POST Failed', () => { prepareConfigs('snEtnFH1', 'テストシート'); let reqCount = 0; httpClient.setRequestHandler((request) => { if (reqCount === 0) { assertGetRequest(request, 'snEtnFH1'); reqCount++; const responseObj = { "spreadsheetId": "snEtnFH1", "sheets": [ { "properties": { "sheetId": 15521, "title": "あああシート", } }, { "properties": { "sheetId": 95523, "title": "テストシート", } } ] } return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(responseObj)); } assertPostRequest(request, 'snEtnFH1', 95523); return httpClient.createHttpResponse(400, 'application/json', '{}'); }); try { execute(); fail('not come here'); } catch (e) { expect(e.message).endsWith('Failed to delete sheet. status: 400'); } }); /** * Google Sheets に指定したシートのタイトルがない */ test('Sheet Title dose not exist', () => { prepareConfigs('pBEk7jKX', 'シート3'); httpClient.setRequestHandler((request) => { assertGetRequest(request, 'pBEk7jKX'); const responseObj = { "spreadsheetId": "pBEk7jKX", "sheets": [ { "properties": { "sheetId": 48752, "title": "シート33", } }, { "properties": { "sheetId": 45652, "title": "シート333", } } ] } return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(responseObj)); }); try { execute(); fail('not come here'); } catch (e) { expect(e.message).endsWith('Sheet シート3 does not exist'); } }); ]]>