@squadbase/vite-server 0.1.7-dev.2 → 0.1.7-dev.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +114 -77
- package/dist/connectors/google-sheets.js +168 -101
- package/dist/index.js +114 -77
- package/dist/main.js +114 -77
- package/dist/vite-plugin.js +114 -77
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -72774,11 +72774,16 @@ var inputSchema27 = z27.object({
|
|
|
72774
72774
|
"Brief description of what you intend to accomplish with this tool call"
|
|
72775
72775
|
),
|
|
72776
72776
|
connectionId: z27.string().describe("ID of the Google Sheets connection to use"),
|
|
72777
|
-
method: z27.enum(["GET"]).describe(
|
|
72777
|
+
method: z27.enum(["GET", "POST", "PUT"]).describe(
|
|
72778
|
+
"HTTP method. GET for reads, PUT for values.update, POST for values.append / values:batchUpdate / values:batchGet / values:clear / values:batchClear."
|
|
72779
|
+
),
|
|
72778
72780
|
path: z27.string().describe(
|
|
72779
|
-
"API path appended to https://sheets.googleapis.com/v4/spreadsheets (e.g., '/
|
|
72781
|
+
"API path appended to https://sheets.googleapis.com/v4/spreadsheets. The caller must provide the target spreadsheetId explicitly in the path (e.g., '/1AbCxyz...', '/1AbCxyz.../values/Sheet1!A1:D10')."
|
|
72780
72782
|
),
|
|
72781
|
-
queryParams: z27.record(z27.string(), z27.string()).optional().describe("Query parameters to append to the URL")
|
|
72783
|
+
queryParams: z27.record(z27.string(), z27.string()).optional().describe("Query parameters to append to the URL"),
|
|
72784
|
+
body: z27.unknown().optional().describe(
|
|
72785
|
+
"Request body for POST/PUT. Will be JSON-serialized. Omit for GET."
|
|
72786
|
+
)
|
|
72782
72787
|
});
|
|
72783
72788
|
var outputSchema27 = z27.discriminatedUnion("success", [
|
|
72784
72789
|
z27.object({
|
|
@@ -72793,12 +72798,13 @@ var outputSchema27 = z27.discriminatedUnion("success", [
|
|
|
72793
72798
|
]);
|
|
72794
72799
|
var requestTool9 = new ConnectorTool({
|
|
72795
72800
|
name: "request",
|
|
72796
|
-
description: `Send authenticated
|
|
72797
|
-
|
|
72801
|
+
description: `Send authenticated requests to the Google Sheets API v4.
|
|
72802
|
+
Supports GET (read) and POST/PUT (write: update/append/batchUpdate/clear).
|
|
72803
|
+
The caller must include the target spreadsheetId in the path explicitly.
|
|
72798
72804
|
Authentication is handled automatically via OAuth proxy.`,
|
|
72799
72805
|
inputSchema: inputSchema27,
|
|
72800
72806
|
outputSchema: outputSchema27,
|
|
72801
|
-
async execute({ connectionId, method, path: path5, queryParams }, connections, config) {
|
|
72807
|
+
async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
|
|
72802
72808
|
const connection = connections.find((c6) => c6.id === connectionId);
|
|
72803
72809
|
if (!connection) {
|
|
72804
72810
|
return {
|
|
@@ -72820,16 +72826,17 @@ Authentication is handled automatically via OAuth proxy.`,
|
|
|
72820
72826
|
const controller = new AbortController();
|
|
72821
72827
|
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS17);
|
|
72822
72828
|
try {
|
|
72829
|
+
const proxyBody = { url, method };
|
|
72830
|
+
if (body !== void 0 && method !== "GET") {
|
|
72831
|
+
proxyBody.body = body;
|
|
72832
|
+
}
|
|
72823
72833
|
const response = await fetch(proxyUrl, {
|
|
72824
72834
|
method: "POST",
|
|
72825
72835
|
headers: {
|
|
72826
72836
|
"Content-Type": "application/json",
|
|
72827
72837
|
Authorization: `Bearer ${token}`
|
|
72828
72838
|
},
|
|
72829
|
-
body: JSON.stringify(
|
|
72830
|
-
url,
|
|
72831
|
-
method
|
|
72832
|
-
}),
|
|
72839
|
+
body: JSON.stringify(proxyBody),
|
|
72833
72840
|
signal: controller.signal
|
|
72834
72841
|
});
|
|
72835
72842
|
const data = await response.json();
|
|
@@ -72852,52 +72859,50 @@ Authentication is handled automatically via OAuth proxy.`,
|
|
|
72852
72859
|
var requestToolName = `google-sheets-oauth_${requestTool9.name}`;
|
|
72853
72860
|
var googleSheetsOnboarding = new ConnectorOnboarding({
|
|
72854
72861
|
connectionSetupInstructions: {
|
|
72855
|
-
ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Google Sheets (OAuth) \u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002\
|
|
72862
|
+
ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Google Sheets (OAuth) \u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306F\u8AAD\u307F\u66F8\u304D\u53EF\u80FD\u306A\u30B9\u30B3\u30FC\u30D7 (\`spreadsheets\`) \u3067\u63A5\u7D9A\u3055\u308C\u3001OAuth\u8A8D\u8A3C\u3057\u305FGoogle\u30A2\u30AB\u30A6\u30F3\u30C8\u304C\u6A29\u9650\u3092\u6301\u3064\u4EFB\u610F\u306E\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306B\u5BFE\u3057\u3066\u8AAD\u307F\u66F8\u304D\u3067\u304D\u307E\u3059\u3002
|
|
72856
72863
|
|
|
72857
|
-
1. \`askUserQuestion\` \u3067\
|
|
72864
|
+
1. \`askUserQuestion\` \u3067\u64CD\u4F5C\u5BFE\u8C61\u306E\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8URL\u3092\u30D2\u30A2\u30EA\u30F3\u30B0\u3059\u308B:
|
|
72858
72865
|
- \`type\`: \`"freeText"\`
|
|
72859
|
-
- \`question\`: \u300C\
|
|
72866
|
+
- \`question\`: \u300C\u64CD\u4F5C\u3057\u305F\u3044Google Sheets\u306EURL\u3092\u8CBC\u308A\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\uFF08\u8AAD\u307F\u53D6\u308A\u30FB\u7DE8\u96C6\u3069\u3061\u3089\u3082\u53EF\u80FD\u3067\u3059\uFF09\u300D
|
|
72860
72867
|
- \`placeholder\`: \`"https://docs.google.com/spreadsheets/d/.../edit"\`
|
|
72861
72868
|
2. \u53D7\u3051\u53D6\u3063\u305FURL\u304B\u3089\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u3092\u62BD\u51FA\u3059\u308B\u3002URL\u306E \`/d/\` \u3068 \`/edit\`\uFF08\u307E\u305F\u306F\u672B\u5C3E\uFF09\u306E\u9593\u306B\u3042\u308B\u6587\u5B57\u5217\u304C\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u3067\u3059\uFF08\u4F8B: \`https://docs.google.com/spreadsheets/d/1AbCxyz.../edit\` \u2192 \`1AbCxyz...\`\uFF09\u3002URL\u3067\u306F\u306A\u304FID\u3060\u3051\u304C\u6E21\u3055\u308C\u305F\u5834\u5408\u306F\u305D\u306E\u307E\u307E\u5229\u7528\u3057\u307E\u3059\u3002
|
|
72862
|
-
3. \
|
|
72863
|
-
- \`parameterSlug\`: \`"spreadsheet-id"\`
|
|
72864
|
-
- \`options\`: \`[{ value: <\u62BD\u51FA\u3057\u305FID>, label: <\u540C\u3058\u5024> }]\`\uFF081\u4EF6\u306E\u307F\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u81EA\u52D5\u9078\u629E\u3055\u308C\u308B\uFF09
|
|
72865
|
-
4. \`${requestToolName}\` \u3067\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306B\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u308B\u3053\u3068\u3092\u78BA\u8A8D\u3059\u308B:
|
|
72869
|
+
3. \`${requestToolName}\` \u3067\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u6027\u3092\u78BA\u8A8D\u3059\u308B:
|
|
72866
72870
|
- \`method\`: \`"GET"\`
|
|
72867
|
-
- \`path\`: \`"
|
|
72868
|
-
|
|
72869
|
-
|
|
72870
|
-
|
|
72871
|
+
- \`path\`: \`"/<\u62BD\u51FA\u3057\u305FspreadsheetId>"\`
|
|
72872
|
+
4. **\u691C\u8A3C\u5931\u6557\u6642\u306E\u518D\u30D2\u30A2\u30EA\u30F3\u30B0**: \u30B9\u30C6\u30C3\u30D73\u304C \`success: false\` \u3092\u8FD4\u3057\u305F\u5834\u5408\uFF08404/403/\u898B\u3064\u304B\u3089\u306A\u3044\u7B49\uFF09\u3001\u4EE5\u4E0B\u306E\u624B\u9806\u3067\u518D\u8A66\u884C\u3059\u308B:
|
|
72873
|
+
a. \u30E6\u30FC\u30B6\u30FC\u306B\u539F\u56E0\u306E\u53EF\u80FD\u6027\u3092\u4F1D\u3048\u308B\uFF08URL\u304C\u9593\u9055\u3063\u3066\u3044\u308B\u3001OAuth\u9023\u643A\u3057\u305FGoogle\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u30A2\u30AF\u30BB\u30B9\u6A29\u9650\u304C\u306A\u3044\u3001\u30D7\u30E9\u30A4\u30D9\u30FC\u30C8\u30B7\u30FC\u30C8\u3067\u5225\u30A2\u30AB\u30A6\u30F3\u30C8\u3068\u5171\u6709\u3055\u308C\u3066\u3044\u308B \u7B49\uFF09
|
|
72874
|
+
b. \`askUserQuestion\` \u3067\u3082\u3046\u4E00\u5EA6URL\u3092\u805E\u304D\u76F4\u3057\u3001\u518D\u5EA6 \`${requestToolName}\` \u3067\u691C\u8A3C
|
|
72875
|
+
c. \u6210\u529F\u3059\u308B\u307E\u3067\uFF08\u307E\u305F\u306F\u30E6\u30FC\u30B6\u30FC\u304C\u4E2D\u65AD\u3059\u308B\u307E\u3067\uFF09\u3053\u306E\u30EB\u30FC\u30D7\u3092\u7E70\u308A\u8FD4\u3059
|
|
72871
72876
|
|
|
72872
72877
|
#### \u5236\u7D04
|
|
72873
|
-
- **\
|
|
72878
|
+
- **\u63A5\u7D9A\u8A2D\u5B9A\u4E2D\u306F\u5927\u91CF\u306E\u30BB\u30EB\u5024\u3092\u53D6\u5F97\u3057\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u306E\u307F
|
|
72879
|
+
- **\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u3092\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u30D1\u30E9\u30E1\u30FC\u30BF\u3068\u3057\u3066\u4FDD\u5B58\u3057\u306A\u3044**\u3002\u30CF\u30F3\u30C9\u30E9\u5074\u306E\u30B3\u30FC\u30C9\uFF08\`server-logic\`\uFF09\u306B\u5BFE\u8C61\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u3092\u76F4\u63A5\u6E21\u3059\u8A2D\u8A08\u306B\u306A\u3063\u3066\u3044\u308B\u305F\u3081\u3001\`updateConnectionParameters\` \u306F\u547C\u3070\u306A\u3044\u3053\u3068
|
|
72874
72880
|
- \u30C4\u30FC\u30EB\u9593\u306F1\u6587\u3060\u3051\u66F8\u3044\u3066\u5373\u6B21\u306E\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u3002\u4E0D\u8981\u306A\u8AAC\u660E\u306F\u7701\u7565\u3057\u3001\u52B9\u7387\u7684\u306B\u9032\u3081\u308B`,
|
|
72875
|
-
en: `Follow these steps to set up the Google Sheets (OAuth) connection.
|
|
72881
|
+
en: `Follow these steps to set up the Google Sheets (OAuth) connection. This connector uses the read/write \`spreadsheets\` scope, so it can read and edit any spreadsheet the authenticated Google account has access to.
|
|
72876
72882
|
|
|
72877
|
-
1. Call \`askUserQuestion\` to ask for the spreadsheet URL to
|
|
72883
|
+
1. Call \`askUserQuestion\` to ask for the spreadsheet URL the user wants to work with:
|
|
72878
72884
|
- \`type\`: \`"freeText"\`
|
|
72879
|
-
- \`question\`: "Please paste the URL of the Google Sheet you want to
|
|
72885
|
+
- \`question\`: "Please paste the URL of the Google Sheet you want to work with (both read and edit are supported)."
|
|
72880
72886
|
- \`placeholder\`: \`"https://docs.google.com/spreadsheets/d/.../edit"\`
|
|
72881
72887
|
2. Extract the spreadsheet ID from the URL. It is the segment between \`/d/\` and \`/edit\` (or the end of the URL), e.g. \`https://docs.google.com/spreadsheets/d/1AbCxyz.../edit\` \u2192 \`1AbCxyz...\`. If the user pasted just the ID, use it as-is.
|
|
72882
|
-
3.
|
|
72883
|
-
- \`parameterSlug\`: \`"spreadsheet-id"\`
|
|
72884
|
-
- \`options\`: \`[{ value: <extracted ID>, label: <same value> }]\` (a single option is auto-selected)
|
|
72885
|
-
4. Verify access by calling \`${requestToolName}\`:
|
|
72888
|
+
3. Verify accessibility by calling \`${requestToolName}\`:
|
|
72886
72889
|
- \`method\`: \`"GET"\`
|
|
72887
|
-
- \`path\`: \`"
|
|
72888
|
-
|
|
72889
|
-
|
|
72890
|
-
-
|
|
72890
|
+
- \`path\`: \`"/<extracted spreadsheetId>"\`
|
|
72891
|
+
4. **Retry on verification failure**: If step 3 returns \`success: false\` (404/403/not found or any other error):
|
|
72892
|
+
a. Tell the user the likely causes (wrong URL, OAuth-connected Google account lacks access, private sheet shared with a different account, etc.)
|
|
72893
|
+
b. Call \`askUserQuestion\` again to re-ask for the URL and re-verify with \`${requestToolName}\`
|
|
72894
|
+
c. Repeat until verification succeeds (or the user aborts)
|
|
72891
72895
|
|
|
72892
72896
|
#### Constraints
|
|
72893
|
-
- **Do NOT
|
|
72894
|
-
-
|
|
72897
|
+
- **Do NOT fetch large amounts of cell data during setup**. Only the metadata request specified above is allowed.
|
|
72898
|
+
- **Do NOT persist the spreadsheet ID as a connection parameter.** The handler-side code (\`server-logic\`) is designed to receive the target spreadsheet ID directly, so do NOT call \`updateConnectionParameters\`.
|
|
72899
|
+
- Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently.`
|
|
72895
72900
|
},
|
|
72896
72901
|
dataOverviewInstructions: {
|
|
72897
|
-
en: `1. Call ${requestToolName} with GET
|
|
72898
|
-
2. For each sheet of interest, call ${requestToolName} with GET
|
|
72899
|
-
ja: `1. ${requestToolName} \u3067 GET
|
|
72900
|
-
2. \u4E3B\u8981\u306A\u30B7\u30FC\u30C8\u306B\u3064\u3044\u3066 ${requestToolName} \u3067 GET
|
|
72902
|
+
en: `1. Call ${requestToolName} with GET /<spreadsheetId> to fetch spreadsheet metadata (sheet names, grid properties)
|
|
72903
|
+
2. For each sheet of interest, call ${requestToolName} with GET /<spreadsheetId>/values/<SheetName>!A1:Z5 to sample the first rows and understand the column layout`,
|
|
72904
|
+
ja: `1. ${requestToolName} \u3067 GET /<spreadsheetId> \u3092\u547C\u3073\u51FA\u3057\u3001\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\uFF08\u30B7\u30FC\u30C8\u540D\u3001\u30B0\u30EA\u30C3\u30C9\u30D7\u30ED\u30D1\u30C6\u30A3\uFF09\u3092\u53D6\u5F97
|
|
72905
|
+
2. \u4E3B\u8981\u306A\u30B7\u30FC\u30C8\u306B\u3064\u3044\u3066 ${requestToolName} \u3067 GET /<spreadsheetId>/values/<\u30B7\u30FC\u30C8\u540D>!A1:Z5 \u3092\u547C\u3073\u51FA\u3057\u3001\u5148\u982D\u6570\u884C\u3092\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u3057\u3066\u30AB\u30E9\u30E0\u69CB\u9020\u3092\u628A\u63E1`
|
|
72901
72906
|
}
|
|
72902
72907
|
});
|
|
72903
72908
|
|
|
@@ -72920,7 +72925,7 @@ var googleSheetsConnector = new ConnectorPlugin({
|
|
|
72920
72925
|
slug: "google-sheets",
|
|
72921
72926
|
authType: AUTH_TYPES.OAUTH,
|
|
72922
72927
|
name: "Google Sheets",
|
|
72923
|
-
description: "Connect to
|
|
72928
|
+
description: "Connect to Google Sheets for read/write access via OAuth. Any spreadsheet the authenticated Google account can access is supported \u2014 the target spreadsheetId is passed per call.",
|
|
72924
72929
|
iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/1UPQuggyiZmbb26CuaSr2h/032770e8739b183fa00b7625f024e536/google-sheets.svg",
|
|
72925
72930
|
parameters: parameters18,
|
|
72926
72931
|
releaseFlag: { dev1: true, dev2: false, prod: false },
|
|
@@ -72929,25 +72934,33 @@ var googleSheetsConnector = new ConnectorPlugin({
|
|
|
72929
72934
|
allowlist: [
|
|
72930
72935
|
{
|
|
72931
72936
|
host: "sheets.googleapis.com",
|
|
72932
|
-
methods: ["GET"]
|
|
72937
|
+
methods: ["GET", "POST", "PUT"]
|
|
72933
72938
|
}
|
|
72934
72939
|
]
|
|
72935
72940
|
},
|
|
72936
72941
|
systemPrompt: {
|
|
72937
72942
|
en: `### Tools (setup-time only)
|
|
72938
72943
|
|
|
72939
|
-
- \`google-sheets-oauth_request\`: Call the Google Sheets API during setup / data overview.
|
|
72944
|
+
- \`google-sheets-oauth_request\`: Call the Google Sheets API during setup / data overview. Supports GET, POST, and PUT. The caller must include the target spreadsheetId in the path explicitly (e.g., \`/1AbCxyz...\`, \`/1AbCxyz.../values/Sheet1!A1:D10\`). Authentication is configured automatically via OAuth.
|
|
72940
72945
|
|
|
72941
|
-
> **Important**: The \`google-sheets-oauth_request\` tool is only available at setup time. Inside server-logic handlers, use the SDK (\`connection(id).getValues\`, etc.) \u2014 the SDK's fetch is already wired through the OAuth proxy. **Do NOT** hand-roll HTTP calls to \`_sqcore/connections/*/request\` from a handler.
|
|
72946
|
+
> **Important**: The \`google-sheets-oauth_request\` tool is only available at setup time. Inside server-logic handlers, use the SDK (\`connection(id).getValues(spreadsheetId, range)\`, etc.) \u2014 the SDK's fetch is already wired through the OAuth proxy. **Do NOT** hand-roll HTTP calls to \`_sqcore/connections/*/request\` from a handler.
|
|
72942
72947
|
|
|
72943
|
-
> **Connection scope**:
|
|
72948
|
+
> **Connection scope**: The OAuth scope is \`spreadsheets\` (read/write). A connection is NOT bound to a single spreadsheet \u2014 the target spreadsheetId is passed per call. The spreadsheetId is NOT stored as a connection parameter or environment variable; pass it explicitly from the caller (e.g., as a query param or request input to the handler).
|
|
72944
72949
|
|
|
72945
|
-
### Google Sheets API Reference
|
|
72950
|
+
### Google Sheets API Reference
|
|
72946
72951
|
|
|
72952
|
+
Reads:
|
|
72947
72953
|
- GET \`/{spreadsheetId}\` \u2014 Get spreadsheet metadata (title, sheets, properties)
|
|
72948
72954
|
- GET \`/{spreadsheetId}/values/{range}\` \u2014 Get cell values for a range
|
|
72949
72955
|
- GET \`/{spreadsheetId}/values:batchGet?ranges={range1}&ranges={range2}\` \u2014 Get values for multiple ranges
|
|
72950
72956
|
|
|
72957
|
+
Writes:
|
|
72958
|
+
- PUT \`/{spreadsheetId}/values/{range}?valueInputOption=USER_ENTERED\` \u2014 Overwrite a range (body: \`{ range, majorDimension, values }\`)
|
|
72959
|
+
- POST \`/{spreadsheetId}/values/{range}:append?valueInputOption=USER_ENTERED\` \u2014 Append rows after the existing data
|
|
72960
|
+
- POST \`/{spreadsheetId}/values/{range}:clear\` \u2014 Clear values in a range
|
|
72961
|
+
- POST \`/{spreadsheetId}/values:batchUpdate\` \u2014 Batch update / batch clear
|
|
72962
|
+
- POST \`/{spreadsheetId}:batchUpdate\` \u2014 Structural edits (addSheet, deleteSheet, updateCells, formatting, \u2026)
|
|
72963
|
+
|
|
72951
72964
|
### Range Notation (A1 notation)
|
|
72952
72965
|
- \`Sheet1!A1:D10\` \u2014 Specific range on Sheet1
|
|
72953
72966
|
- \`Sheet1!A:A\` \u2014 Entire column A on Sheet1
|
|
@@ -72957,20 +72970,24 @@ var googleSheetsConnector = new ConnectorPlugin({
|
|
|
72957
72970
|
|
|
72958
72971
|
### Tips
|
|
72959
72972
|
- To explore a spreadsheet, first get metadata to see available sheet names
|
|
72973
|
+
- Use \`valueInputOption=USER_ENTERED\` to parse formulas/dates like the UI; use \`RAW\` to store inputs literally
|
|
72960
72974
|
- Use \`valueRenderOption=FORMATTED_VALUE\` query param to get display values
|
|
72961
72975
|
- Use \`valueRenderOption=UNFORMATTED_VALUE\` for raw numeric values
|
|
72962
72976
|
- Use \`majorDimension=COLUMNS\` to get data organized by columns instead of rows
|
|
72963
72977
|
|
|
72964
72978
|
### Business Logic
|
|
72965
72979
|
|
|
72966
|
-
The business logic type for this connector is "typescript". Write handler code using the connector SDK shown below. Do NOT access credentials directly from environment variables and do NOT read \`INTERNAL_SQUADBASE_*\` env vars \u2014 the SDK takes care of OAuth. The
|
|
72980
|
+
The business logic type for this connector is "typescript". Write handler code using the connector SDK shown below. Do NOT access credentials directly from environment variables and do NOT read \`INTERNAL_SQUADBASE_*\` env vars \u2014 the SDK takes care of OAuth. The target spreadsheetId is NOT stored on the connection \u2014 the handler caller must pass it (as part of the request input).
|
|
72967
72981
|
|
|
72968
72982
|
SDK surface (client created via \`connection(connectionId)\`):
|
|
72969
|
-
- \`client.
|
|
72970
|
-
- \`client.
|
|
72971
|
-
- \`client.
|
|
72972
|
-
- \`client.
|
|
72973
|
-
- \`client.
|
|
72983
|
+
- \`client.request(path, init?)\` \u2014 low-level authenticated fetch (\`path\` is appended to \`https://sheets.googleapis.com/v4/spreadsheets\`; the caller must include the target spreadsheetId).
|
|
72984
|
+
- \`client.getSpreadsheet(spreadsheetId)\` \u2014 fetch spreadsheet metadata.
|
|
72985
|
+
- \`client.getValues(spreadsheetId, range)\` \u2014 read a range (A1 notation).
|
|
72986
|
+
- \`client.batchGetValues(spreadsheetId, ranges)\` \u2014 read multiple ranges.
|
|
72987
|
+
- \`client.updateValues(spreadsheetId, range, values, valueInputOption?)\` \u2014 overwrite a range (requires write scope).
|
|
72988
|
+
- \`client.appendValues(spreadsheetId, range, values, valueInputOption?)\` \u2014 append rows (requires write scope).
|
|
72989
|
+
- \`client.clearValues(spreadsheetId, range)\` \u2014 clear a range (requires write scope).
|
|
72990
|
+
- \`client.batchUpdate(spreadsheetId, requests)\` \u2014 structural edits (requires write scope).
|
|
72974
72991
|
|
|
72975
72992
|
If a handler test fails with \`Connection proxy is not configured\`, retry \u2014 the sandbox is still initializing. Do NOT abandon the SDK and construct OAuth proxy URLs manually.
|
|
72976
72993
|
|
|
@@ -72980,32 +72997,44 @@ If a handler test fails with \`Connection proxy is not configured\`, retry \u201
|
|
|
72980
72997
|
import { connection } from "@squadbase/vite-server/connectors/google-sheets";
|
|
72981
72998
|
|
|
72982
72999
|
const sheets = connection("<connectionId>");
|
|
73000
|
+
const spreadsheetId = "<passed from request input>";
|
|
72983
73001
|
|
|
72984
|
-
//
|
|
72985
|
-
const metadata = await sheets.getSpreadsheet();
|
|
72986
|
-
|
|
73002
|
+
// Read: metadata and values
|
|
73003
|
+
const metadata = await sheets.getSpreadsheet(spreadsheetId);
|
|
73004
|
+
const values = await sheets.getValues(spreadsheetId, "Sheet1!A1:D10");
|
|
72987
73005
|
|
|
72988
|
-
//
|
|
72989
|
-
|
|
72990
|
-
|
|
73006
|
+
// Write: overwrite, append, clear
|
|
73007
|
+
await sheets.updateValues(spreadsheetId, "Sheet1!A1:B2", [["name", "age"], ["Alice", 30]]);
|
|
73008
|
+
await sheets.appendValues(spreadsheetId, "Sheet1!A:B", [["Bob", 25]]);
|
|
73009
|
+
await sheets.clearValues(spreadsheetId, "Sheet1!A1:B10");
|
|
72991
73010
|
|
|
72992
|
-
//
|
|
72993
|
-
|
|
73011
|
+
// Structural edits (add a sheet)
|
|
73012
|
+
await sheets.batchUpdate(spreadsheetId, [
|
|
73013
|
+
{ addSheet: { properties: { title: "NewSheet" } } },
|
|
73014
|
+
]);
|
|
72994
73015
|
\`\`\``,
|
|
72995
73016
|
ja: `### \u30C4\u30FC\u30EB\uFF08\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\uFF09
|
|
72996
73017
|
|
|
72997
|
-
- \`google-sheets-oauth_request\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3084\u30C7\u30FC\u30BF\u6982\u8981\u628A\u63E1\u6642\u306B Google Sheets API \u3092\u547C\u3073\u51FA\u3059\u30C4\u30FC\u30EB\u3067\u3059\
|
|
73018
|
+
- \`google-sheets-oauth_request\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3084\u30C7\u30FC\u30BF\u6982\u8981\u628A\u63E1\u6642\u306B Google Sheets API \u3092\u547C\u3073\u51FA\u3059\u30C4\u30FC\u30EB\u3067\u3059\u3002GET / POST / PUT \u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002\u547C\u3073\u51FA\u3057\u5074\u304C\u30D1\u30B9\u306B\u5BFE\u8C61\u306E spreadsheetId \u3092\u660E\u793A\u7684\u306B\u542B\u3081\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\uFF08\u4F8B: \`/1AbCxyz...\`\u3001\`/1AbCxyz.../values/Sheet1!A1:D10\`\uFF09\u3002OAuth \u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
|
|
72998
73019
|
|
|
72999
|
-
> **\u91CD\u8981**: \`google-sheets-oauth_request\` \u306F\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\u5229\u7528\u53EF\u80FD\u3067\u3059\u3002\u30B5\u30FC\u30D0\u30FC\u30ED\u30B8\u30C3\u30AF\u306E\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u5FC5\u305A SDK\uFF08\`connection(id).getValues\` \u306A\u3069\uFF09\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002SDK \u306E fetch \u306F OAuth \u30D7\u30ED\u30AD\u30B7\u7D4C\u7531\u3067\u65E2\u306B\u914D\u7DDA\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u304B\u3089 \`_sqcore/connections/*/request\` \u3092\u624B\u66F8\u304D\u3067\u547C\u3073\u51FA\u3055\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
73020
|
+
> **\u91CD\u8981**: \`google-sheets-oauth_request\` \u306F\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\u5229\u7528\u53EF\u80FD\u3067\u3059\u3002\u30B5\u30FC\u30D0\u30FC\u30ED\u30B8\u30C3\u30AF\u306E\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u5FC5\u305A SDK\uFF08\`connection(id).getValues(spreadsheetId, range)\` \u306A\u3069\uFF09\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002SDK \u306E fetch \u306F OAuth \u30D7\u30ED\u30AD\u30B7\u7D4C\u7531\u3067\u65E2\u306B\u914D\u7DDA\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u304B\u3089 \`_sqcore/connections/*/request\` \u3092\u624B\u66F8\u304D\u3067\u547C\u3073\u51FA\u3055\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
73000
73021
|
|
|
73001
|
-
> **\u63A5\u7D9A\u30B9\u30B3\u30FC\u30D7**: \
|
|
73022
|
+
> **\u63A5\u7D9A\u30B9\u30B3\u30FC\u30D7**: OAuth \u30B9\u30B3\u30FC\u30D7\u306F \`spreadsheets\`\uFF08\u8AAD\u307F\u66F8\u304D\u53EF\u80FD\uFF09\u3067\u3059\u3002\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306F\u5358\u4E00\u306E\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306B\u7D10\u3065\u304D\u307E\u305B\u3093 \u2014 \u5BFE\u8C61\u306E spreadsheetId \u306F\u547C\u3073\u51FA\u3057\u3054\u3068\u306B\u6E21\u3057\u307E\u3059\u3002spreadsheetId \u306F\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u30D1\u30E9\u30E1\u30FC\u30BF\u3084\u74B0\u5883\u5909\u6570\u3068\u3057\u3066\u4FDD\u5B58\u3055\u308C\u306A\u3044\u305F\u3081\u3001\u30CF\u30F3\u30C9\u30E9\u306E\u547C\u3073\u51FA\u3057\u5143\uFF08\u30EA\u30AF\u30A8\u30B9\u30C8\u5165\u529B\u306A\u3069\uFF09\u304B\u3089\u660E\u793A\u7684\u306B\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
73002
73023
|
|
|
73003
|
-
### Google Sheets API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
73024
|
+
### Google Sheets API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
73004
73025
|
|
|
73026
|
+
\u8AAD\u307F\u53D6\u308A:
|
|
73005
73027
|
- GET \`/{spreadsheetId}\` \u2014 \u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\uFF08\u30BF\u30A4\u30C8\u30EB\u3001\u30B7\u30FC\u30C8\u3001\u30D7\u30ED\u30D1\u30C6\u30A3\uFF09
|
|
73006
73028
|
- GET \`/{spreadsheetId}/values/{range}\` \u2014 \u7BC4\u56F2\u306E\u30BB\u30EB\u5024\u3092\u53D6\u5F97
|
|
73007
73029
|
- GET \`/{spreadsheetId}/values:batchGet?ranges={range1}&ranges={range2}\` \u2014 \u8907\u6570\u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97
|
|
73008
73030
|
|
|
73031
|
+
\u66F8\u304D\u8FBC\u307F:
|
|
73032
|
+
- PUT \`/{spreadsheetId}/values/{range}?valueInputOption=USER_ENTERED\` \u2014 \u7BC4\u56F2\u3092\u4E0A\u66F8\u304D\uFF08body: \`{ range, majorDimension, values }\`\uFF09
|
|
73033
|
+
- POST \`/{spreadsheetId}/values/{range}:append?valueInputOption=USER_ENTERED\` \u2014 \u65E2\u5B58\u30C7\u30FC\u30BF\u306E\u5F8C\u308D\u306B\u884C\u3092\u8FFD\u8A18
|
|
73034
|
+
- POST \`/{spreadsheetId}/values/{range}:clear\` \u2014 \u7BC4\u56F2\u306E\u5024\u3092\u30AF\u30EA\u30A2
|
|
73035
|
+
- POST \`/{spreadsheetId}/values:batchUpdate\` \u2014 \u30D0\u30C3\u30C1\u66F4\u65B0 / \u30D0\u30C3\u30C1\u30AF\u30EA\u30A2
|
|
73036
|
+
- POST \`/{spreadsheetId}:batchUpdate\` \u2014 \u69CB\u9020\u5909\u66F4\uFF08addSheet, deleteSheet, updateCells, \u66F8\u5F0F\u8A2D\u5B9A \u7B49\uFF09
|
|
73037
|
+
|
|
73009
73038
|
### \u7BC4\u56F2\u306E\u8868\u8A18\u6CD5\uFF08A1\u8868\u8A18\u6CD5\uFF09
|
|
73010
73039
|
- \`Sheet1!A1:D10\` \u2014 Sheet1\u4E0A\u306E\u7279\u5B9A\u7BC4\u56F2
|
|
73011
73040
|
- \`Sheet1!A:A\` \u2014 Sheet1\u306EA\u5217\u5168\u4F53
|
|
@@ -73015,20 +73044,24 @@ const batch = await sheets.batchGetValues(["Sheet1!A:A", "Sheet2!B2:C100"]);
|
|
|
73015
73044
|
|
|
73016
73045
|
### \u30D2\u30F3\u30C8
|
|
73017
73046
|
- \u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u3092\u63A2\u7D22\u3059\u308B\u306B\u306F\u3001\u307E\u305A\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3057\u3066\u5229\u7528\u53EF\u80FD\u306A\u30B7\u30FC\u30C8\u540D\u3092\u78BA\u8A8D\u3057\u307E\u3059
|
|
73047
|
+
- \u6570\u5F0F\u3084\u65E5\u4ED8\u3092 UI \u3068\u540C\u3058\u3088\u3046\u306B\u89E3\u91C8\u3055\u305B\u308B\u306B\u306F \`valueInputOption=USER_ENTERED\`\u3001\u305D\u306E\u307E\u307E\u6587\u5B57\u5217\u3068\u3057\u3066\u4FDD\u5B58\u3059\u308B\u306B\u306F \`RAW\` \u3092\u4F7F\u3044\u307E\u3059
|
|
73018
73048
|
- \u8868\u793A\u5024\u3092\u53D6\u5F97\u3059\u308B\u306B\u306F \`valueRenderOption=FORMATTED_VALUE\` \u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u4F7F\u7528\u3057\u307E\u3059
|
|
73019
73049
|
- \u751F\u306E\u6570\u5024\u3092\u53D6\u5F97\u3059\u308B\u306B\u306F \`valueRenderOption=UNFORMATTED_VALUE\` \u3092\u4F7F\u7528\u3057\u307E\u3059
|
|
73020
73050
|
- \u5217\u3054\u3068\u306B\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3059\u308B\u306B\u306F \`majorDimension=COLUMNS\` \u3092\u4F7F\u7528\u3057\u307E\u3059
|
|
73021
73051
|
|
|
73022
73052
|
### Business Logic
|
|
73023
73053
|
|
|
73024
|
-
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u4EE5\u4E0B\u306B\u793A\u3059\u30B3\u30CD\u30AF\u30BF SDK \u3092\u4F7F\u7528\u3057\u3066\u30CF\u30F3\u30C9\u30E9\u30B3\u30FC\u30C9\u3092\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u76F4\u63A5\u8A8D\u8A3C\u60C5\u5831\u306B\u30A2\u30AF\u30BB\u30B9\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002\`INTERNAL_SQUADBASE_*\` \u306E\u74B0\u5883\u5909\u6570\u3092\u4F7F\u3063\u3066\u624B\u52D5\u3067 OAuth \u30D7\u30ED\u30AD\u30B7\u3092\u53E9\u304F\u3053\u3068\u3082\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044 \u2014 SDK \u304C OAuth \u3092\u51E6\u7406\u3057\u307E\u3059\u3002\
|
|
73054
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u4EE5\u4E0B\u306B\u793A\u3059\u30B3\u30CD\u30AF\u30BF SDK \u3092\u4F7F\u7528\u3057\u3066\u30CF\u30F3\u30C9\u30E9\u30B3\u30FC\u30C9\u3092\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u76F4\u63A5\u8A8D\u8A3C\u60C5\u5831\u306B\u30A2\u30AF\u30BB\u30B9\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002\`INTERNAL_SQUADBASE_*\` \u306E\u74B0\u5883\u5909\u6570\u3092\u4F7F\u3063\u3066\u624B\u52D5\u3067 OAuth \u30D7\u30ED\u30AD\u30B7\u3092\u53E9\u304F\u3053\u3068\u3082\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044 \u2014 SDK \u304C OAuth \u3092\u51E6\u7406\u3057\u307E\u3059\u3002\u5BFE\u8C61 spreadsheetId \u306F\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306B\u4FDD\u5B58\u3055\u308C\u306A\u3044\u305F\u3081\u3001\u30CF\u30F3\u30C9\u30E9\u306E\u547C\u3073\u51FA\u3057\u5143\uFF08\u30EA\u30AF\u30A8\u30B9\u30C8\u5165\u529B\u306A\u3069\uFF09\u304B\u3089\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
73025
73055
|
|
|
73026
73056
|
SDK\uFF08\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\uFF09:
|
|
73027
|
-
- \`client.
|
|
73028
|
-
- \`client.
|
|
73029
|
-
- \`client.
|
|
73030
|
-
- \`client.
|
|
73031
|
-
- \`client.
|
|
73057
|
+
- \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304D fetch\uFF08\`path\` \u306F \`https://sheets.googleapis.com/v4/spreadsheets\` \u306B\u8FFD\u52A0\u3055\u308C\u3001\u547C\u3073\u51FA\u3057\u5074\u304C spreadsheetId \u3092\u542B\u3081\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\uFF09\u3002
|
|
73058
|
+
- \`client.getSpreadsheet(spreadsheetId)\` \u2014 \u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3002
|
|
73059
|
+
- \`client.getValues(spreadsheetId, range)\` \u2014 \u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97\uFF08A1 \u8868\u8A18\uFF09\u3002
|
|
73060
|
+
- \`client.batchGetValues(spreadsheetId, ranges)\` \u2014 \u8907\u6570\u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97\u3002
|
|
73061
|
+
- \`client.updateValues(spreadsheetId, range, values, valueInputOption?)\` \u2014 \u7BC4\u56F2\u3092\u4E0A\u66F8\u304D\uFF08\u66F8\u304D\u8FBC\u307F\u30B9\u30B3\u30FC\u30D7\u304C\u5FC5\u8981\uFF09\u3002
|
|
73062
|
+
- \`client.appendValues(spreadsheetId, range, values, valueInputOption?)\` \u2014 \u884C\u3092\u8FFD\u8A18\uFF08\u66F8\u304D\u8FBC\u307F\u30B9\u30B3\u30FC\u30D7\u304C\u5FC5\u8981\uFF09\u3002
|
|
73063
|
+
- \`client.clearValues(spreadsheetId, range)\` \u2014 \u7BC4\u56F2\u306E\u5024\u3092\u30AF\u30EA\u30A2\uFF08\u66F8\u304D\u8FBC\u307F\u30B9\u30B3\u30FC\u30D7\u304C\u5FC5\u8981\uFF09\u3002
|
|
73064
|
+
- \`client.batchUpdate(spreadsheetId, requests)\` \u2014 \u69CB\u9020\u5909\u66F4\uFF08\u66F8\u304D\u8FBC\u307F\u30B9\u30B3\u30FC\u30D7\u304C\u5FC5\u8981\uFF09\u3002
|
|
73032
73065
|
|
|
73033
73066
|
\u30CF\u30F3\u30C9\u30E9\u306E\u30C6\u30B9\u30C8\u304C \`Connection proxy is not configured\` \u3067\u5931\u6557\u3059\u308B\u5834\u5408\u306F\u518D\u8A66\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u901A\u5E38\u306F\u30B5\u30F3\u30C9\u30DC\u30C3\u30AF\u30B9\u306E\u521D\u671F\u5316\u4E2D\u306B\u8D77\u304D\u307E\u3059\u3002SDK \u3092\u8AE6\u3081\u3066 OAuth \u30D7\u30ED\u30AD\u30B7\u306E URL \u3092\u81EA\u5206\u3067\u7D44\u307F\u7ACB\u3066\u308B\u3053\u3068\u306F **\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044**\u3002
|
|
73034
73067
|
|
|
@@ -73038,17 +73071,21 @@ SDK\uFF08\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9
|
|
|
73038
73071
|
import { connection } from "@squadbase/vite-server/connectors/google-sheets";
|
|
73039
73072
|
|
|
73040
73073
|
const sheets = connection("<connectionId>");
|
|
73074
|
+
const spreadsheetId = "<\u30EA\u30AF\u30A8\u30B9\u30C8\u5165\u529B\u304B\u3089\u53D7\u3051\u53D6\u308B>";
|
|
73041
73075
|
|
|
73042
|
-
// \
|
|
73043
|
-
const metadata = await sheets.getSpreadsheet();
|
|
73044
|
-
|
|
73076
|
+
// \u8AAD\u307F\u53D6\u308A: \u30E1\u30BF\u30C7\u30FC\u30BF\u3068\u5024
|
|
73077
|
+
const metadata = await sheets.getSpreadsheet(spreadsheetId);
|
|
73078
|
+
const values = await sheets.getValues(spreadsheetId, "Sheet1!A1:D10");
|
|
73045
73079
|
|
|
73046
|
-
// \
|
|
73047
|
-
|
|
73048
|
-
|
|
73080
|
+
// \u66F8\u304D\u8FBC\u307F: \u4E0A\u66F8\u304D\u30FB\u8FFD\u8A18\u30FB\u30AF\u30EA\u30A2
|
|
73081
|
+
await sheets.updateValues(spreadsheetId, "Sheet1!A1:B2", [["name", "age"], ["Alice", 30]]);
|
|
73082
|
+
await sheets.appendValues(spreadsheetId, "Sheet1!A:B", [["Bob", 25]]);
|
|
73083
|
+
await sheets.clearValues(spreadsheetId, "Sheet1!A1:B10");
|
|
73049
73084
|
|
|
73050
|
-
// \
|
|
73051
|
-
|
|
73085
|
+
// \u69CB\u9020\u5909\u66F4\uFF08\u30B7\u30FC\u30C8\u3092\u8FFD\u52A0\uFF09
|
|
73086
|
+
await sheets.batchUpdate(spreadsheetId, [
|
|
73087
|
+
{ addSheet: { properties: { title: "NewSheet" } } },
|
|
73088
|
+
]);
|
|
73052
73089
|
\`\`\``
|
|
73053
73090
|
},
|
|
73054
73091
|
tools: tools18
|