Add Activepieces integration for workflow automation

- Add Activepieces fork with SmoothSchedule custom piece
- Create integrations app with Activepieces service layer
- Add embed token endpoint for iframe integration
- Create Automations page with embedded workflow builder
- Add sidebar visibility fix for embed mode
- Add list inactive customers endpoint to Public API
- Include SmoothSchedule triggers: event created/updated/cancelled
- Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,3 @@
{
"presets": [["@nx/js/babel", { "useBuiltIns": "usage" }]]
}

View File

@@ -0,0 +1,18 @@
{
"extends": ["../../../../.eslintrc.json"],
"ignorePatterns": ["!**/*"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {}
},
{
"files": ["*.ts", "*.tsx"],
"rules": {}
},
{
"files": ["*.js", "*.jsx"],
"rules": {}
}
]
}

View File

@@ -0,0 +1,7 @@
# pieces-google-sheets
This library was generated with [Nx](https://nx.dev).
## Running lint
Run `nx lint pieces-google-sheets` to execute the lint via [ESLint](https://eslint.org/).

View File

@@ -0,0 +1,9 @@
{
"name": "@activepieces/piece-google-sheets",
"version": "0.13.1",
"dependencies": {
"csv-parse": "5.6.0",
"googleapis": "129.0.0",
"lodash": "4.17.21"
}
}

View File

@@ -0,0 +1,51 @@
{
"name": "pieces-google-sheets",
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "packages/pieces/community/google-sheets/src",
"projectType": "library",
"targets": {
"build": {
"executor": "@nx/js:tsc",
"outputs": [
"{options.outputPath}"
],
"options": {
"outputPath": "dist/packages/pieces/community/google-sheets",
"tsConfig": "packages/pieces/community/google-sheets/tsconfig.lib.json",
"packageJson": "packages/pieces/community/google-sheets/package.json",
"main": "packages/pieces/community/google-sheets/src/index.ts",
"assets": [
"packages/pieces/community/google-sheets/*.md",
{
"input": "packages/pieces/community/google-sheets/src/i18n",
"output": "./src/i18n",
"glob": "**/!(i18n.json)"
}
],
"buildableProjectDepsInPackageJsonType": "dependencies",
"updateBuildableProjectDepsInPackageJson": true
},
"dependsOn": [
"^build",
"prebuild"
]
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": [
"{options.outputFile}"
]
},
"prebuild": {
"executor": "nx:run-commands",
"options": {
"cwd": "packages/pieces/community/google-sheets",
"command": "bun install --no-save --silent"
},
"dependsOn": [
"^build"
]
}
},
"tags": []
}

View File

@@ -0,0 +1,124 @@
{
"Google Sheets": "Google Sheets",
"Create, edit, and collaborate on spreadsheets online": "Create, edit, and collaborate on spreadsheets online",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insert Multiple Rows",
"Delete Row": "Delete Row",
"Update Row": "Update Row",
"Find Rows": "Find Rows",
"Create Spreadsheet": "Create Spreadsheet",
"Create Worksheet": "Create Worksheet",
"Clear Sheet": "Clear Sheet",
"Get Row": "Get Row",
"Get next row(s)": "Get next row(s)",
"Find Spreadsheet(s)": "Find Spreadsheet(s)",
"Find Worksheet(s)": "Find Worksheet(s)",
"Copy Worksheet": "Copy Worksheet",
"Update Multiple Rows": "Update Multiple Rows",
"Create Spreadsheet Column": "Create Spreadsheet Column",
"Custom API Call": "Custom API Call",
"Append a row of values to an existing sheet": "Append a row of values to an existing sheet",
"Add one or more new rows in a specific spreadsheet.": "Add one or more new rows in a specific spreadsheet.",
"Delete a row on an existing sheet you have access to": "Delete a row on an existing sheet you have access to",
"Overwrite values in an existing row": "Overwrite values in an existing row",
"Find or get rows in a Google Sheet by column name and search value": "Find or get rows in a Google Sheet by column name and search value",
"Creates a blank spreadsheet.": "Creates a blank spreadsheet.",
"Create a blank worksheet with a title.": "Create a blank worksheet with a title.",
"Clears all rows on an existing sheet": "Clears all rows on an existing sheet",
"Get a row in a Google Sheet by row number": "Get a row in a Google Sheet by row number",
"Get next group of rows from a Google Sheet": "Get next group of rows from a Google Sheet",
"Find spreadsheet(s) by name.": "Find spreadsheet(s) by name.",
"Finds a worksheet(s) by title.": "Finds a worksheet(s) by title.",
"Creates a new worksheet by copying an existing one.": "Creates a new worksheet by copying an existing one.",
"Updates multiple rows in a specific spreadsheet.": "Updates multiple rows in a specific spreadsheet.",
"Adds a new column to a spreadsheet.": "Adds a new column to a spreadsheet.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Include Team Drive Sheets ?": "Include Team Drive Sheets ?",
"Spreadsheet": "Spreadsheet",
"Sheet": "Sheet",
"As String": "As String",
"Does the first row contain headers?": "Does the first row contain headers?",
"Values": "Values",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Overwrite Existing Data?",
"Avoid Duplicates?": "Avoid Duplicates?",
"Duplicate Value Column": "Duplicate Value Column",
"Row Number": "Row Number",
"The name of the column to search in": "The name of the column to search in",
"Search Value": "Search Value",
"Exact match": "Exact match",
"Starting Row": "Starting Row",
"Number of Rows": "Number of Rows",
"Title": "Title",
"Parent Folder": "Parent Folder",
"Headers": "Headers",
"Is First row Headers?": "Is First row Headers?",
"Start Row": "Start Row",
"Markdown": "Markdown",
"Memory Key": "Memory Key",
"Group Size": "Group Size",
"Spreadsheet Name": "Spreadsheet Name",
"Exact Match": "Exact Match",
"Spreadsheet Containing the Worksheet to Copy": "Spreadsheet Containing the Worksheet to Copy",
"Worksheet to Copy": "Worksheet to Copy",
"Spreadsheet to paste in": "Spreadsheet to paste in",
"Column Name": "Column Name",
"Column Index": "Column Index",
"Method": "Method",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Determines if sheets from Team Drives should be included in the results.": "Determines if sheets from Team Drives should be included in the results.",
"The ID of the spreadsheet to use.": "The ID of the spreadsheet to use.",
"The ID of the sheet to use.": "The ID of the sheet to use.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Inserted values that are dates and formulas will be entered strings and have no effect",
"If the first row is headers": "If the first row is headers",
"The values to insert": "The values to insert",
"Select the format of the input values to be inserted into the sheet.": "Select the format of the input values to be inserted into the sheet.",
"The values to insert.": "The values to insert.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.",
"The column to check for duplicate values.": "The column to check for duplicate values.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Inserted values that are dates and formulas will be entered as strings and have no effect",
"The row number to remove": "The row number to remove",
"The row number to update": "The row number to update",
"The value to search for in the specified column. If left empty, all rows will be returned.": "The value to search for in the specified column. If left empty, all rows will be returned.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Whether to choose the rows with exact match or choose the rows that contain the search value",
"The row number to start searching from": "The row number to start searching from",
"The number of rows to return ( the default is 1 if not specified )": "The number of rows to return ( the default is 1 if not specified )",
"The title of the new spreadsheet.": "The title of the new spreadsheet.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.",
"The title of the new worksheet.": "The title of the new worksheet.",
"The row number to get from the sheet": "The row number to get from the sheet",
"Which row to start from?": "Which row to start from?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "The key used to store the current row number in memory",
"The number of rows to get": "The number of rows to get",
"The name of the spreadsheet(s) to find.": "The name of the spreadsheet(s) to find.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.",
"The values to update.": "The values to update.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Column Names",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Row Added": "New Row Added",
"New or Updated Row": "New or Updated Row",
"New Spreadsheet": "New Spreadsheet",
"New Worksheet": "New Worksheet",
"Triggers when a new row is added to bottom of a spreadsheet.": "Triggers when a new row is added to bottom of a spreadsheet.",
"Triggers when a new row is added or modified in a spreadsheet.": "Triggers when a new row is added or modified in a spreadsheet.",
"Triggers when a new spreadsheet is created.": "Triggers when a new spreadsheet is created.",
"Triggers when a worksheet is created in a spreadsheet.": "Triggers when a worksheet is created in a spreadsheet.",
"Trigger Column": "Trigger Column",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.",
"Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,124 @@
{
"Google Sheets": "Google Sheets",
"Create, edit, and collaborate on spreadsheets online": "Create, edit, and collaborate on spreadsheets online",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insert Multiple Rows",
"Delete Row": "Delete Row",
"Update Row": "Update Row",
"Find Rows": "Find Rows",
"Create Spreadsheet": "Create Spreadsheet",
"Create Worksheet": "Create Worksheet",
"Clear Sheet": "Clear Sheet",
"Get Row": "Get Row",
"Get next row(s)": "Get next row(s)",
"Find Spreadsheet(s)": "Find Spreadsheet(s)",
"Find Worksheet(s)": "Find Worksheet(s)",
"Copy Worksheet": "Copy Worksheet",
"Update Multiple Rows": "Update Multiple Rows",
"Create Spreadsheet Column": "Create Spreadsheet Column",
"Custom API Call": "Custom API Call",
"Append a row of values to an existing sheet": "Append a row of values to an existing sheet",
"Add one or more new rows in a specific spreadsheet.": "Add one or more new rows in a specific spreadsheet.",
"Delete a row on an existing sheet you have access to": "Delete a row on an existing sheet you have access to",
"Overwrite values in an existing row": "Overwrite values in an existing row",
"Find or get rows in a Google Sheet by column name and search value": "Find or get rows in a Google Sheet by column name and search value",
"Creates a blank spreadsheet.": "Creates a blank spreadsheet.",
"Create a blank worksheet with a title.": "Create a blank worksheet with a title.",
"Clears all rows on an existing sheet": "Clears all rows on an existing sheet",
"Get a row in a Google Sheet by row number": "Get a row in a Google Sheet by row number",
"Get next group of rows from a Google Sheet": "Get next group of rows from a Google Sheet",
"Find spreadsheet(s) by name.": "Find spreadsheet(s) by name.",
"Finds a worksheet(s) by title.": "Finds a worksheet(s) by title.",
"Creates a new worksheet by copying an existing one.": "Creates a new worksheet by copying an existing one.",
"Updates multiple rows in a specific spreadsheet.": "Updates multiple rows in a specific spreadsheet.",
"Adds a new column to a spreadsheet.": "Adds a new column to a spreadsheet.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Include Team Drive Sheets ?": "Include Team Drive Sheets ?",
"Spreadsheet": "Spreadsheet",
"Sheet": "Sheet",
"As String": "As String",
"Does the first row contain headers?": "Does the first row contain headers?",
"Values": "Values",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Overwrite Existing Data?",
"Avoid Duplicates?": "Avoid Duplicates?",
"Duplicate Value Column": "Duplicate Value Column",
"Row Number": "Row Number",
"The name of the column to search in": "The name of the column to search in",
"Search Value": "Search Value",
"Exact match": "Exact match",
"Starting Row": "Starting Row",
"Number of Rows": "Number of Rows",
"Title": "Title",
"Parent Folder": "Parent Folder",
"Headers": "Headers",
"Is First row Headers?": "Is First row Headers?",
"Start Row": "Start Row",
"Markdown": "Markdown",
"Memory Key": "Memory Key",
"Group Size": "Group Size",
"Spreadsheet Name": "Spreadsheet Name",
"Exact Match": "Exact Match",
"Spreadsheet Containing the Worksheet to Copy": "Spreadsheet Containing the Worksheet to Copy",
"Worksheet to Copy": "Worksheet to Copy",
"Spreadsheet to paste in": "Spreadsheet to paste in",
"Column Name": "Column Name",
"Column Index": "Column Index",
"Method": "Method",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Determines if sheets from Team Drives should be included in the results.": "Determines if sheets from Team Drives should be included in the results.",
"The ID of the spreadsheet to use.": "The ID of the spreadsheet to use.",
"The ID of the sheet to use.": "The ID of the sheet to use.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Inserted values that are dates and formulas will be entered strings and have no effect",
"If the first row is headers": "If the first row is headers",
"The values to insert": "The values to insert",
"Select the format of the input values to be inserted into the sheet.": "Select the format of the input values to be inserted into the sheet.",
"The values to insert.": "The values to insert.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.",
"The column to check for duplicate values.": "The column to check for duplicate values.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Inserted values that are dates and formulas will be entered as strings and have no effect",
"The row number to remove": "The row number to remove",
"The row number to update": "The row number to update",
"The value to search for in the specified column. If left empty, all rows will be returned.": "The value to search for in the specified column. If left empty, all rows will be returned.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Whether to choose the rows with exact match or choose the rows that contain the search value",
"The row number to start searching from": "The row number to start searching from",
"The number of rows to return ( the default is 1 if not specified )": "The number of rows to return ( the default is 1 if not specified )",
"The title of the new spreadsheet.": "The title of the new spreadsheet.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.",
"The title of the new worksheet.": "The title of the new worksheet.",
"The row number to get from the sheet": "The row number to get from the sheet",
"Which row to start from?": "Which row to start from?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "The key used to store the current row number in memory",
"The number of rows to get": "The number of rows to get",
"The name of the spreadsheet(s) to find.": "The name of the spreadsheet(s) to find.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.",
"The values to update.": "The values to update.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Column Names",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Row Added": "New Row Added",
"New or Updated Row": "New or Updated Row",
"New Spreadsheet": "New Spreadsheet",
"New Worksheet": "New Worksheet",
"Triggers when a new row is added to bottom of a spreadsheet.": "Triggers when a new row is added to bottom of a spreadsheet.",
"Triggers when a new row is added or modified in a spreadsheet.": "Triggers when a new row is added or modified in a spreadsheet.",
"Triggers when a new spreadsheet is created.": "Triggers when a new spreadsheet is created.",
"Triggers when a worksheet is created in a spreadsheet.": "Triggers when a worksheet is created in a spreadsheet.",
"Trigger Column": "Trigger Column",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.",
"Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,132 @@
{
"Google Sheets": "Google Sheets",
"Create, edit, and collaborate on spreadsheets online": "Create, edit, and collaborate on spreadsheets online",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insert Multiple Rows",
"Delete Row": "Delete Row",
"Update Row": "Update Row",
"Find Rows": "Find Rows",
"Create Spreadsheet": "Create Spreadsheet",
"Create Worksheet": "Create Worksheet",
"Clear Sheet": "Clear Sheet",
"Get Row": "Get Row",
"Get next row(s)": "Get next row(s)",
"Find Spreadsheet(s)": "Find Spreadsheet(s)",
"Find Worksheet(s)": "Find Worksheet(s)",
"Copy Worksheet": "Copy Worksheet",
"Update Multiple Rows": "Update Multiple Rows",
"Create Spreadsheet Column": "Create Spreadsheet Column",
"Export Sheet": "Export Sheet",
"Custom API Call": "Custom API Call",
"Append a row of values to an existing sheet": "Append a row of values to an existing sheet",
"Add one or more new rows in a specific spreadsheet.": "Add one or more new rows in a specific spreadsheet.",
"Delete a row on an existing sheet you have access to": "Delete a row on an existing sheet you have access to",
"Overwrite values in an existing row": "Overwrite values in an existing row",
"Find or get rows in a Google Sheet by column name and search value": "Find or get rows in a Google Sheet by column name and search value",
"Creates a blank spreadsheet.": "Creates a blank spreadsheet.",
"Create a blank worksheet with a title.": "Create a blank worksheet with a title.",
"Clears all rows on an existing sheet": "Clears all rows on an existing sheet",
"Get a row in a Google Sheet by row number": "Get a row in a Google Sheet by row number",
"Get next group of rows from a Google Sheet": "Get next group of rows from a Google Sheet",
"Find spreadsheet(s) by name.": "Find spreadsheet(s) by name.",
"Finds a worksheet(s) by title.": "Finds a worksheet(s) by title.",
"Creates a new worksheet by copying an existing one.": "Creates a new worksheet by copying an existing one.",
"Updates multiple rows in a specific spreadsheet.": "Updates multiple rows in a specific spreadsheet.",
"Adds a new column to a spreadsheet.": "Adds a new column to a spreadsheet.",
"Export a Google Sheets tab to CSV or TSV format.": "Export a Google Sheets tab to CSV or TSV format.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Include Team Drive Sheets ?": "Include Team Drive Sheets ?",
"Spreadsheet": "Spreadsheet",
"Sheet": "Sheet",
"As String": "As String",
"Does the first row contain headers?": "Does the first row contain headers?",
"Values": "Values",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Overwrite Existing Data?",
"Avoid Duplicates?": "Avoid Duplicates?",
"Duplicate Value Column": "Duplicate Value Column",
"Row Number": "Row Number",
"The name of the column to search in": "The name of the column to search in",
"Search Value": "Search Value",
"Exact match": "Exact match",
"Starting Row": "Starting Row",
"Number of Rows": "Number of Rows",
"Title": "Title",
"Parent Folder": "Parent Folder",
"Headers": "Headers",
"Is First row Headers?": "Is First row Headers?",
"Start Row": "Start Row",
"Markdown": "Markdown",
"Memory Key": "Memory Key",
"Group Size": "Group Size",
"Spreadsheet Name": "Spreadsheet Name",
"Exact Match": "Exact Match",
"Spreadsheet Containing the Worksheet to Copy": "Spreadsheet Containing the Worksheet to Copy",
"Worksheet to Copy": "Worksheet to Copy",
"Spreadsheet to paste in": "Spreadsheet to paste in",
"Column Name": "Column Name",
"Column Index": "Column Index",
"Export Format": "Export Format",
"Return as Text": "Return as Text",
"Method": "Method",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Determines if sheets from Team Drives should be included in the results.": "Determines if sheets from Team Drives should be included in the results.",
"The ID of the spreadsheet to use.": "The ID of the spreadsheet to use.",
"The ID of the sheet to use.": "The ID of the sheet to use.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Inserted values that are dates and formulas will be entered strings and have no effect",
"If the first row is headers": "If the first row is headers",
"The values to insert": "The values to insert",
"Select the format of the input values to be inserted into the sheet.": "Select the format of the input values to be inserted into the sheet.",
"The values to insert.": "The values to insert.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.",
"The column to check for duplicate values.": "The column to check for duplicate values.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Inserted values that are dates and formulas will be entered as strings and have no effect",
"The row number to remove": "The row number to remove",
"The row number to update": "The row number to update",
"The value to search for in the specified column. If left empty, all rows will be returned.": "The value to search for in the specified column. If left empty, all rows will be returned.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Whether to choose the rows with exact match or choose the rows that contain the search value",
"The row number to start searching from": "The row number to start searching from",
"The number of rows to return ( the default is 1 if not specified )": "The number of rows to return ( the default is 1 if not specified )",
"The title of the new spreadsheet.": "The title of the new spreadsheet.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.",
"The title of the new worksheet.": "The title of the new worksheet.",
"The row number to get from the sheet": "The row number to get from the sheet",
"Which row to start from?": "Which row to start from?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "The key used to store the current row number in memory",
"The number of rows to get": "The number of rows to get",
"The name of the spreadsheet(s) to find.": "The name of the spreadsheet(s) to find.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.",
"The values to update.": "The values to update.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.",
"The format to export the sheet to.": "The format to export the sheet to.",
"Return the exported data as text instead of a file.": "Return the exported data as text instead of a file.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Column Names",
"Comma Separated Values (.csv)": "Comma Separated Values (.csv)",
"Tab Separated Values (.tsv)": "Tab Separated Values (.tsv)",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Row Added": "New Row Added",
"New or Updated Row": "New or Updated Row",
"New Spreadsheet": "New Spreadsheet",
"New Worksheet": "New Worksheet",
"Triggers when a new row is added to bottom of a spreadsheet.": "Triggers when a new row is added to bottom of a spreadsheet.",
"Triggers when a new row is added or modified in a spreadsheet.": "Triggers when a new row is added or modified in a spreadsheet.",
"Triggers when a new spreadsheet is created.": "Triggers when a new spreadsheet is created.",
"Triggers when a worksheet is created in a spreadsheet.": "Triggers when a worksheet is created in a spreadsheet.",
"Trigger Column": "Trigger Column",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.",
"Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,137 @@
{
"Create, edit, and collaborate on spreadsheets online": "Erstellen und bearbeiten Sie online Tabellenkalkulationen",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Mehrere Zeilen einfügen",
"Delete Row": "Zeile löschen",
"Update Row": "Zeile aktualisieren",
"Find Rows": "Zeilen finden",
"Create Spreadsheet": "Tabelle erstellen",
"Create Worksheet": "Arbeitsblatt erstellen",
"Clear Sheet": "Platte löschen",
"Get Row": "Zeile holen",
"Get next row(s)": "Nächste Zeile(n) holen",
"Find Spreadsheet(s)": "Tabellenkalkulation(en) finden",
"Find Worksheet(s)": "Arbeitsblatt(e) finden",
"Copy Worksheet": "Arbeitsblatt kopieren",
"Update Multiple Rows": "Mehrere Zeilen aktualisieren",
"Create Spreadsheet Column": "Tabellenspalte erstellen",
"Export Sheet": "Exportblatt",
"Custom API Call": "Eigener API-Aufruf",
"Append a row of values to an existing sheet": "Eine Reihe von Werten an ein vorhandenes Blatt anhängen",
"Add one or more new rows in a specific spreadsheet.": "Fügen Sie eine oder mehrere neue Zeilen in einer bestimmten Tabelle hinzu.",
"Delete a row on an existing sheet you have access to": "Eine Zeile auf einem vorhandenen Blatt löschen, auf das Sie Zugriff haben",
"Overwrite values in an existing row": "Werte in einer bestehenden Zeile überschreiben",
"Find or get rows in a Google Sheet by column name and search value": "Suche oder erhalte Zeilen in einem Google-Blatt nach Spaltennamen und Suchwert",
"Creates a blank spreadsheet.": "Erzeugt eine leere Tabelle.",
"Create a blank worksheet with a title.": "Erstellen Sie ein leeres Arbeitsblatt mit einem Titel.",
"Clears all rows on an existing sheet": "Löscht alle Zeilen auf einem vorhandenen Blatt",
"Get a row in a Google Sheet by row number": "Erhalte eine Zeile in einem Google Sheet für Zeile Nummer",
"Get next group of rows from a Google Sheet": "Nächste Datensatzgruppe aus einem Google Sheet holen",
"Find spreadsheet(s) by name.": "Finde Tabellenkalkulation(en) nach Namen.",
"Finds a worksheet(s) by title.": "Findet eine Tabelle(n) nach Titel.",
"Creates a new worksheet by copying an existing one.": "Erstellt ein neues Arbeitsblatt, indem ein vorhandenes Exemplar kopiert wird.",
"Updates multiple rows in a specific spreadsheet.": "Aktualisiert mehrere Zeilen in einer bestimmten Tabellenkalkulation.",
"Adds a new column to a spreadsheet.": "Fügt einer Tabelle eine neue Spalte hinzu.",
"Export a Google Sheets tab to CSV or TSV format.": "Exportieren Sie einen Tab für Google Sheets in das CSV- oder TSV-Format.",
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
"Include Team Drive Sheets ?": "Team Drive Sheets einbinden ?",
"Spreadsheet": "Tabellenblatt",
"Sheet": "Blatt",
"As String": "Als Zeichenkette",
"Does the first row contain headers?": "Enthält die erste Zeile Kopfzeilen?",
"Values": "Werte",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Bestehende Daten überschreiben?",
"Avoid Duplicates?": "Duplikate vermeiden?",
"Duplicate Value Column": "Spalte Wert duplizieren",
"Header Row": "Kopfzeile",
"Row Number": "Zeilennummer",
"The name of the column to search in": "Der Name der zu durchsuchenden Spalte",
"Search Value": "Suchwert",
"Exact match": "Genaue Übereinstimmung",
"Starting Row": "Startzeile",
"Number of Rows": "Anzahl der Zeilen",
"Use header names for keys": "Headernamen für Schlüssel verwenden",
"Title": "Titel",
"Parent Folder": "Eltern-Ordner",
"Headers": "Kopfzeilen",
"Is First row Headers?": "Sind die Kopfzeilen der ersten Reihe?",
"Start Row": "Start-Zeile",
"Markdown": "Markdown",
"Memory Key": "Speicherschlüssel",
"Group Size": "Gruppengröße",
"Spreadsheet Name": "Tabellenname",
"Exact Match": "Genaues Match",
"Spreadsheet Containing the Worksheet to Copy": "Tabellenblatt mit dem zu kopierenden Arbeitsblatt",
"Worksheet to Copy": "Arbeitsblatt zum Kopieren",
"Spreadsheet to paste in": "Tabelle zum Einfügen",
"Column Name": "Spaltenname",
"Column Index": "Spaltenindex",
"Export Format": "Exportformat",
"Return as Text": "Als Text zurückgeben",
"Method": "Methode",
"Query Parameters": "Abfrageparameter",
"Body": "Körper",
"Response is Binary ?": "Antwort ist binär?",
"No Error on Failure": "Kein Fehler bei Fehler",
"Timeout (in seconds)": "Timeout (in Sekunden)",
"Determines if sheets from Team Drives should be included in the results.": "Legt fest, ob Blätter von Team Drives in die Ergebnisse aufgenommen werden sollen.",
"The ID of the spreadsheet to use.": "Die ID der zu verwendenden Tabellenkalkulation.",
"The ID of the sheet to use.": "Die ID des zu verwendenden Blatts.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Fügte Werte als Daten und Formeln werden eingegeben und haben keine Wirkung",
"If the first row is headers": "Wenn die erste Zeile Kopfzeilen ist",
"The values to insert": "Die einzufügenden Werte",
"Select the format of the input values to be inserted into the sheet.": "Wählen Sie das Format der Eingabewerte, die in das Blatt eingefügt werden sollen.",
"The values to insert.": "Die einzufügenden Werte.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Aktivieren Sie diese Option, um alle vorhandenen Daten im Blatt durch neue Daten aus Ihrer Eingabe zu ersetzen. Dadurch werden alle zusätzlichen Datensätze außerhalb des aktualisierten Bereichs gelöscht.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Aktivieren Sie diese Option, um vor dem Einfügen von Daten in das Tabellenblatt auf doppelte Werte zu überprüfen. Nur eindeutige Zeilen werden basierend auf der ausgewählten Spalte hinzugefügt.",
"The column to check for duplicate values.": "Die Spalte, die auf doppelte Werte überprüft werden soll.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Fügte Werte als Daten und Formeln werden als Zeichenketten eingegeben und haben keine Wirkung",
"Which row contains the headers?": "Welche Zeile enthält die Kopfzeilen?",
"The row number to remove": "Die zu entfernende Zeilennummer",
"The row number to update": "Die zu aktualisierende Zeilennummer",
"The value to search for in the specified column. If left empty, all rows will be returned.": "Der zu suchende Wert in der angegebenen Spalte. Wenn leer bleibt, werden alle Zeilen zurückgegeben.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Gibt an, ob die Zeilen mit exakter Übereinstimmung ausgewählt werden sollen oder welche Zeilen den Suchwert enthalten",
"The row number to start searching from": "Die Zeilennummer, von der die Suche gestartet wird",
"The number of rows to return ( the default is 1 if not specified )": "Die Anzahl der zurückzugebenden Zeilen (Standardwert ist 1, wenn nicht spezifiziert)",
"Map A/B/C… to the actual column headers (row specified above).": "A/B/C… den aktuellen Spaltenüberschriften zuordnen (oben angegeben).",
"The title of the new spreadsheet.": "Der Titel der neuen Tabelle.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "Der Ordner, in dem das Arbeitsblatt erstellt wird. Standardmäßig wird das neue Arbeitsblatt im Stammverzeichnis des Laufwerks erstellt.",
"The title of the new worksheet.": "Der Titel der neuen Tabelle.",
"The row number to get from the sheet": "Die Zeilennummer, die vom Blatt abgerufen werden soll",
"Which row to start from?": "Von welcher Zeile soll begonnen werden?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notizen:**\n\n- Speicherschlüssel wird verwendet, um sich zu erinnern, wo die letzte Zeile verarbeitet wurde, und wird in den folgenden Ausläufen verwendet.\n- Wiederveröffentlichung des Ströms **verwahrt** den Speicherschlüsselwert, wenn Sie den Speicherschlüssel **ändern wollen** wollen.\n",
"The key used to store the current row number in memory": "Der Schlüssel, mit dem die aktuelle Zeilennummer im Speicher gespeichert wird",
"The number of rows to get": "Die Anzahl der zu erhaltenden Zeilen",
"The name of the spreadsheet(s) to find.": "Der Name der zu findenden Tabellenkalkulation(en).",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "Wenn true gibt nur Tabellenkalkulationen zurück, die genau mit dem Namen übereinstimmen. Wenn falsch, gibt die Tabellenkalkulation den Namen zurück.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "Wenn aktiviert, geben Sie nur Arbeitsblätter zurück, die genau mit dem Namen übereinstimmen. Wenn falsch, geben Sie Arbeitsblätter zurück, die den Namen enthalten.",
"The values to update.": "Die zu aktualisierenden Werte.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "Der Spaltenindex beginnt ab 1.Zum Beispiel, wenn Sie eine Spalte zur dritten Spalte hinzufügen möchten, geben Sie 3 ein. f die Eingabe kleiner als 1 ist, wird die Spalte nach der letzten aktuellen Spalte hinzugefügt.",
"The format to export the sheet to.": "Das Format, in das das Blatt exportiert wird.",
"Return the exported data as text instead of a file.": "Gibt die exportierten Daten als Text anstelle einer Datei zurück.",
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Spaltennamen",
"Comma Separated Values (.csv)": "Kommagetrennte Werte (.csv)",
"Tab Separated Values (.tsv)": "Tab-Trennwerte (.tsv)",
"GET": "ERHALTEN",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "LÖSCHEN",
"HEAD": "HEAD",
"New Row Added": "Neue Zeile hinzugefügt",
"New or Updated Row": "Neue oder aktualisierte Zeile",
"New Spreadsheet": "Neues Tabellenblatt",
"New Worksheet": "Neues Arbeitsblatt",
"Triggers when a new row is added to bottom of a spreadsheet.": "Wird ausgelöst, wenn eine neue Zeile am unteren Ende einer Tabelle hinzugefügt wird.",
"Triggers when a new row is added or modified in a spreadsheet.": "Wird ausgelöst, wenn eine neue Zeile in einer Tabelle hinzugefügt oder verändert wird.",
"Triggers when a new spreadsheet is created.": "Wird ausgelöst, wenn eine neue Tabellenkalkulation erstellt wird.",
"Triggers when a worksheet is created in a spreadsheet.": "Wird ausgelöst, wenn eine Tabelle in einer Tabelle erstellt wird.",
"Trigger Column": "Spalte auslösen",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Bitte beachten Sie, dass es aufgrund einer Verzögerung von Google eine Verzögerung von bis zu 3 Minuten geben kann, bis der Trigger angezündet wird.",
"Trigger on changes to cells in this column only. \nSelect **Any Column** if you want the flow to trigger on changes to any cell within the row.": "Trigger nur bei Änderungen an Zellen in dieser Spalte. \nWählen Sie **jede Spalte** aus, wenn der Fluss bei Änderungen an einer Zelle in der Reihe ausgelöst werden soll."
}

View File

@@ -0,0 +1,137 @@
{
"Create, edit, and collaborate on spreadsheets online": "Crear, editar y colaborar en hojas de cálculo en línea",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insertar múltiples filas",
"Delete Row": "Eliminar fila",
"Update Row": "Actualizar fila",
"Find Rows": "Encontrar filas",
"Create Spreadsheet": "Crear hoja de cálculo",
"Create Worksheet": "Crear hoja de trabajo",
"Clear Sheet": "Limpiar hoja",
"Get Row": "Obtener fila",
"Get next row(s)": "Obtener siguiente fila(s)",
"Find Spreadsheet(s)": "Buscar Hoja(s)",
"Find Worksheet(s)": "Buscar Hoja(s)",
"Copy Worksheet": "Copiar hoja de trabajo",
"Update Multiple Rows": "Actualizar múltiples filas",
"Create Spreadsheet Column": "Crear columna de hoja de cálculo",
"Export Sheet": "Exportar hoja",
"Custom API Call": "Llamada API personalizada",
"Append a row of values to an existing sheet": "Añadir una fila de valores a una hoja existente",
"Add one or more new rows in a specific spreadsheet.": "Añadir una o más filas nuevas en una hoja de cálculo específica.",
"Delete a row on an existing sheet you have access to": "Eliminar una fila en una hoja existente a la que tienes acceso",
"Overwrite values in an existing row": "Sobrescribir valores en una fila existente",
"Find or get rows in a Google Sheet by column name and search value": "Buscar o obtener filas en una hoja de Google por nombre de columna y valor de búsqueda",
"Creates a blank spreadsheet.": "Crea una hoja de cálculo en blanco.",
"Create a blank worksheet with a title.": "Crear una hoja de trabajo en blanco con un título.",
"Clears all rows on an existing sheet": "Limpia todas las filas en una hoja existente",
"Get a row in a Google Sheet by row number": "Obtener una fila en una hoja de Google por número de fila",
"Get next group of rows from a Google Sheet": "Obtener el siguiente grupo de filas de una hoja de Google",
"Find spreadsheet(s) by name.": "Buscar hojas de cálculo por nombre.",
"Finds a worksheet(s) by title.": "Encuentra una hoja de cálculo por título.",
"Creates a new worksheet by copying an existing one.": "Crea una nueva hoja de trabajo copiando una existente.",
"Updates multiple rows in a specific spreadsheet.": "Actualiza múltiples filas en una hoja de cálculo específica.",
"Adds a new column to a spreadsheet.": "Añade una nueva columna a una hoja de cálculo.",
"Export a Google Sheets tab to CSV or TSV format.": "Exportar una pestaña de hojas de Google a formato CSV o TSV.",
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
"Include Team Drive Sheets ?": "Incluye hojas de unidad de equipo ?",
"Spreadsheet": "Hoja de cálculo",
"Sheet": "Hoja",
"As String": "Como cadena",
"Does the first row contain headers?": "¿La primera fila contiene cabeceras?",
"Values": "Valores",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "¿Sobrescribir datos existentes?",
"Avoid Duplicates?": "¿Evitar duplicados?",
"Duplicate Value Column": "Duplicar columna de valor",
"Header Row": "Fila de cabecera",
"Row Number": "Número de fila",
"The name of the column to search in": "El nombre de la columna en la que buscar",
"Search Value": "Valor de búsqueda",
"Exact match": "Coincidencia exacta",
"Starting Row": "Fila inicial",
"Number of Rows": "Número de filas",
"Use header names for keys": "Usar nombres de cabeceras para claves",
"Title": "Título",
"Parent Folder": "Carpeta padre",
"Headers": "Encabezados",
"Is First row Headers?": "¿Es la primera fila de cabeceras?",
"Start Row": "Iniciar fila",
"Markdown": "Markdown",
"Memory Key": "Clave de memoria",
"Group Size": "Tamaño del grupo",
"Spreadsheet Name": "Nombre de la hoja de cálculo",
"Exact Match": "Partida exacta",
"Spreadsheet Containing the Worksheet to Copy": "Hoja de cálculo que contiene la hoja de trabajo a copiar",
"Worksheet to Copy": "Hoja de trabajo a copiar",
"Spreadsheet to paste in": "Hoja de cálculo para pegar en",
"Column Name": "Nombre de columna",
"Column Index": "Índice de columna",
"Export Format": "Exportar formato",
"Return as Text": "Volver como texto",
"Method": "Método",
"Query Parameters": "Parámetros de consulta",
"Body": "Cuerpo",
"Response is Binary ?": "¿Respuesta es binaria?",
"No Error on Failure": "No hay ningún error en fallo",
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
"Determines if sheets from Team Drives should be included in the results.": "Determina si las hojas de Team Drives deben ser incluidas en los resultados.",
"The ID of the spreadsheet to use.": "El ID de la hoja de cálculo a utilizar.",
"The ID of the sheet to use.": "El ID de la hoja a utilizar.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Los valores insertados que son fechas y fórmulas serán introducidos cadenas y no tendrán efecto",
"If the first row is headers": "Si la primera fila son cabeceras",
"The values to insert": "Los valores a insertar",
"Select the format of the input values to be inserted into the sheet.": "Seleccione el formato de los valores de entrada a insertar en la hoja.",
"The values to insert.": "Los valores a insertar.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Active esta opción para reemplazar todos los datos existentes en la hoja por nuevos datos de su entrada. Esto borrará cualquier registro extra más allá del rango actualizado.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Active esta opción para buscar valores duplicados antes de insertar datos en la hoja. Sólo se añadirán filas únicas basándose en la columna seleccionada.",
"The column to check for duplicate values.": "La columna para comprobar los valores duplicados.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Los valores insertados que son fechas y fórmulas se introducirán como cadenas y no tendrán efecto",
"Which row contains the headers?": "¿Qué fila contiene los encabezados?",
"The row number to remove": "El número de fila a eliminar",
"The row number to update": "El número de fila a actualizar",
"The value to search for in the specified column. If left empty, all rows will be returned.": "El valor por el que buscar en la columna especificada. Si se deja vacío, todas las filas serán retornadas.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Seleccionar las filas con coincidencia exacta o elegir las filas que contienen el valor de búsqueda",
"The row number to start searching from": "El número de fila desde el que comenzar la búsqueda",
"The number of rows to return ( the default is 1 if not specified )": "El número de filas a retornar ( el valor por defecto es 1 si no se especifica)",
"Map A/B/C… to the actual column headers (row specified above).": "Mapa A/B/C… a los encabezados de columna reales (fila especificada arriba).",
"The title of the new spreadsheet.": "El título de la nueva hoja de cálculo.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "La carpeta en la que crear la hoja de trabajo. De forma predeterminada, la nueva hoja de trabajo se crea en la carpeta raíz de la unidad.",
"The title of the new worksheet.": "El título de la nueva hoja de cálculo.",
"The row number to get from the sheet": "El número de fila a obtener de la hoja",
"Which row to start from?": "¿Desde qué fila empezar?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notas:**\n\n- La clave de memoria se utiliza para recordar en qué fila se procesó por última vez y se usará en las siguientes ejecuciones.\n- Volver a publicar el flujo **mantiene** el valor de la clave de memoria. Si deseas comenzar desde cero, **cambia** la clave de memoria.\n",
"The key used to store the current row number in memory": "La clave utilizada para almacenar el número de fila actual en la memoria",
"The number of rows to get": "El número de filas a obtener",
"The name of the spreadsheet(s) to find.": "El nombre de la hoja de cálculo a encontrar.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "Si es verdadero, sólo devuelve hojas de cálculo que coincidan exactamente con el nombre. Si es falso, devuelve hojas de cálculo que contengan el nombre.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "Si es verdadero, sólo devuelve hojas de cálculo que coincidan exactamente con el nombre. Si es falso, devuelve hojas de cálculo que contengan el nombre.",
"The values to update.": "Los valores a actualizar.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "El índice de columna comienza desde 1.Por ejemplo, si desea agregar una columna a la tercera columna, introduzca 3. f la entrada es menor que 1 la columna será añadida después de la última columna actual.",
"The format to export the sheet to.": "El formato al que exportar la hoja.",
"Return the exported data as text instead of a file.": "Devuelve los datos exportados como texto en lugar de un archivo.",
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Nombres de columna",
"Comma Separated Values (.csv)": "Valores separados por comas (.csv)",
"Tab Separated Values (.tsv)": "Pestaña Valores Separados (.tsv)",
"GET": "RECOGER",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "BORRAR",
"HEAD": "LIMPIO",
"New Row Added": "Nueva fila añadida",
"New or Updated Row": "Fila nueva o actualizada",
"New Spreadsheet": "Nueva hoja de cálculo",
"New Worksheet": "Nueva hoja de trabajo",
"Triggers when a new row is added to bottom of a spreadsheet.": "Se activa cuando se añade una nueva fila a la parte inferior de una hoja de cálculo.",
"Triggers when a new row is added or modified in a spreadsheet.": "Se activa cuando se añade o modifica una nueva fila en una hoja de cálculo.",
"Triggers when a new spreadsheet is created.": "Se activa cuando se crea una nueva hoja de cálculo.",
"Triggers when a worksheet is created in a spreadsheet.": "Se activa cuando se crea una hoja de cálculo en una hoja de cálculo.",
"Trigger Column": "Columna de gatillo",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Tenga en cuenta que puede haber un retraso de hasta 3 minutos para que el disparador se dispare, debido a un retraso de Google.",
"Trigger on changes to cells in this column only. \nSelect **Any Column** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only. \nSelect **Any Column** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,137 @@
{
"Create, edit, and collaborate on spreadsheets online": "Créer, modifier et collaborer sur des feuilles de calcul en ligne",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insérer plusieurs lignes",
"Delete Row": "Supprimer la ligne",
"Update Row": "Mettre à jour la ligne",
"Find Rows": "Trouver des lignes",
"Create Spreadsheet": "Créer une feuille de calcul",
"Create Worksheet": "Créer une feuille de calcul",
"Clear Sheet": "Vider la feuille",
"Get Row": "Obtenir la ligne",
"Get next row(s)": "Récupérer la/les lignes suivante(s)",
"Find Spreadsheet(s)": "Trouver des feuilles de calcul",
"Find Worksheet(s)": "Trouver des feuilles de travail",
"Copy Worksheet": "Copier la feuille de travail",
"Update Multiple Rows": "Mettre à jour plusieurs lignes",
"Create Spreadsheet Column": "Créer une colonne de feuille de calcul",
"Export Sheet": "Exporter la feuille",
"Custom API Call": "Appel API personnalisé",
"Append a row of values to an existing sheet": "Ajouter une ligne de valeurs à une feuille existante",
"Add one or more new rows in a specific spreadsheet.": "Ajouter une ou plusieurs nouvelles lignes dans une feuille de calcul spécifique.",
"Delete a row on an existing sheet you have access to": "Supprimer une ligne dans une feuille existante à laquelle vous avez accès",
"Overwrite values in an existing row": "Écraser les valeurs dans une ligne existante",
"Find or get rows in a Google Sheet by column name and search value": "Rechercher ou obtenir des lignes dans un Google Sheet par nom de colonne et valeur de recherche",
"Creates a blank spreadsheet.": "Crée une feuille de calcul vierge.",
"Create a blank worksheet with a title.": "Créer une feuille de travail vierge avec un titre.",
"Clears all rows on an existing sheet": "Efface toutes les lignes sur une feuille existante",
"Get a row in a Google Sheet by row number": "Obtenir une ligne dans un Google Sheet par numéro de ligne",
"Get next group of rows from a Google Sheet": "Récupérer le groupe de lignes suivant depuis un Google Sheet",
"Find spreadsheet(s) by name.": "Trouver des feuilles de calcul par nom.",
"Finds a worksheet(s) by title.": "Trouve une feuille de travail par titre.",
"Creates a new worksheet by copying an existing one.": "Crée une nouvelle feuille de travail en copiant une feuille existante.",
"Updates multiple rows in a specific spreadsheet.": "Met à jour plusieurs lignes dans une feuille de calcul spécifique.",
"Adds a new column to a spreadsheet.": "Ajoute une nouvelle colonne à une feuille de calcul.",
"Export a Google Sheets tab to CSV or TSV format.": "Exporter un onglet Google Sheets au format CSV ou TSV.",
"Make a custom API call to a specific endpoint": "Passez un appel API personnalisé à un endpoint spécifique",
"Include Team Drive Sheets ?": "Inclure les Sheets du Team Drive ?",
"Spreadsheet": "Feuille de calcul",
"Sheet": "Feuille",
"As String": "Comme chaîne de caractères",
"Does the first row contain headers?": "La première ligne contient-elle des en-têtes ?",
"Values": "Valeurs",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Écraser les données existantes ?",
"Avoid Duplicates?": "Éviter les doublons?",
"Duplicate Value Column": "Dupliquer la colonne de valeur",
"Header Row": "Ligne d'en-tête",
"Row Number": "Numéro de ligne",
"The name of the column to search in": "Le nom de la colonne dans laquelle rechercher",
"Search Value": "Valeur de la recherche",
"Exact match": "Correspondance exacte",
"Starting Row": "Ligne de départ",
"Number of Rows": "Nombre de lignes",
"Use header names for keys": "Utiliser les noms des en-têtes pour les clés",
"Title": "Titre de la feuille de calcul",
"Parent Folder": "Dossier parent",
"Headers": "En-têtes",
"Is First row Headers?": "La première ligne correspond-elle à des en-têtes ?",
"Start Row": "Lancer la ligne",
"Markdown": "Markdown",
"Memory Key": "Clé de mémoire",
"Group Size": "Nombre de lignes",
"Spreadsheet Name": "Nom de la feuille de calcul",
"Exact Match": "Correspondance exacte",
"Spreadsheet Containing the Worksheet to Copy": "Feuille de calcul contenant la feuille de travail à copier",
"Worksheet to Copy": "Feuille à copier",
"Spreadsheet to paste in": "Feuille de calcul dans laquelle coller",
"Column Name": "Nom de la colonne",
"Column Index": "Index des colonnes",
"Export Format": "Format d'exportation",
"Return as Text": "Retourner en tant que texte",
"Method": "Méthode",
"Query Parameters": "Paramètres de requête",
"Body": "Corps",
"Response is Binary ?": "La réponse est Binaire ?",
"No Error on Failure": "Aucune erreur en cas d'échec",
"Timeout (in seconds)": "Délai d'attente (en secondes)",
"Determines if sheets from Team Drives should be included in the results.": "Détermine si les feuilles de Team Drives doivent être incluses dans les résultats.",
"The ID of the spreadsheet to use.": "L'ID de la feuille de calcul à utiliser.",
"The ID of the sheet to use.": "L'ID de la feuille à utiliser.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Les valeurs insérées qui sont des dates et des formules seront entrées en tant que chaînes de caractères et ne seront pas interprétées",
"If the first row is headers": "Si la première ligne correspond à des en-têtes",
"The values to insert": "Les valeurs à insérer",
"Select the format of the input values to be inserted into the sheet.": "Sélectionner le format des valeurs d'entrée à insérer dans la feuille.",
"The values to insert.": "Les valeurs à insérer.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Activez cette option pour remplacer toutes les données existantes dans la feuille par de nouvelles données de votre entrée. Cela effacera toutes les lignes en dehors de la plage actualisée.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Activer cette option pour vérifier les valeurs en double avant d'insérer des données dans la feuille. Seules seront ajoutées des lignes uniques selon la colonne sélectionnée.",
"The column to check for duplicate values.": "La colonne à vérifier pour les valeurs en double.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Les valeurs insérées qui sont des dates et des formules seront entrées en tant que chaînes de caractères et ne seront pas interprétées",
"Which row contains the headers?": "Quelle ligne contient les en-têtes ?",
"The row number to remove": "Le numéro de ligne à supprimer",
"The row number to update": "Le numéro de ligne à mettre à jour",
"The value to search for in the specified column. If left empty, all rows will be returned.": "La valeur à rechercher dans la colonne spécifiée. Si laissé vide, toutes les lignes seront retournées.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Choisir les lignes avec une correspondance exacte ou choisir les lignes qui contiennent la valeur de recherche",
"The row number to start searching from": "Le numéro de ligne à partir duquel commencer la recherche",
"The number of rows to return ( the default is 1 if not specified )": "Le nombre de lignes à retourner (la valeur par défaut est 1 si non spécifié)",
"Map A/B/C… to the actual column headers (row specified above).": "Mappez A/B/C… aux en-têtes de colonnes réels (ligne spécifiée ci-dessus).",
"The title of the new spreadsheet.": "Le titre de la nouvelle feuille de calcul.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "Le dossier dans lequel créer la feuille de travail. Par défaut, la nouvelle feuille de travail est créée dans le dossier racine de Drive.",
"The title of the new worksheet.": "Le titre de la nouvelle feuille de travail.",
"The row number to get from the sheet": "Le numéro de ligne à récupérer de la feuille",
"Which row to start from?": "Commencer à partir de quelle ligne ?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Remarques : **\n\n- La clé de mémoire est utilisée pour se souvenir de la dernière ligne traitée et sera utilisée lors des exécutions suivantes.\n- Republier le flow **conserve** la valeur de la clé de mémoire. Si vous souhaitez recommencer, **changez** la clé de mémoire.\n",
"The key used to store the current row number in memory": "La clé utilisée pour stocker le numéro de ligne actuel en mémoire",
"The number of rows to get": "Le nombre de lignes à récupérer",
"The name of the spreadsheet(s) to find.": "Le nom de la feuille de calcul à trouver.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "Si vrai, retourne uniquement des feuilles de calcul qui correspondent exactement au nom. Si faux, retourne des feuilles de calcul qui contiennent le nom.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "Si vrai, retourne uniquement les feuilles de travail qui correspondent exactement au nom. Si faux, retourne les feuilles de travail qui contiennent le nom.",
"The values to update.": "Les valeurs à mettre à jour.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "L'index des colonnes commence à partir de 1. Par exemple, si vous voulez ajouter une colonne à la troisième colonne, entrez 3. Si l'entrée est inférieure à 1, la colonne sera ajoutée après la dernière colonne courante.",
"The format to export the sheet to.": "Le format vers lequel exporter la feuille.",
"Return the exported data as text instead of a file.": "Retourne les données exportées sous forme de texte au lieu d'un fichier.",
"Authorization headers are injected automatically from your connection.": "Les en-têtes d'autorisation sont injectés automatiquement à partir de votre connexion.",
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDF, les images, etc.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Noms des colonnes",
"Comma Separated Values (.csv)": "Valeurs séparées par des virgules (.csv)",
"Tab Separated Values (.tsv)": "Valeurs séparées par des tabulations (.tsv)",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Row Added": "Nouvelle ligne ajoutée",
"New or Updated Row": "Ligne nouvelle ou mise à jour",
"New Spreadsheet": "Nouvelle feuille de calcul",
"New Worksheet": "Nouvelle feuille de travail",
"Triggers when a new row is added to bottom of a spreadsheet.": "Se déclenche quand une nouvelle ligne est ajoutée en bas d'une feuille de calcul.",
"Triggers when a new row is added or modified in a spreadsheet.": "Se déclenche lorsqu'une nouvelle ligne est ajoutée ou modifiée dans une feuille de calcul.",
"Triggers when a new spreadsheet is created.": "Se déclenche quand une nouvelle feuille de calcul est créée.",
"Triggers when a worksheet is created in a spreadsheet.": "Se déclenche quand une feuille est créée dans une feuille de calcul.",
"Trigger Column": "Colonne de déclenchement",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Veuillez noter qu'il peut y avoir un délai de 3 minutes pour que le déclencheur soit activé en raison d'un délai de la part de Google.",
"Trigger on changes to cells in this column only. \nSelect **Any Column** if you want the flow to trigger on changes to any cell within the row.": "Déclencher sur les modifications aux cellules de cette colonne seulement. \nSélectionnez **N'importe quelle colonne** si vous voulez que le flux déclenche des changements sur n'importe quelle cellule de la ligne."
}

View File

@@ -0,0 +1,132 @@
{
"Google Sheets": "Google Sheets",
"Create, edit, and collaborate on spreadsheets online": "Create, edit, and collaborate on spreadsheets online",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insert Multiple Rows",
"Delete Row": "Delete Row",
"Update Row": "Update Row",
"Find Rows": "Find Rows",
"Create Spreadsheet": "Create Spreadsheet",
"Create Worksheet": "Create Worksheet",
"Clear Sheet": "Clear Sheet",
"Get Row": "Get Row",
"Get next row(s)": "Get next row(s)",
"Find Spreadsheet(s)": "Find Spreadsheet(s)",
"Find Worksheet(s)": "Find Worksheet(s)",
"Copy Worksheet": "Copy Worksheet",
"Update Multiple Rows": "Update Multiple Rows",
"Create Spreadsheet Column": "Create Spreadsheet Column",
"Export Sheet": "Export Sheet",
"Custom API Call": "Custom API Call",
"Append a row of values to an existing sheet": "Append a row of values to an existing sheet",
"Add one or more new rows in a specific spreadsheet.": "Add one or more new rows in a specific spreadsheet.",
"Delete a row on an existing sheet you have access to": "Delete a row on an existing sheet you have access to",
"Overwrite values in an existing row": "Overwrite values in an existing row",
"Find or get rows in a Google Sheet by column name and search value": "Find or get rows in a Google Sheet by column name and search value",
"Creates a blank spreadsheet.": "Creates a blank spreadsheet.",
"Create a blank worksheet with a title.": "Create a blank worksheet with a title.",
"Clears all rows on an existing sheet": "Clears all rows on an existing sheet",
"Get a row in a Google Sheet by row number": "Get a row in a Google Sheet by row number",
"Get next group of rows from a Google Sheet": "Get next group of rows from a Google Sheet",
"Find spreadsheet(s) by name.": "Find spreadsheet(s) by name.",
"Finds a worksheet(s) by title.": "Finds a worksheet(s) by title.",
"Creates a new worksheet by copying an existing one.": "Creates a new worksheet by copying an existing one.",
"Updates multiple rows in a specific spreadsheet.": "Updates multiple rows in a specific spreadsheet.",
"Adds a new column to a spreadsheet.": "Adds a new column to a spreadsheet.",
"Export a Google Sheets tab to CSV or TSV format.": "Export a Google Sheets tab to CSV or TSV format.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Include Team Drive Sheets ?": "Include Team Drive Sheets ?",
"Spreadsheet": "Spreadsheet",
"Sheet": "Sheet",
"As String": "As String",
"Does the first row contain headers?": "Does the first row contain headers?",
"Values": "Values",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Overwrite Existing Data?",
"Avoid Duplicates?": "Avoid Duplicates?",
"Duplicate Value Column": "Duplicate Value Column",
"Row Number": "Row Number",
"The name of the column to search in": "The name of the column to search in",
"Search Value": "Search Value",
"Exact match": "Exact match",
"Starting Row": "Starting Row",
"Number of Rows": "Number of Rows",
"Title": "Title",
"Parent Folder": "Parent Folder",
"Headers": "Headers",
"Is First row Headers?": "Is First row Headers?",
"Start Row": "Start Row",
"Markdown": "Markdown",
"Memory Key": "Memory Key",
"Group Size": "Group Size",
"Spreadsheet Name": "Spreadsheet Name",
"Exact Match": "Exact Match",
"Spreadsheet Containing the Worksheet to Copy": "Spreadsheet Containing the Worksheet to Copy",
"Worksheet to Copy": "Worksheet to Copy",
"Spreadsheet to paste in": "Spreadsheet to paste in",
"Column Name": "Column Name",
"Column Index": "Column Index",
"Export Format": "Export Format",
"Return as Text": "Return as Text",
"Method": "Method",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Determines if sheets from Team Drives should be included in the results.": "Determines if sheets from Team Drives should be included in the results.",
"The ID of the spreadsheet to use.": "The ID of the spreadsheet to use.",
"The ID of the sheet to use.": "The ID of the sheet to use.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Inserted values that are dates and formulas will be entered strings and have no effect",
"If the first row is headers": "If the first row is headers",
"The values to insert": "The values to insert",
"Select the format of the input values to be inserted into the sheet.": "Select the format of the input values to be inserted into the sheet.",
"The values to insert.": "The values to insert.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.",
"The column to check for duplicate values.": "The column to check for duplicate values.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Inserted values that are dates and formulas will be entered as strings and have no effect",
"The row number to remove": "The row number to remove",
"The row number to update": "The row number to update",
"The value to search for in the specified column. If left empty, all rows will be returned.": "The value to search for in the specified column. If left empty, all rows will be returned.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Whether to choose the rows with exact match or choose the rows that contain the search value",
"The row number to start searching from": "The row number to start searching from",
"The number of rows to return ( the default is 1 if not specified )": "The number of rows to return ( the default is 1 if not specified )",
"The title of the new spreadsheet.": "The title of the new spreadsheet.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.",
"The title of the new worksheet.": "The title of the new worksheet.",
"The row number to get from the sheet": "The row number to get from the sheet",
"Which row to start from?": "Which row to start from?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "The key used to store the current row number in memory",
"The number of rows to get": "The number of rows to get",
"The name of the spreadsheet(s) to find.": "The name of the spreadsheet(s) to find.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.",
"The values to update.": "The values to update.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.",
"The format to export the sheet to.": "The format to export the sheet to.",
"Return the exported data as text instead of a file.": "Return the exported data as text instead of a file.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Column Names",
"Comma Separated Values (.csv)": "Comma Separated Values (.csv)",
"Tab Separated Values (.tsv)": "Tab Separated Values (.tsv)",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Row Added": "New Row Added",
"New or Updated Row": "New or Updated Row",
"New Spreadsheet": "New Spreadsheet",
"New Worksheet": "New Worksheet",
"Triggers when a new row is added to bottom of a spreadsheet.": "Triggers when a new row is added to bottom of a spreadsheet.",
"Triggers when a new row is added or modified in a spreadsheet.": "Triggers when a new row is added or modified in a spreadsheet.",
"Triggers when a new spreadsheet is created.": "Triggers when a new spreadsheet is created.",
"Triggers when a worksheet is created in a spreadsheet.": "Triggers when a worksheet is created in a spreadsheet.",
"Trigger Column": "Trigger Column",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.",
"Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,124 @@
{
"Google Sheets": "Google Sheets",
"Create, edit, and collaborate on spreadsheets online": "Create, edit, and collaborate on spreadsheets online",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insert Multiple Rows",
"Delete Row": "Delete Row",
"Update Row": "Update Row",
"Find Rows": "Find Rows",
"Create Spreadsheet": "Create Spreadsheet",
"Create Worksheet": "Create Worksheet",
"Clear Sheet": "Clear Sheet",
"Get Row": "Get Row",
"Get next row(s)": "Get next row(s)",
"Find Spreadsheet(s)": "Find Spreadsheet(s)",
"Find Worksheet(s)": "Find Worksheet(s)",
"Copy Worksheet": "Copy Worksheet",
"Update Multiple Rows": "Update Multiple Rows",
"Create Spreadsheet Column": "Create Spreadsheet Column",
"Custom API Call": "Custom API Call",
"Append a row of values to an existing sheet": "Append a row of values to an existing sheet",
"Add one or more new rows in a specific spreadsheet.": "Add one or more new rows in a specific spreadsheet.",
"Delete a row on an existing sheet you have access to": "Delete a row on an existing sheet you have access to",
"Overwrite values in an existing row": "Overwrite values in an existing row",
"Find or get rows in a Google Sheet by column name and search value": "Find or get rows in a Google Sheet by column name and search value",
"Creates a blank spreadsheet.": "Creates a blank spreadsheet.",
"Create a blank worksheet with a title.": "Create a blank worksheet with a title.",
"Clears all rows on an existing sheet": "Clears all rows on an existing sheet",
"Get a row in a Google Sheet by row number": "Get a row in a Google Sheet by row number",
"Get next group of rows from a Google Sheet": "Get next group of rows from a Google Sheet",
"Find spreadsheet(s) by name.": "Find spreadsheet(s) by name.",
"Finds a worksheet(s) by title.": "Finds a worksheet(s) by title.",
"Creates a new worksheet by copying an existing one.": "Creates a new worksheet by copying an existing one.",
"Updates multiple rows in a specific spreadsheet.": "Updates multiple rows in a specific spreadsheet.",
"Adds a new column to a spreadsheet.": "Adds a new column to a spreadsheet.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Include Team Drive Sheets ?": "Include Team Drive Sheets ?",
"Spreadsheet": "Spreadsheet",
"Sheet": "Sheet",
"As String": "As String",
"Does the first row contain headers?": "Does the first row contain headers?",
"Values": "Values",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Overwrite Existing Data?",
"Avoid Duplicates?": "Avoid Duplicates?",
"Duplicate Value Column": "Duplicate Value Column",
"Row Number": "Row Number",
"The name of the column to search in": "The name of the column to search in",
"Search Value": "Search Value",
"Exact match": "Exact match",
"Starting Row": "Starting Row",
"Number of Rows": "Number of Rows",
"Title": "Title",
"Parent Folder": "Parent Folder",
"Headers": "Headers",
"Is First row Headers?": "Is First row Headers?",
"Start Row": "Start Row",
"Markdown": "Markdown",
"Memory Key": "Memory Key",
"Group Size": "Group Size",
"Spreadsheet Name": "Spreadsheet Name",
"Exact Match": "Exact Match",
"Spreadsheet Containing the Worksheet to Copy": "Spreadsheet Containing the Worksheet to Copy",
"Worksheet to Copy": "Worksheet to Copy",
"Spreadsheet to paste in": "Spreadsheet to paste in",
"Column Name": "Column Name",
"Column Index": "Column Index",
"Method": "Method",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Determines if sheets from Team Drives should be included in the results.": "Determines if sheets from Team Drives should be included in the results.",
"The ID of the spreadsheet to use.": "The ID of the spreadsheet to use.",
"The ID of the sheet to use.": "The ID of the sheet to use.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Inserted values that are dates and formulas will be entered strings and have no effect",
"If the first row is headers": "If the first row is headers",
"The values to insert": "The values to insert",
"Select the format of the input values to be inserted into the sheet.": "Select the format of the input values to be inserted into the sheet.",
"The values to insert.": "The values to insert.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.",
"The column to check for duplicate values.": "The column to check for duplicate values.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Inserted values that are dates and formulas will be entered as strings and have no effect",
"The row number to remove": "The row number to remove",
"The row number to update": "The row number to update",
"The value to search for in the specified column. If left empty, all rows will be returned.": "The value to search for in the specified column. If left empty, all rows will be returned.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Whether to choose the rows with exact match or choose the rows that contain the search value",
"The row number to start searching from": "The row number to start searching from",
"The number of rows to return ( the default is 1 if not specified )": "The number of rows to return ( the default is 1 if not specified )",
"The title of the new spreadsheet.": "The title of the new spreadsheet.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.",
"The title of the new worksheet.": "The title of the new worksheet.",
"The row number to get from the sheet": "The row number to get from the sheet",
"Which row to start from?": "Which row to start from?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "The key used to store the current row number in memory",
"The number of rows to get": "The number of rows to get",
"The name of the spreadsheet(s) to find.": "The name of the spreadsheet(s) to find.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.",
"The values to update.": "The values to update.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Column Names",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Row Added": "New Row Added",
"New or Updated Row": "New or Updated Row",
"New Spreadsheet": "New Spreadsheet",
"New Worksheet": "New Worksheet",
"Triggers when a new row is added to bottom of a spreadsheet.": "Triggers when a new row is added to bottom of a spreadsheet.",
"Triggers when a new row is added or modified in a spreadsheet.": "Triggers when a new row is added or modified in a spreadsheet.",
"Triggers when a new spreadsheet is created.": "Triggers when a new spreadsheet is created.",
"Triggers when a worksheet is created in a spreadsheet.": "Triggers when a worksheet is created in a spreadsheet.",
"Trigger Column": "Trigger Column",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.",
"Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,124 @@
{
"Google Sheets": "Google Sheets",
"Create, edit, and collaborate on spreadsheets online": "Create, edit, and collaborate on spreadsheets online",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insert Multiple Rows",
"Delete Row": "Delete Row",
"Update Row": "Update Row",
"Find Rows": "Find Rows",
"Create Spreadsheet": "Create Spreadsheet",
"Create Worksheet": "Create Worksheet",
"Clear Sheet": "Clear Sheet",
"Get Row": "Get Row",
"Get next row(s)": "Get next row(s)",
"Find Spreadsheet(s)": "Find Spreadsheet(s)",
"Find Worksheet(s)": "Find Worksheet(s)",
"Copy Worksheet": "Copy Worksheet",
"Update Multiple Rows": "Update Multiple Rows",
"Create Spreadsheet Column": "Create Spreadsheet Column",
"Custom API Call": "Custom API Call",
"Append a row of values to an existing sheet": "Append a row of values to an existing sheet",
"Add one or more new rows in a specific spreadsheet.": "Add one or more new rows in a specific spreadsheet.",
"Delete a row on an existing sheet you have access to": "Delete a row on an existing sheet you have access to",
"Overwrite values in an existing row": "Overwrite values in an existing row",
"Find or get rows in a Google Sheet by column name and search value": "Find or get rows in a Google Sheet by column name and search value",
"Creates a blank spreadsheet.": "Creates a blank spreadsheet.",
"Create a blank worksheet with a title.": "Create a blank worksheet with a title.",
"Clears all rows on an existing sheet": "Clears all rows on an existing sheet",
"Get a row in a Google Sheet by row number": "Get a row in a Google Sheet by row number",
"Get next group of rows from a Google Sheet": "Get next group of rows from a Google Sheet",
"Find spreadsheet(s) by name.": "Find spreadsheet(s) by name.",
"Finds a worksheet(s) by title.": "Finds a worksheet(s) by title.",
"Creates a new worksheet by copying an existing one.": "Creates a new worksheet by copying an existing one.",
"Updates multiple rows in a specific spreadsheet.": "Updates multiple rows in a specific spreadsheet.",
"Adds a new column to a spreadsheet.": "Adds a new column to a spreadsheet.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Include Team Drive Sheets ?": "Include Team Drive Sheets ?",
"Spreadsheet": "Spreadsheet",
"Sheet": "Sheet",
"As String": "As String",
"Does the first row contain headers?": "Does the first row contain headers?",
"Values": "Values",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Overwrite Existing Data?",
"Avoid Duplicates?": "Avoid Duplicates?",
"Duplicate Value Column": "Duplicate Value Column",
"Row Number": "Row Number",
"The name of the column to search in": "The name of the column to search in",
"Search Value": "Search Value",
"Exact match": "Exact match",
"Starting Row": "Starting Row",
"Number of Rows": "Number of Rows",
"Title": "Title",
"Parent Folder": "Parent Folder",
"Headers": "Headers",
"Is First row Headers?": "Is First row Headers?",
"Start Row": "Start Row",
"Markdown": "Markdown",
"Memory Key": "Memory Key",
"Group Size": "Group Size",
"Spreadsheet Name": "Spreadsheet Name",
"Exact Match": "Exact Match",
"Spreadsheet Containing the Worksheet to Copy": "Spreadsheet Containing the Worksheet to Copy",
"Worksheet to Copy": "Worksheet to Copy",
"Spreadsheet to paste in": "Spreadsheet to paste in",
"Column Name": "Column Name",
"Column Index": "Column Index",
"Method": "Method",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Determines if sheets from Team Drives should be included in the results.": "Determines if sheets from Team Drives should be included in the results.",
"The ID of the spreadsheet to use.": "The ID of the spreadsheet to use.",
"The ID of the sheet to use.": "The ID of the sheet to use.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Inserted values that are dates and formulas will be entered strings and have no effect",
"If the first row is headers": "If the first row is headers",
"The values to insert": "The values to insert",
"Select the format of the input values to be inserted into the sheet.": "Select the format of the input values to be inserted into the sheet.",
"The values to insert.": "The values to insert.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.",
"The column to check for duplicate values.": "The column to check for duplicate values.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Inserted values that are dates and formulas will be entered as strings and have no effect",
"The row number to remove": "The row number to remove",
"The row number to update": "The row number to update",
"The value to search for in the specified column. If left empty, all rows will be returned.": "The value to search for in the specified column. If left empty, all rows will be returned.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Whether to choose the rows with exact match or choose the rows that contain the search value",
"The row number to start searching from": "The row number to start searching from",
"The number of rows to return ( the default is 1 if not specified )": "The number of rows to return ( the default is 1 if not specified )",
"The title of the new spreadsheet.": "The title of the new spreadsheet.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.",
"The title of the new worksheet.": "The title of the new worksheet.",
"The row number to get from the sheet": "The row number to get from the sheet",
"Which row to start from?": "Which row to start from?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "The key used to store the current row number in memory",
"The number of rows to get": "The number of rows to get",
"The name of the spreadsheet(s) to find.": "The name of the spreadsheet(s) to find.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.",
"The values to update.": "The values to update.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Column Names",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Row Added": "New Row Added",
"New or Updated Row": "New or Updated Row",
"New Spreadsheet": "New Spreadsheet",
"New Worksheet": "New Worksheet",
"Triggers when a new row is added to bottom of a spreadsheet.": "Triggers when a new row is added to bottom of a spreadsheet.",
"Triggers when a new row is added or modified in a spreadsheet.": "Triggers when a new row is added or modified in a spreadsheet.",
"Triggers when a new spreadsheet is created.": "Triggers when a new spreadsheet is created.",
"Triggers when a worksheet is created in a spreadsheet.": "Triggers when a worksheet is created in a spreadsheet.",
"Trigger Column": "Trigger Column",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.",
"Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,132 @@
{
"Google Sheets": "Google Sheets",
"Create, edit, and collaborate on spreadsheets online": "Create, edit, and collaborate on spreadsheets online",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insert Multiple Rows",
"Delete Row": "Delete Row",
"Update Row": "Update Row",
"Find Rows": "Find Rows",
"Create Spreadsheet": "Create Spreadsheet",
"Create Worksheet": "Create Worksheet",
"Clear Sheet": "Clear Sheet",
"Get Row": "Get Row",
"Get next row(s)": "Get next row(s)",
"Find Spreadsheet(s)": "Find Spreadsheet(s)",
"Find Worksheet(s)": "Find Worksheet(s)",
"Copy Worksheet": "Copy Worksheet",
"Update Multiple Rows": "Update Multiple Rows",
"Create Spreadsheet Column": "Create Spreadsheet Column",
"Export Sheet": "Export Sheet",
"Custom API Call": "Custom API Call",
"Append a row of values to an existing sheet": "Append a row of values to an existing sheet",
"Add one or more new rows in a specific spreadsheet.": "Add one or more new rows in a specific spreadsheet.",
"Delete a row on an existing sheet you have access to": "Delete a row on an existing sheet you have access to",
"Overwrite values in an existing row": "Overwrite values in an existing row",
"Find or get rows in a Google Sheet by column name and search value": "Find or get rows in a Google Sheet by column name and search value",
"Creates a blank spreadsheet.": "Creates a blank spreadsheet.",
"Create a blank worksheet with a title.": "Create a blank worksheet with a title.",
"Clears all rows on an existing sheet": "Clears all rows on an existing sheet",
"Get a row in a Google Sheet by row number": "Get a row in a Google Sheet by row number",
"Get next group of rows from a Google Sheet": "Get next group of rows from a Google Sheet",
"Find spreadsheet(s) by name.": "Find spreadsheet(s) by name.",
"Finds a worksheet(s) by title.": "Finds a worksheet(s) by title.",
"Creates a new worksheet by copying an existing one.": "Creates a new worksheet by copying an existing one.",
"Updates multiple rows in a specific spreadsheet.": "Updates multiple rows in a specific spreadsheet.",
"Adds a new column to a spreadsheet.": "Adds a new column to a spreadsheet.",
"Export a Google Sheets tab to CSV or TSV format.": "Export a Google Sheets tab to CSV or TSV format.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Include Team Drive Sheets ?": "Include Team Drive Sheets ?",
"Spreadsheet": "Spreadsheet",
"Sheet": "Sheet",
"As String": "As String",
"Does the first row contain headers?": "Does the first row contain headers?",
"Values": "Values",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Overwrite Existing Data?",
"Avoid Duplicates?": "Avoid Duplicates?",
"Duplicate Value Column": "Duplicate Value Column",
"Row Number": "Row Number",
"The name of the column to search in": "The name of the column to search in",
"Search Value": "Search Value",
"Exact match": "Exact match",
"Starting Row": "Starting Row",
"Number of Rows": "Number of Rows",
"Title": "Title",
"Parent Folder": "Parent Folder",
"Headers": "Headers",
"Is First row Headers?": "Is First row Headers?",
"Start Row": "Start Row",
"Markdown": "Markdown",
"Memory Key": "Memory Key",
"Group Size": "Group Size",
"Spreadsheet Name": "Spreadsheet Name",
"Exact Match": "Exact Match",
"Spreadsheet Containing the Worksheet to Copy": "Spreadsheet Containing the Worksheet to Copy",
"Worksheet to Copy": "Worksheet to Copy",
"Spreadsheet to paste in": "Spreadsheet to paste in",
"Column Name": "Column Name",
"Column Index": "Column Index",
"Export Format": "Export Format",
"Return as Text": "Return as Text",
"Method": "Method",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Determines if sheets from Team Drives should be included in the results.": "Determines if sheets from Team Drives should be included in the results.",
"The ID of the spreadsheet to use.": "The ID of the spreadsheet to use.",
"The ID of the sheet to use.": "The ID of the sheet to use.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Inserted values that are dates and formulas will be entered strings and have no effect",
"If the first row is headers": "If the first row is headers",
"The values to insert": "The values to insert",
"Select the format of the input values to be inserted into the sheet.": "Select the format of the input values to be inserted into the sheet.",
"The values to insert.": "The values to insert.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.",
"The column to check for duplicate values.": "The column to check for duplicate values.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Inserted values that are dates and formulas will be entered as strings and have no effect",
"The row number to remove": "The row number to remove",
"The row number to update": "The row number to update",
"The value to search for in the specified column. If left empty, all rows will be returned.": "The value to search for in the specified column. If left empty, all rows will be returned.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Whether to choose the rows with exact match or choose the rows that contain the search value",
"The row number to start searching from": "The row number to start searching from",
"The number of rows to return ( the default is 1 if not specified )": "The number of rows to return ( the default is 1 if not specified )",
"The title of the new spreadsheet.": "The title of the new spreadsheet.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.",
"The title of the new worksheet.": "The title of the new worksheet.",
"The row number to get from the sheet": "The row number to get from the sheet",
"Which row to start from?": "Which row to start from?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "The key used to store the current row number in memory",
"The number of rows to get": "The number of rows to get",
"The name of the spreadsheet(s) to find.": "The name of the spreadsheet(s) to find.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.",
"The values to update.": "The values to update.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.",
"The format to export the sheet to.": "The format to export the sheet to.",
"Return the exported data as text instead of a file.": "Return the exported data as text instead of a file.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Column Names",
"Comma Separated Values (.csv)": "Comma Separated Values (.csv)",
"Tab Separated Values (.tsv)": "Tab Separated Values (.tsv)",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Row Added": "New Row Added",
"New or Updated Row": "New or Updated Row",
"New Spreadsheet": "New Spreadsheet",
"New Worksheet": "New Worksheet",
"Triggers when a new row is added to bottom of a spreadsheet.": "Triggers when a new row is added to bottom of a spreadsheet.",
"Triggers when a new row is added or modified in a spreadsheet.": "Triggers when a new row is added or modified in a spreadsheet.",
"Triggers when a new spreadsheet is created.": "Triggers when a new spreadsheet is created.",
"Triggers when a worksheet is created in a spreadsheet.": "Triggers when a worksheet is created in a spreadsheet.",
"Trigger Column": "Trigger Column",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.",
"Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,124 @@
{
"Google Sheets": "Google Sheets",
"Create, edit, and collaborate on spreadsheets online": "Create, edit, and collaborate on spreadsheets online",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insert Multiple Rows",
"Delete Row": "Delete Row",
"Update Row": "Update Row",
"Find Rows": "Find Rows",
"Create Spreadsheet": "Create Spreadsheet",
"Create Worksheet": "Create Worksheet",
"Clear Sheet": "Clear Sheet",
"Get Row": "Get Row",
"Get next row(s)": "Get next row(s)",
"Find Spreadsheet(s)": "Find Spreadsheet(s)",
"Find Worksheet(s)": "Find Worksheet(s)",
"Copy Worksheet": "Copy Worksheet",
"Update Multiple Rows": "Update Multiple Rows",
"Create Spreadsheet Column": "Create Spreadsheet Column",
"Custom API Call": "Custom API Call",
"Append a row of values to an existing sheet": "Append a row of values to an existing sheet",
"Add one or more new rows in a specific spreadsheet.": "Add one or more new rows in a specific spreadsheet.",
"Delete a row on an existing sheet you have access to": "Delete a row on an existing sheet you have access to",
"Overwrite values in an existing row": "Overwrite values in an existing row",
"Find or get rows in a Google Sheet by column name and search value": "Find or get rows in a Google Sheet by column name and search value",
"Creates a blank spreadsheet.": "Creates a blank spreadsheet.",
"Create a blank worksheet with a title.": "Create a blank worksheet with a title.",
"Clears all rows on an existing sheet": "Clears all rows on an existing sheet",
"Get a row in a Google Sheet by row number": "Get a row in a Google Sheet by row number",
"Get next group of rows from a Google Sheet": "Get next group of rows from a Google Sheet",
"Find spreadsheet(s) by name.": "Find spreadsheet(s) by name.",
"Finds a worksheet(s) by title.": "Finds a worksheet(s) by title.",
"Creates a new worksheet by copying an existing one.": "Creates a new worksheet by copying an existing one.",
"Updates multiple rows in a specific spreadsheet.": "Updates multiple rows in a specific spreadsheet.",
"Adds a new column to a spreadsheet.": "Adds a new column to a spreadsheet.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Include Team Drive Sheets ?": "Include Team Drive Sheets ?",
"Spreadsheet": "Spreadsheet",
"Sheet": "Sheet",
"As String": "As String",
"Does the first row contain headers?": "Does the first row contain headers?",
"Values": "Values",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Overwrite Existing Data?",
"Avoid Duplicates?": "Avoid Duplicates?",
"Duplicate Value Column": "Duplicate Value Column",
"Row Number": "Row Number",
"The name of the column to search in": "The name of the column to search in",
"Search Value": "Search Value",
"Exact match": "Exact match",
"Starting Row": "Starting Row",
"Number of Rows": "Number of Rows",
"Title": "Title",
"Parent Folder": "Parent Folder",
"Headers": "Headers",
"Is First row Headers?": "Is First row Headers?",
"Start Row": "Start Row",
"Markdown": "Markdown",
"Memory Key": "Memory Key",
"Group Size": "Group Size",
"Spreadsheet Name": "Spreadsheet Name",
"Exact Match": "Exact Match",
"Spreadsheet Containing the Worksheet to Copy": "Spreadsheet Containing the Worksheet to Copy",
"Worksheet to Copy": "Worksheet to Copy",
"Spreadsheet to paste in": "Spreadsheet to paste in",
"Column Name": "Column Name",
"Column Index": "Column Index",
"Method": "Method",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Determines if sheets from Team Drives should be included in the results.": "Determines if sheets from Team Drives should be included in the results.",
"The ID of the spreadsheet to use.": "The ID of the spreadsheet to use.",
"The ID of the sheet to use.": "The ID of the sheet to use.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Inserted values that are dates and formulas will be entered strings and have no effect",
"If the first row is headers": "If the first row is headers",
"The values to insert": "The values to insert",
"Select the format of the input values to be inserted into the sheet.": "Select the format of the input values to be inserted into the sheet.",
"The values to insert.": "The values to insert.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.",
"The column to check for duplicate values.": "The column to check for duplicate values.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Inserted values that are dates and formulas will be entered as strings and have no effect",
"The row number to remove": "The row number to remove",
"The row number to update": "The row number to update",
"The value to search for in the specified column. If left empty, all rows will be returned.": "The value to search for in the specified column. If left empty, all rows will be returned.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Whether to choose the rows with exact match or choose the rows that contain the search value",
"The row number to start searching from": "The row number to start searching from",
"The number of rows to return ( the default is 1 if not specified )": "The number of rows to return ( the default is 1 if not specified )",
"The title of the new spreadsheet.": "The title of the new spreadsheet.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.",
"The title of the new worksheet.": "The title of the new worksheet.",
"The row number to get from the sheet": "The row number to get from the sheet",
"Which row to start from?": "Which row to start from?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "The key used to store the current row number in memory",
"The number of rows to get": "The number of rows to get",
"The name of the spreadsheet(s) to find.": "The name of the spreadsheet(s) to find.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.",
"The values to update.": "The values to update.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Column Names",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Row Added": "New Row Added",
"New or Updated Row": "New or Updated Row",
"New Spreadsheet": "New Spreadsheet",
"New Worksheet": "New Worksheet",
"Triggers when a new row is added to bottom of a spreadsheet.": "Triggers when a new row is added to bottom of a spreadsheet.",
"Triggers when a new row is added or modified in a spreadsheet.": "Triggers when a new row is added or modified in a spreadsheet.",
"Triggers when a new spreadsheet is created.": "Triggers when a new spreadsheet is created.",
"Triggers when a worksheet is created in a spreadsheet.": "Triggers when a worksheet is created in a spreadsheet.",
"Trigger Column": "Trigger Column",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.",
"Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,137 @@
{
"Create, edit, and collaborate on spreadsheets online": "スプレッドシートをオンラインで作成、編集、共同編集します",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "複数の行を挿入",
"Delete Row": "行を削除",
"Update Row": "行を更新",
"Find Rows": "行を検索",
"Create Spreadsheet": "スプレッドシートを作成",
"Create Worksheet": "ワークシートを作成",
"Clear Sheet": "シートをクリア",
"Get Row": "行を取得",
"Get next row(s)": "次の行を取得",
"Find Spreadsheet(s)": "スプレッドシートを検索",
"Find Worksheet(s)": "ワークシートを検索",
"Copy Worksheet": "ワークシートをコピー",
"Update Multiple Rows": "複数の行を更新",
"Create Spreadsheet Column": "表計算ドキュメント列を作成",
"Export Sheet": "シートのエクスポート",
"Custom API Call": "カスタムAPI通話",
"Append a row of values to an existing sheet": "既存のシートに値の行を追加",
"Add one or more new rows in a specific spreadsheet.": "特定のスプレッドシートに1つ以上の新しい行を追加します。",
"Delete a row on an existing sheet you have access to": "アクセスできる既存のシートの行を削除する",
"Overwrite values in an existing row": "既存の行の値を上書き",
"Find or get rows in a Google Sheet by column name and search value": "Google シート内の行を列名と検索値で検索または取得",
"Creates a blank spreadsheet.": "空白のスプレッドシートを作成します。",
"Create a blank worksheet with a title.": "タイトルの空白のワークシートを作成します。",
"Clears all rows on an existing sheet": "既存のシートのすべての行を消去します",
"Get a row in a Google Sheet by row number": "行番号でGoogleシートの行を取得する",
"Get next group of rows from a Google Sheet": "Google シートから次の行のグループを取得する",
"Find spreadsheet(s) by name.": "名前で表計算ドキュメントを検索します。",
"Finds a worksheet(s) by title.": "タイトルでワークシートを検索します。",
"Creates a new worksheet by copying an existing one.": "既存のワークシートをコピーして新しいワークシートを作成します。",
"Updates multiple rows in a specific spreadsheet.": "特定の表計算ドキュメント内の複数行を更新します。",
"Adds a new column to a spreadsheet.": "スプレッドシートに新しい列を追加します。",
"Export a Google Sheets tab to CSV or TSV format.": "Google スプレッドシートタブをCSVまたはTSV形式にエクスポートします。",
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
"Include Team Drive Sheets ?": "チームドライブシートを含めますか?",
"Spreadsheet": "表計算ドキュメント",
"Sheet": "シート",
"As String": "文字列として",
"Does the first row contain headers?": "最初の行にはヘッダーが含まれていますか?",
"Values": "値",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "既存のデータを上書きしますか?",
"Avoid Duplicates?": "重複を避けますか?",
"Duplicate Value Column": "重複した値の列",
"Header Row": "ヘッダー行",
"Row Number": "行番号",
"The name of the column to search in": "検索する列の名前",
"Search Value": "検索値",
"Exact match": "完全一致",
"Starting Row": "開始行",
"Number of Rows": "行数",
"Use header names for keys": "キーにヘッダー名を使用",
"Title": "タイトル",
"Parent Folder": "親フォルダ",
"Headers": "ヘッダー",
"Is First row Headers?": "最初の行のヘッダーはありますか?",
"Start Row": "行を開始する",
"Markdown": "Markdown",
"Memory Key": "メモリーキー",
"Group Size": "グループサイズ",
"Spreadsheet Name": "スプレッドシート名",
"Exact Match": "完全一致",
"Spreadsheet Containing the Worksheet to Copy": "コピーするワークシートを含むスプレッドシート",
"Worksheet to Copy": "コピーするワークシート",
"Spreadsheet to paste in": "スプレッドシートを貼り付け",
"Column Name": "列名",
"Column Index": "列のインデックス",
"Export Format": "エクスポート形式",
"Return as Text": "テキストとして戻る",
"Method": "方法",
"Query Parameters": "クエリパラメータ",
"Body": "本文",
"Response is Binary ?": "応答はバイナリですか?",
"No Error on Failure": "失敗時にエラーはありません",
"Timeout (in seconds)": "タイムアウト(秒)",
"Determines if sheets from Team Drives should be included in the results.": "Team Drives のシートを結果に含めるかどうかを指定します。",
"The ID of the spreadsheet to use.": "使用するスプレッドシートのID。",
"The ID of the sheet to use.": "使用するシートのID。",
"Inserted values that are dates and formulas will be entered strings and have no effect": "日付と数式に挿入された値は文字列として入力され、効果はありません",
"If the first row is headers": "最初の行がヘッダーの場合",
"The values to insert": "挿入する値",
"Select the format of the input values to be inserted into the sheet.": "シートに挿入する入力値の書式を選択します。",
"The values to insert.": "挿入する値",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "このオプションを有効にすると、シート内のすべての既存のデータを入力から新しいデータに置き換えることができます。 これにより、更新範囲を超える追加の行がクリアされます。",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "このオプションを有効にすると、データをシートに挿入する前に重複する値をチェックできます。選択した列に基づいて一意の行のみが追加されます。",
"The column to check for duplicate values.": "重複値をチェックする列。",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "日付と数式に挿入された値は文字列として入力され、効果はありません",
"Which row contains the headers?": "どの行にヘッダーが含まれていますか?",
"The row number to remove": "削除する行番号",
"The row number to update": "更新する行番号",
"The value to search for in the specified column. If left empty, all rows will be returned.": "指定された列の検索値。空のままにすると、すべての行が返されます。",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "完全に一致する行を選択するか、検索値を含む行を選択します。",
"The row number to start searching from": "検索を開始する行番号",
"The number of rows to return ( the default is 1 if not specified )": "返す行数指定されていない場合はデフォルトは1",
"Map A/B/C… to the actual column headers (row specified above).": "A/B/C… を実際の列のヘッダ(上で指定した行)にマップします。",
"The title of the new spreadsheet.": "新しい表計算ドキュメントのタイトル",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "ワークシートを作成するフォルダデフォルトでは、新しいワークシートはドライブのルートフォルダに作成されます。",
"The title of the new worksheet.": "新しいワークシートのタイトル",
"The row number to get from the sheet": "シートから取得する行番号",
"Which row to start from?": "どの行から始めますか?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "現在の行番号をメモリに保存するために使用されるキー",
"The number of rows to get": "取得する行数",
"The name of the spreadsheet(s) to find.": "検索する表計算ドキュメントの名前",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "true の場合、名前に完全に一致するスプレッドシートのみが返されます。false の場合、名前を含むスプレッドシートを返します。",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "true の場合、名前に完全に一致するワークシートのみを返します。false の場合は、名前を含むワークシートを返します。",
"The values to update.": "更新する値",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "列のインデックスは1から始まります。たとえば、3番目の列に列を追加する場合は、3と入力します。 fの入力は1より小さい場合、列は現在の列の後に追加されます。",
"The format to export the sheet to.": "シートをエクスポートする書式。",
"Return the exported data as text instead of a file.": "エクスポートされたデータをファイルの代わりにテキストとして返します。",
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "列名",
"Comma Separated Values (.csv)": "カンマ区切り値 (.csv)",
"Tab Separated Values (.tsv)": "format@@0 タブ (.tsv)",
"GET": "取得",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "削除",
"HEAD": "頭",
"New Row Added": "新しい行を追加しました",
"New or Updated Row": "新規または更新行",
"New Spreadsheet": "新規表計算ドキュメント",
"New Worksheet": "新しいワークシート",
"Triggers when a new row is added to bottom of a spreadsheet.": "スプレッドシートの下部に新しい行が追加されたときにトリガーされます。",
"Triggers when a new row is added or modified in a spreadsheet.": "スプレッドシートに新しい行が追加または変更されたときにトリガーされます。",
"Triggers when a new spreadsheet is created.": "新しいスプレッドシートが作成されたときにトリガーします。",
"Triggers when a worksheet is created in a spreadsheet.": "ワークシートがスプレッドシートに作成されたときにトリガーされます。",
"Trigger Column": "トリガー列",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Googleからの遅延により、トリガーが発生するまでに最大3分間の遅延が発生する場合がありますのでご注意ください。",
"Trigger on changes to cells in this column only. \nSelect **Any Column** if you want the flow to trigger on changes to any cell within the row.": "この列のセルの変更のみをトリガーします。 \n行内の任意のセルへの変更をトリガーするフローを使用する場合は、**任意の列** を選択します。"
}

View File

@@ -0,0 +1,124 @@
{
"Google Sheets": "Google Sheets",
"Create, edit, and collaborate on spreadsheets online": "Create, edit, and collaborate on spreadsheets online",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insert Multiple Rows",
"Delete Row": "Delete Row",
"Update Row": "Update Row",
"Find Rows": "Find Rows",
"Create Spreadsheet": "Create Spreadsheet",
"Create Worksheet": "Create Worksheet",
"Clear Sheet": "Clear Sheet",
"Get Row": "Get Row",
"Get next row(s)": "Get next row(s)",
"Find Spreadsheet(s)": "Find Spreadsheet(s)",
"Find Worksheet(s)": "Find Worksheet(s)",
"Copy Worksheet": "Copy Worksheet",
"Update Multiple Rows": "Update Multiple Rows",
"Create Spreadsheet Column": "Create Spreadsheet Column",
"Custom API Call": "Custom API Call",
"Append a row of values to an existing sheet": "Append a row of values to an existing sheet",
"Add one or more new rows in a specific spreadsheet.": "Add one or more new rows in a specific spreadsheet.",
"Delete a row on an existing sheet you have access to": "Delete a row on an existing sheet you have access to",
"Overwrite values in an existing row": "Overwrite values in an existing row",
"Find or get rows in a Google Sheet by column name and search value": "Find or get rows in a Google Sheet by column name and search value",
"Creates a blank spreadsheet.": "Creates a blank spreadsheet.",
"Create a blank worksheet with a title.": "Create a blank worksheet with a title.",
"Clears all rows on an existing sheet": "Clears all rows on an existing sheet",
"Get a row in a Google Sheet by row number": "Get a row in a Google Sheet by row number",
"Get next group of rows from a Google Sheet": "Get next group of rows from a Google Sheet",
"Find spreadsheet(s) by name.": "Find spreadsheet(s) by name.",
"Finds a worksheet(s) by title.": "Finds a worksheet(s) by title.",
"Creates a new worksheet by copying an existing one.": "Creates a new worksheet by copying an existing one.",
"Updates multiple rows in a specific spreadsheet.": "Updates multiple rows in a specific spreadsheet.",
"Adds a new column to a spreadsheet.": "Adds a new column to a spreadsheet.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Include Team Drive Sheets ?": "Include Team Drive Sheets ?",
"Spreadsheet": "Spreadsheet",
"Sheet": "Sheet",
"As String": "As String",
"Does the first row contain headers?": "Does the first row contain headers?",
"Values": "Values",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Overwrite Existing Data?",
"Avoid Duplicates?": "Avoid Duplicates?",
"Duplicate Value Column": "Duplicate Value Column",
"Row Number": "Row Number",
"The name of the column to search in": "The name of the column to search in",
"Search Value": "Search Value",
"Exact match": "Exact match",
"Starting Row": "Starting Row",
"Number of Rows": "Number of Rows",
"Title": "Title",
"Parent Folder": "Parent Folder",
"Headers": "Headers",
"Is First row Headers?": "Is First row Headers?",
"Start Row": "Start Row",
"Markdown": "Markdown",
"Memory Key": "Memory Key",
"Group Size": "Group Size",
"Spreadsheet Name": "Spreadsheet Name",
"Exact Match": "Exact Match",
"Spreadsheet Containing the Worksheet to Copy": "Spreadsheet Containing the Worksheet to Copy",
"Worksheet to Copy": "Worksheet to Copy",
"Spreadsheet to paste in": "Spreadsheet to paste in",
"Column Name": "Column Name",
"Column Index": "Column Index",
"Method": "Method",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Determines if sheets from Team Drives should be included in the results.": "Determines if sheets from Team Drives should be included in the results.",
"The ID of the spreadsheet to use.": "The ID of the spreadsheet to use.",
"The ID of the sheet to use.": "The ID of the sheet to use.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Inserted values that are dates and formulas will be entered strings and have no effect",
"If the first row is headers": "If the first row is headers",
"The values to insert": "The values to insert",
"Select the format of the input values to be inserted into the sheet.": "Select the format of the input values to be inserted into the sheet.",
"The values to insert.": "The values to insert.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.",
"The column to check for duplicate values.": "The column to check for duplicate values.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Inserted values that are dates and formulas will be entered as strings and have no effect",
"The row number to remove": "The row number to remove",
"The row number to update": "The row number to update",
"The value to search for in the specified column. If left empty, all rows will be returned.": "The value to search for in the specified column. If left empty, all rows will be returned.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Whether to choose the rows with exact match or choose the rows that contain the search value",
"The row number to start searching from": "The row number to start searching from",
"The number of rows to return ( the default is 1 if not specified )": "The number of rows to return ( the default is 1 if not specified )",
"The title of the new spreadsheet.": "The title of the new spreadsheet.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.",
"The title of the new worksheet.": "The title of the new worksheet.",
"The row number to get from the sheet": "The row number to get from the sheet",
"Which row to start from?": "Which row to start from?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "The key used to store the current row number in memory",
"The number of rows to get": "The number of rows to get",
"The name of the spreadsheet(s) to find.": "The name of the spreadsheet(s) to find.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.",
"The values to update.": "The values to update.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Column Names",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Row Added": "New Row Added",
"New or Updated Row": "New or Updated Row",
"New Spreadsheet": "New Spreadsheet",
"New Worksheet": "New Worksheet",
"Triggers when a new row is added to bottom of a spreadsheet.": "Triggers when a new row is added to bottom of a spreadsheet.",
"Triggers when a new row is added or modified in a spreadsheet.": "Triggers when a new row is added or modified in a spreadsheet.",
"Triggers when a new spreadsheet is created.": "Triggers when a new spreadsheet is created.",
"Triggers when a worksheet is created in a spreadsheet.": "Triggers when a worksheet is created in a spreadsheet.",
"Trigger Column": "Trigger Column",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.",
"Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,137 @@
{
"Create, edit, and collaborate on spreadsheets online": "Creëer, bewerk en werk online samen op spreadsheets",
"Insert Row": "Rijen invoegen",
"Insert Multiple Rows": "Meerdere rijen invoegen",
"Delete Row": "Verwijder rij",
"Update Row": "Rij bijwerken",
"Find Rows": "Vind rijen",
"Create Spreadsheet": "Spreadsheet aanmaken",
"Create Worksheet": "Werkblad aanmaken",
"Clear Sheet": "Maak Sheet leeg",
"Get Row": "Verkrijg rij",
"Get next row(s)": "Krijg volgende rij(en)",
"Find Spreadsheet(s)": "Vind spreadsheet(s)",
"Find Worksheet(s)": "Werkblad (s) vinden",
"Copy Worksheet": "Kopieer werkblad",
"Update Multiple Rows": "Meerdere rijen bijwerken",
"Create Spreadsheet Column": "Spreadsheet kolom maken",
"Export Sheet": "Blad exporteren",
"Custom API Call": "Custom API Call",
"Append a row of values to an existing sheet": "Voeg een rij van waarden toe aan een bestaand blad",
"Add one or more new rows in a specific spreadsheet.": "Voeg een of meer nieuwe rijen toe op een specifiek spreadsheet.",
"Delete a row on an existing sheet you have access to": "Rij verwijderen op een bestaand blad waar u toegang tot heeft",
"Overwrite values in an existing row": "Overschrijf waarden in een bestaande rij",
"Find or get rows in a Google Sheet by column name and search value": "Zoek of haal rijen in een Google Sheet op kolomnaam en zoekwaarde",
"Creates a blank spreadsheet.": "Maakt een leeg werkblad aan.",
"Create a blank worksheet with a title.": "Maak een leeg werkblad met een titel.",
"Clears all rows on an existing sheet": "Wist alle rijen op een bestaand blad",
"Get a row in a Google Sheet by row number": "Krijg een rij achter elkaar in een Google Sheet per rij nummer",
"Get next group of rows from a Google Sheet": "Verkrijg volgende groep rijen van een Google Sheet",
"Find spreadsheet(s) by name.": "Vind spreadsheet(s) op naam.",
"Finds a worksheet(s) by title.": "Vindt een werkblad op titel.",
"Creates a new worksheet by copying an existing one.": "Maakt een nieuwe werkblad door een bestaande te kopiëren.",
"Updates multiple rows in a specific spreadsheet.": "Werkt meerdere rijen in een specifieke werkblad bij.",
"Adds a new column to a spreadsheet.": "Voegt een nieuwe kolom aan een spreadsheet toe.",
"Export a Google Sheets tab to CSV or TSV format.": "Een Google Sheets tabblad exporteren naar CSV of TSV formaat.",
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
"Include Team Drive Sheets ?": "Team Drive Sheets doorzoeken?",
"Spreadsheet": "Spreadsheet",
"Sheet": "Sheet",
"As String": "Als String",
"Does the first row contain headers?": "Bevat de eerste rij headers?",
"Values": "Waarden",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Bestaande gegevens overschrijven?",
"Avoid Duplicates?": "Duplicaten vermijden?",
"Duplicate Value Column": "Dupliceer waarde kolom",
"Header Row": "Kopregel rij",
"Row Number": "Rij nummer",
"The name of the column to search in": "De naam van de kolom om in te zoeken",
"Search Value": "Waarde zoeken",
"Exact match": "Exacte overeenkomst",
"Starting Row": "Start rij",
"Number of Rows": "Aantal rijen",
"Use header names for keys": "Gebruik kopnamen voor sleutels",
"Title": "Aanspreektitel",
"Parent Folder": "Bovenliggende map",
"Headers": "Kopteksten",
"Is First row Headers?": "Is de eerste rij headers?",
"Start Row": "Start rij",
"Markdown": "Markdown",
"Memory Key": "Geheugen Sleutel",
"Group Size": "Groepsgrootte",
"Spreadsheet Name": "Naam spreadsheet",
"Exact Match": "Exacte overeenkomst",
"Spreadsheet Containing the Worksheet to Copy": "Spreadsheet bevat het werkblad te kopiëren",
"Worksheet to Copy": "Werkblad om te kopiëren",
"Spreadsheet to paste in": "Spreadsheet om in te plakken",
"Column Name": "Naam kolom",
"Column Index": "Kolom Index",
"Export Format": "Export formaat",
"Return as Text": "Retourneren als tekst",
"Method": "Methode",
"Query Parameters": "Query parameters",
"Body": "Lichaam",
"Response is Binary ?": "Antwoord is binair?",
"No Error on Failure": "Geen fout bij fout",
"Timeout (in seconds)": "Time-out (in seconden)",
"Determines if sheets from Team Drives should be included in the results.": "Bepaalt of sheets van Team Drives moeten worden opgenomen in de resultaten.",
"The ID of the spreadsheet to use.": "Het ID van het te gebruiken spreadsheet",
"The ID of the sheet to use.": "De ID van het te gebruiken plaatsel.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Ingevulde waarden die datums en formules zijn, worden tekenreeksen ingevoerd en hebben geen effect",
"If the first row is headers": "Als de eerste rij headers zijn",
"The values to insert": "De waarden om in te voegen",
"Select the format of the input values to be inserted into the sheet.": "Selecteer het formaat van de invoerwaarden die moeten worden ingevoegd in het vel.",
"The values to insert.": "De waarden om in te voegen.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Schakel deze optie in om alle bestaande gegevens in het blad te vervangen door nieuwe gegevens van uw invoer. Dit zal alle extra rijen buiten het bijgewerkte bereik verwijderen.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Schakel deze optie in om te controleren op dubbele waarden voor het invoegen van gegevens in het vel. Alleen unieke rijen worden toegevoegd op basis van de geselecteerde kolom.",
"The column to check for duplicate values.": "De kolom te controleren op dubbele waarden.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Ingevulde waarden die data en formules zijn zullen als tekenreeksen worden ingevoerd en geen effect hebben",
"Which row contains the headers?": "Welke rij bevat de headers?",
"The row number to remove": "Het te verwijderen rijnummer",
"The row number to update": "Het rij nummer om te updaten",
"The value to search for in the specified column. If left empty, all rows will be returned.": "De waarde waarnaar gezocht moet worden in de opgegeven kolom. Indien leeg gelaten, worden alle rijen geretourneerd.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Kies of de rijen met exacte overeenkomsten of kies de rijen die de zoekwaarde bevatten",
"The row number to start searching from": "Het rijnummer om te beginnen met zoeken van",
"The number of rows to return ( the default is 1 if not specified )": "Het aantal rijen om terug te keren (standaard is 1 indien niet opgegeven)",
"Map A/B/C… to the actual column headers (row specified above).": "Kaart A/B/C… naar de werkelijke kolom headers (rij gespecificeerd hierboven).",
"The title of the new spreadsheet.": "De titel van het nieuwe werkblad.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "De map om het werkblad in te maken. Standaard wordt het nieuwe werkblad aangemaakt in de hoofdmap van de schijf.",
"The title of the new worksheet.": "De titel van het nieuwe werkblad.",
"The row number to get from the sheet": "Het rijnummer om van de plaat te krijgen",
"Which row to start from?": "Van welke rij moet beginnen?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Geheugen sleutel wordt gebruikt om te onthouden waar de laatste rij is verwerkt en zal gebruikt worden in de volgende uitvoeringen.\n- Het kopiëren van de flow **keeps** de geheugensleutelwaarde, als u wilt beginnen met het veranderen van de geheugensleutel.\n",
"The key used to store the current row number in memory": "De sleutel die gebruikt wordt om het huidige rijnummer op te slaan in het geheugen",
"The number of rows to get": "Het aantal rijen om te krijgen",
"The name of the spreadsheet(s) to find.": "De naam van de spreadsheet(s) om te vinden.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "Als het waar is, geven alleen spreadsheets terug die precies overeenkomen met de naam. Indien niet waar, geef spreadsheets die de naam bevatten.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "Indien waar, alleen werkbladen retourneren die precies overeenkomen met de naam. Indien niet waar, stuur werkbladen dan terug die de naam bevatten.",
"The values to update.": "De waarden om bij te werken.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "De kolomindex begint vanaf 1.Bijvoorbeeld, als u een kolom wilt toevoegen aan de derde kolom, voer 3 in. f de invoer minder dan 1 is de kolom wordt toegevoegd na de laatste kolom.",
"The format to export the sheet to.": "Het formaat om het blad naar te exporteren.",
"Return the exported data as text instead of a file.": "Geeft de geëxporteerde data als tekst in plaats van een bestand.",
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
"CSV": "csv",
"JSON": "JSON",
"Column Names": "Namen van kolommen",
"Comma Separated Values (.csv)": "Komma gescheiden waarden (.csv)",
"Tab Separated Values (.tsv)": "Tab gescheiden waarden (.tsv)",
"GET": "KRIJG",
"POST": "POSTE",
"PATCH": "BEKIJK",
"PUT": "PUT",
"DELETE": "VERWIJDEREN",
"HEAD": "HOOFD",
"New Row Added": "Nieuwe rij toegevoegd",
"New or Updated Row": "Nieuwe of bijgewerkte rij",
"New Spreadsheet": "Nieuw spreadsheet",
"New Worksheet": "Nieuw werkblad",
"Triggers when a new row is added to bottom of a spreadsheet.": "Wordt uitgevoerd wanneer een nieuwe rij onderaan het werkblad wordt toegevoegd.",
"Triggers when a new row is added or modified in a spreadsheet.": "Wordt uitgevoerd wanneer een nieuwe rij wordt toegevoegd of gewijzigd in een werkblad.",
"Triggers when a new spreadsheet is created.": "Triggert wanneer een nieuw werkblad wordt aangemaakt.",
"Triggers when a worksheet is created in a spreadsheet.": "Triggert wanneer een werkblad wordt aangemaakt in een werkblad.",
"Trigger Column": "Trigger kolom",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Houd er rekening mee dat er mogelijk een vertraging van maximaal 3 minuten is voordat de trigger wordt afgevuurd, als gevolg van een vertraging van Google.",
"Trigger on changes to cells in this column only. \nSelect **Any Column** if you want the flow to trigger on changes to any cell within the row.": "Trigger op wijzigingen in cellen alleen in deze kolom. \nSelecteer **Alle kolom** als u wilt dat de stroom de wijzigingen aan een cel in de rij uitvoert."
}

View File

@@ -0,0 +1,124 @@
{
"Google Sheets": "Google Sheets",
"Create, edit, and collaborate on spreadsheets online": "Create, edit, and collaborate on spreadsheets online",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insert Multiple Rows",
"Delete Row": "Delete Row",
"Update Row": "Update Row",
"Find Rows": "Find Rows",
"Create Spreadsheet": "Create Spreadsheet",
"Create Worksheet": "Create Worksheet",
"Clear Sheet": "Clear Sheet",
"Get Row": "Get Row",
"Get next row(s)": "Get next row(s)",
"Find Spreadsheet(s)": "Find Spreadsheet(s)",
"Find Worksheet(s)": "Find Worksheet(s)",
"Copy Worksheet": "Copy Worksheet",
"Update Multiple Rows": "Update Multiple Rows",
"Create Spreadsheet Column": "Create Spreadsheet Column",
"Custom API Call": "Custom API Call",
"Append a row of values to an existing sheet": "Append a row of values to an existing sheet",
"Add one or more new rows in a specific spreadsheet.": "Add one or more new rows in a specific spreadsheet.",
"Delete a row on an existing sheet you have access to": "Delete a row on an existing sheet you have access to",
"Overwrite values in an existing row": "Overwrite values in an existing row",
"Find or get rows in a Google Sheet by column name and search value": "Find or get rows in a Google Sheet by column name and search value",
"Creates a blank spreadsheet.": "Creates a blank spreadsheet.",
"Create a blank worksheet with a title.": "Create a blank worksheet with a title.",
"Clears all rows on an existing sheet": "Clears all rows on an existing sheet",
"Get a row in a Google Sheet by row number": "Get a row in a Google Sheet by row number",
"Get next group of rows from a Google Sheet": "Get next group of rows from a Google Sheet",
"Find spreadsheet(s) by name.": "Find spreadsheet(s) by name.",
"Finds a worksheet(s) by title.": "Finds a worksheet(s) by title.",
"Creates a new worksheet by copying an existing one.": "Creates a new worksheet by copying an existing one.",
"Updates multiple rows in a specific spreadsheet.": "Updates multiple rows in a specific spreadsheet.",
"Adds a new column to a spreadsheet.": "Adds a new column to a spreadsheet.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Include Team Drive Sheets ?": "Include Team Drive Sheets ?",
"Spreadsheet": "Spreadsheet",
"Sheet": "Sheet",
"As String": "As String",
"Does the first row contain headers?": "Does the first row contain headers?",
"Values": "Values",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Overwrite Existing Data?",
"Avoid Duplicates?": "Avoid Duplicates?",
"Duplicate Value Column": "Duplicate Value Column",
"Row Number": "Row Number",
"The name of the column to search in": "The name of the column to search in",
"Search Value": "Search Value",
"Exact match": "Exact match",
"Starting Row": "Starting Row",
"Number of Rows": "Number of Rows",
"Title": "Title",
"Parent Folder": "Parent Folder",
"Headers": "Headers",
"Is First row Headers?": "Is First row Headers?",
"Start Row": "Start Row",
"Markdown": "Markdown",
"Memory Key": "Memory Key",
"Group Size": "Group Size",
"Spreadsheet Name": "Spreadsheet Name",
"Exact Match": "Exact Match",
"Spreadsheet Containing the Worksheet to Copy": "Spreadsheet Containing the Worksheet to Copy",
"Worksheet to Copy": "Worksheet to Copy",
"Spreadsheet to paste in": "Spreadsheet to paste in",
"Column Name": "Column Name",
"Column Index": "Column Index",
"Method": "Method",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Determines if sheets from Team Drives should be included in the results.": "Determines if sheets from Team Drives should be included in the results.",
"The ID of the spreadsheet to use.": "The ID of the spreadsheet to use.",
"The ID of the sheet to use.": "The ID of the sheet to use.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Inserted values that are dates and formulas will be entered strings and have no effect",
"If the first row is headers": "If the first row is headers",
"The values to insert": "The values to insert",
"Select the format of the input values to be inserted into the sheet.": "Select the format of the input values to be inserted into the sheet.",
"The values to insert.": "The values to insert.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.",
"The column to check for duplicate values.": "The column to check for duplicate values.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Inserted values that are dates and formulas will be entered as strings and have no effect",
"The row number to remove": "The row number to remove",
"The row number to update": "The row number to update",
"The value to search for in the specified column. If left empty, all rows will be returned.": "The value to search for in the specified column. If left empty, all rows will be returned.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Whether to choose the rows with exact match or choose the rows that contain the search value",
"The row number to start searching from": "The row number to start searching from",
"The number of rows to return ( the default is 1 if not specified )": "The number of rows to return ( the default is 1 if not specified )",
"The title of the new spreadsheet.": "The title of the new spreadsheet.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.",
"The title of the new worksheet.": "The title of the new worksheet.",
"The row number to get from the sheet": "The row number to get from the sheet",
"Which row to start from?": "Which row to start from?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "The key used to store the current row number in memory",
"The number of rows to get": "The number of rows to get",
"The name of the spreadsheet(s) to find.": "The name of the spreadsheet(s) to find.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.",
"The values to update.": "The values to update.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Column Names",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Row Added": "New Row Added",
"New or Updated Row": "New or Updated Row",
"New Spreadsheet": "New Spreadsheet",
"New Worksheet": "New Worksheet",
"Triggers when a new row is added to bottom of a spreadsheet.": "Triggers when a new row is added to bottom of a spreadsheet.",
"Triggers when a new row is added or modified in a spreadsheet.": "Triggers when a new row is added or modified in a spreadsheet.",
"Triggers when a new spreadsheet is created.": "Triggers when a new spreadsheet is created.",
"Triggers when a worksheet is created in a spreadsheet.": "Triggers when a worksheet is created in a spreadsheet.",
"Trigger Column": "Trigger Column",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.",
"Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,137 @@
{
"Create, edit, and collaborate on spreadsheets online": "Criar, editar e colaborar em planilhas online",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Inserir Linhas Múltiplas",
"Delete Row": "Excluir linha",
"Update Row": "Atualizar linha",
"Find Rows": "Encontrar linhas",
"Create Spreadsheet": "Criar Planilha",
"Create Worksheet": "Criar planilha",
"Clear Sheet": "Limpar Chapa",
"Get Row": "Obter Linha",
"Get next row(s)": "Obter próxima linha(s)",
"Find Spreadsheet(s)": "Localizar Planilha",
"Find Worksheet(s)": "Localizar planilha",
"Copy Worksheet": "Copiar planilha",
"Update Multiple Rows": "Atualizar Várias Linhas",
"Create Spreadsheet Column": "Criar Coluna da Planilha",
"Export Sheet": "Exportar Chapa",
"Custom API Call": "Chamada de API personalizada",
"Append a row of values to an existing sheet": "Acrescentar uma linha de valores a uma folha existente",
"Add one or more new rows in a specific spreadsheet.": "Adicionar uma ou mais linhas em uma planilha específica.",
"Delete a row on an existing sheet you have access to": "Excluir uma linha em uma folha existente à qual você tem acesso",
"Overwrite values in an existing row": "Substituir valores em uma linha existente",
"Find or get rows in a Google Sheet by column name and search value": "Localizar ou obter linhas em uma Planilha Google pelo nome da coluna e valor de pesquisa",
"Creates a blank spreadsheet.": "Cria uma planilha em branco.",
"Create a blank worksheet with a title.": "Crie uma planilha em branco com um título.",
"Clears all rows on an existing sheet": "Limpa todas as linhas em uma folha existente",
"Get a row in a Google Sheet by row number": "Obter uma linha em uma planilha Google com número de linha",
"Get next group of rows from a Google Sheet": "Obter o próximo grupo de linhas de uma planilha Google",
"Find spreadsheet(s) by name.": "Encontrar planilha por nome.",
"Finds a worksheet(s) by title.": "Localiza uma planilha por título.",
"Creates a new worksheet by copying an existing one.": "Cria uma nova folha de atividade copiando uma já existente.",
"Updates multiple rows in a specific spreadsheet.": "Atualiza várias linhas em uma planilha específica.",
"Adds a new column to a spreadsheet.": "Adiciona uma nova coluna a uma planilha.",
"Export a Google Sheets tab to CSV or TSV format.": "Exportar uma guia do Google Sheets para o formato CSV ou TSV.",
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
"Include Team Drive Sheets ?": "Incluir Chapas Drive do Time ?",
"Spreadsheet": "Planilha",
"Sheet": "Folhas",
"As String": "Como texto",
"Does the first row contain headers?": "A primeira linha contém cabeçalhos?",
"Values": "Valores",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Substituir Dados Existentes?",
"Avoid Duplicates?": "Evitar duplicatas?",
"Duplicate Value Column": "Duplicar coluna de valor",
"Header Row": "Linha do Cabeçalho",
"Row Number": "Número da linha",
"The name of the column to search in": "O nome da coluna para pesquisar em",
"Search Value": "Pesquisar Valor",
"Exact match": "Correspondência exata",
"Starting Row": "Linha inicial",
"Number of Rows": "Número de linhas",
"Use header names for keys": "Usar nomes dos cabeçalhos para chaves",
"Title": "Título",
"Parent Folder": "Pasta pai",
"Headers": "Cabeçalhos",
"Is First row Headers?": "A primeira linha é de cabeçalhos?",
"Start Row": "Iniciar linha",
"Markdown": "Markdown",
"Memory Key": "Chave de memória",
"Group Size": "Tamanho do grupo",
"Spreadsheet Name": "Nome da Planilha",
"Exact Match": "Partida exata",
"Spreadsheet Containing the Worksheet to Copy": "Cópia da Planilha Contendo a Planilha",
"Worksheet to Copy": "Planilha para copiar",
"Spreadsheet to paste in": "Planilha para colar em",
"Column Name": "Nome da coluna",
"Column Index": "Índice da coluna",
"Export Format": "Formato de exportação",
"Return as Text": "Retornar como Texto",
"Method": "Método",
"Query Parameters": "Parâmetros da consulta",
"Body": "Conteúdo",
"Response is Binary ?": "A resposta é binária ?",
"No Error on Failure": "Nenhum erro no Failure",
"Timeout (in seconds)": "Tempo limite (em segundos)",
"Determines if sheets from Team Drives should be included in the results.": "Determina se as folhas do disco do time devem ser incluídas nos resultados.",
"The ID of the spreadsheet to use.": "O ID da planilha a ser utilizada.",
"The ID of the sheet to use.": "O ID da folha a ser usado.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Valores inseridos que são datas e fórmulas serão inseridas sequências de caracteres e não têm efeito",
"If the first row is headers": "Se a primeira linha for o cabeçalho",
"The values to insert": "Os valores a inserir",
"Select the format of the input values to be inserted into the sheet.": "Selecione o formato dos valores de entrada a serem inseridos na planilha.",
"The values to insert.": "Os valores a serem inseridos.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Ative esta opção para substituir todos os dados existentes na folha com novos dados da sua entrada. Isso irá limpar quaisquer linhas extras além do intervalo atualizado.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Ative esta opção para verificar se há valores duplicados antes de inserir dados na folha. Apenas linhas exclusivas serão adicionadas com base na coluna selecionada.",
"The column to check for duplicate values.": "A coluna para verificar se há valores duplicados.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Valores inseridos que são datas e fórmulas serão inseridas como sequências de caracteres e não têm efeito",
"Which row contains the headers?": "Qual linha contém os cabeçalhos?",
"The row number to remove": "O número da linha a remover",
"The row number to update": "Número da linha a ser atualizado",
"The value to search for in the specified column. If left empty, all rows will be returned.": "O valor a pesquisar na coluna especificada. Se deixado vazio, todas as linhas serão retornadas.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Se escolher as linhas com correspondência exata ou escolher as linhas que contêm o valor de pesquisa",
"The row number to start searching from": "O número da linha para começar a pesquisar",
"The number of rows to return ( the default is 1 if not specified )": "O número de linhas a retornar (o padrão é 1 se não for especificado)",
"Map A/B/C… to the actual column headers (row specified above).": "Mapa A/B/C… para os cabeçalhos de coluna reais (linha especificada acima).",
"The title of the new spreadsheet.": "O título da nova planilha.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "A pasta para criar a planilha. Por padrão, a nova planilha é criada na pasta raiz do drive.",
"The title of the new worksheet.": "O título da nova planilha.",
"The row number to get from the sheet": "O número da linha para obter a partir da folha",
"Which row to start from?": "De qual linha começar?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notas:**\n\n- Chave de memória é usada para lembrar onde a última linha foi processada e será utilizada nas seguintes execuções.\n- Republicar o fluxo **manter** o valor da chave de memória, se você quiser começar **mudar** a chave de memória.\n",
"The key used to store the current row number in memory": "A chave usada para armazenar o número da linha atual na memória",
"The number of rows to get": "Número de linhas para obter",
"The name of the spreadsheet(s) to find.": "O nome da planilha para encontrar.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "Se verdadeiro, somente retornar planilhas que correspondam exatamente ao nome. Se falso, retornar planilhas que contenham o nome.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "Se verdadeiro, somente retorna planilhas que coincidem exatamente com o nome. Se falso, retorne planilhas que contenham o nome.",
"The values to update.": "Os valores a serem atualizados.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "O índice da coluna começa a partir da 1. Por exemplo, se você quiser adicionar uma coluna na terceira coluna, digite 3. f a entrada é menor que 1 a coluna será adicionada após a última coluna atual.",
"The format to export the sheet to.": "O formato para o qual exportar a planilha.",
"Return the exported data as text instead of a file.": "Retornar os dados exportados como texto em vez de um arquivo.",
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
"CSV": "Csv",
"JSON": "JSON",
"Column Names": "Nomes das colunas",
"Comma Separated Values (.csv)": "Valores Separados por Vírgula (.csv)",
"Tab Separated Values (.tsv)": "Tab Valores Separados (.tsv)",
"GET": "OBTER",
"POST": "POSTAR",
"PATCH": "COMPRAR",
"PUT": "COLOCAR",
"DELETE": "EXCLUIR",
"HEAD": "CABEÇA",
"New Row Added": "Nova linha adicionada",
"New or Updated Row": "Linha nova ou atualizada",
"New Spreadsheet": "Nova Planilha",
"New Worksheet": "Nova Planilha",
"Triggers when a new row is added to bottom of a spreadsheet.": "Dispara quando uma nova linha é adicionada à parte inferior de uma planilha.",
"Triggers when a new row is added or modified in a spreadsheet.": "Dispara quando uma nova linha é adicionada ou modificada em uma planilha.",
"Triggers when a new spreadsheet is created.": "Dispara quando uma nova planilha é criada.",
"Triggers when a worksheet is created in a spreadsheet.": "Dispara quando uma planilha é criada em uma planilha.",
"Trigger Column": "Coluna de Disparo",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Observe que pode haver um atraso de até 3 minutos para o gatilho ser disparado, devido a um atraso do Google.",
"Trigger on changes to cells in this column only. \nSelect **Any Column** if you want the flow to trigger on changes to any cell within the row.": "Acionar mudanças em células apenas nesta coluna. \nSelecione **Qualquer coluna** se você quiser que o fluxo acione mudanças para qualquer célula na linha."
}

View File

@@ -0,0 +1,132 @@
{
"Google Sheets": "Google листы",
"Create, edit, and collaborate on spreadsheets online": "Создавайте, редактируйте и сотрудничайте с электронными таблицами онлайн",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Вставить несколько строк",
"Delete Row": "Удалить строку",
"Update Row": "Обновить строку",
"Find Rows": "Найти строки",
"Create Spreadsheet": "Создать электронную таблицу",
"Create Worksheet": "Создать таблицу",
"Clear Sheet": "Очистить лист",
"Get Row": "Получить строку",
"Get next row(s)": "Получить следующую строку(и)",
"Find Spreadsheet(s)": "Найти таблицу(и)",
"Find Worksheet(s)": "Найти таблицу(и)",
"Copy Worksheet": "Копировать таблицу",
"Update Multiple Rows": "Обновить несколько строк",
"Create Spreadsheet Column": "Создать столбец таблицы",
"Export Sheet": "Экспорт листа",
"Custom API Call": "Пользовательский вызов API",
"Append a row of values to an existing sheet": "Добавить ряд значений к существующей листе",
"Add one or more new rows in a specific spreadsheet.": "Добавьте одну или несколько новых строк в определенной таблице.",
"Delete a row on an existing sheet you have access to": "Удалите строку на существующей линии, к которой имеет доступ",
"Overwrite values in an existing row": "Перезаписать значения в существующую строку",
"Find or get rows in a Google Sheet by column name and search value": "Поиск или получение строк в Google листе по названию столбца и значению поиска",
"Creates a blank spreadsheet.": "Создать пустую таблицу.",
"Create a blank worksheet with a title.": "Создать пустую таблицу с названием.",
"Clears all rows on an existing sheet": "Очистить все строки на существующей листе",
"Get a row in a Google Sheet by row number": "Получить строку в Google листе по номеру ряда",
"Get next group of rows from a Google Sheet": "Получить следующую группу строк из Google листа",
"Find spreadsheet(s) by name.": "Поиск таблиц по имени.",
"Finds a worksheet(s) by title.": "Находит таблицу (таблицы) по названию.",
"Creates a new worksheet by copying an existing one.": "Создает новую таблицу, скопировав существующую.",
"Updates multiple rows in a specific spreadsheet.": "Обновляет несколько строк в определенной таблице.",
"Adds a new column to a spreadsheet.": "Добавляет новый столбец в таблицу.",
"Export a Google Sheets tab to CSV or TSV format.": "Экспорт вкладки Google Sheets в формат CSV или TSV.",
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
"Include Team Drive Sheets ?": "Включать листы дисков команд?",
"Spreadsheet": "Электронная таблица",
"Sheet": "Лист",
"As String": "Как строка",
"Does the first row contain headers?": "Содержит ли первая строка заголовки?",
"Values": "Значения",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Перезаписать существующие данные?",
"Avoid Duplicates?": "Избегать дубликатов?",
"Duplicate Value Column": "Столбец с дублирующимся значением",
"Row Number": "Номер строки",
"The name of the column to search in": "Название столбца для поиска в",
"Search Value": "Поисковое значение",
"Exact match": "Точное совпадение",
"Starting Row": "Начальная строка",
"Number of Rows": "Количество строк",
"Title": "Заголовок",
"Parent Folder": "Родительская папка",
"Headers": "Заголовки",
"Is First row Headers?": "Это заголовки первых строк?",
"Start Row": "Начальная строка",
"Markdown": "Markdown",
"Memory Key": "Ключ памяти",
"Group Size": "Размер группы",
"Spreadsheet Name": "Название таблицы",
"Exact Match": "Точное совпадение",
"Spreadsheet Containing the Worksheet to Copy": "Электронная таблица, содержащая рабочий лист для копирования",
"Worksheet to Copy": "Скопируемая таблица",
"Spreadsheet to paste in": "Электронная таблица для вставки",
"Column Name": "Название столбца",
"Column Index": "Индекс столбцов",
"Export Format": "Формат экспорта",
"Return as Text": "Вернуться как текст",
"Method": "Метод",
"Query Parameters": "Параметры запроса",
"Body": "Тело",
"No Error on Failure": "Нет ошибок при ошибке",
"Timeout (in seconds)": "Таймаут (в секундах)",
"Determines if sheets from Team Drives should be included in the results.": "Определяет, следует ли включать в результаты листы из Дисков команд.",
"The ID of the spreadsheet to use.": "Идентификатор используемой электронной таблицы.",
"The ID of the sheet to use.": "ID используемого листа.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Вставленные значения, которые являются датами и формулами будут вводиться строки и не имеют эффекта",
"If the first row is headers": "Если первая строка - заголовки",
"The values to insert": "Значения для вставки",
"Select the format of the input values to be inserted into the sheet.": "Выберите формат вводимых значений для вставки в лист.",
"The values to insert.": "Значения для вставки.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Включите эту опцию, чтобы заменить все существующие данные в листе новыми данными с вашего ввода. Это действие очистит все лишние строки за пределами обновленного диапазона.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Включите этот параметр, чтобы проверить на повторяющиеся значения перед вставкой данных в лист. Будут добавлены только уникальные строки на основе выбранного столбца.",
"The column to check for duplicate values.": "Столбец для проверки повторяющихся значений.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Вставленные значения, которые являются датами и формулами будут введены как строки и не имеют эффекта",
"The row number to remove": "Номер строки для удаления",
"The row number to update": "Номер строки для обновления",
"The value to search for in the specified column. If left empty, all rows will be returned.": "Значение для поиска в указанном столбце. Если оставить пустым, будут возвращены все строки.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Выбор строк с точным совпадением или выбор строк, содержащих значение поиска",
"The row number to start searching from": "Номер строки, с которой начинается поиск",
"The number of rows to return ( the default is 1 if not specified )": "Количество строк для возврата (по умолчанию 1, если не указано )",
"The title of the new spreadsheet.": "Название новой таблицы.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "Папка для создания рабочей таблицы по умолчанию создается в корневой папке диска.",
"The title of the new worksheet.": "Название нового листа.",
"The row number to get from the sheet": "Номер строки, полученный из листа",
"Which row to start from?": "С какой строки начать?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Примечание:**\n\n- Ключ памяти используется для памяти, где обрабатывался последний ряд и будет использоваться в следующих запусках.\n- Перепубликация потока **хранит** значения ключа памяти, если вы хотите начать с **изменить** ключа памяти.\n",
"The key used to store the current row number in memory": "Ключ, используемый для сохранения текущего номера строки в памяти",
"The number of rows to get": "Количество строк для получения",
"The name of the spreadsheet(s) to find.": "Имя имеющейся таблицы(ей) для поиска.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "Если true, возвращает только таблицы, которые точно соответствуют имени. Если false, возвращайте электронные таблицы, содержащие имя.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "Если true, возвращает только таблицы, которые точно соответствуют имени. Если false, возвращайте таблицы, содержащие имя.",
"The values to update.": "Значения для обновления.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "Индекс столбцов начинается с 1.Например, если вы хотите добавить столбец в третий столбец, введите 3. f ввод менее чем 1 столбец будет добавлен после последнего текущего столбца.",
"The format to export the sheet to.": "Формат для экспорта таблицы.",
"Return the exported data as text instead of a file.": "Возвращает экспортированные данные вместо файла.",
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Названия столбцов",
"Comma Separated Values (.csv)": "Значения, разделенные запятыми (.csv)",
"Tab Separated Values (.tsv)": "Значения разделенных вкладок (.tsv)",
"GET": "ПОЛУЧИТЬ",
"POST": "ПОСТ",
"PATCH": "ПАТЧ",
"PUT": "ПОКУПИТЬ",
"DELETE": "УДАЛИТЬ",
"HEAD": "HEAD",
"New Row Added": "Добавлена новая строка",
"New or Updated Row": "Новая или Обновленная строка",
"New Spreadsheet": "Новая таблица",
"New Worksheet": "Новая таблица",
"Triggers when a new row is added to bottom of a spreadsheet.": "Включает при добавлении новой строки в нижнюю часть таблицы.",
"Triggers when a new row is added or modified in a spreadsheet.": "Включает при добавлении или изменении новой строки в таблице.",
"Triggers when a new spreadsheet is created.": "Включает при создании новой электронной таблицы.",
"Triggers when a worksheet is created in a spreadsheet.": "Включает при создании таблицы в электронном формате.",
"Trigger Column": "Столбец триггера",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Пожалуйста, обратите внимание, что может возникнуть задержка до 3 минут, чтобы срабатывать срабатывание в связи с задержкой от Google.",
"Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row.": "Включать только изменения ячеек в этом столбце. выберите **Все колонки**, если хотите, чтобы потоки срабатывали изменения в любой ячейке в строке."
}

View File

@@ -0,0 +1,124 @@
{
"Google Sheets": "Google Sheets",
"Create, edit, and collaborate on spreadsheets online": "Create, edit, and collaborate on spreadsheets online",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insert Multiple Rows",
"Delete Row": "Delete Row",
"Update Row": "Update Row",
"Find Rows": "Find Rows",
"Create Spreadsheet": "Create Spreadsheet",
"Create Worksheet": "Create Worksheet",
"Clear Sheet": "Clear Sheet",
"Get Row": "Get Row",
"Get next row(s)": "Get next row(s)",
"Find Spreadsheet(s)": "Find Spreadsheet(s)",
"Find Worksheet(s)": "Find Worksheet(s)",
"Copy Worksheet": "Copy Worksheet",
"Update Multiple Rows": "Update Multiple Rows",
"Create Spreadsheet Column": "Create Spreadsheet Column",
"Custom API Call": "Custom API Call",
"Append a row of values to an existing sheet": "Append a row of values to an existing sheet",
"Add one or more new rows in a specific spreadsheet.": "Add one or more new rows in a specific spreadsheet.",
"Delete a row on an existing sheet you have access to": "Delete a row on an existing sheet you have access to",
"Overwrite values in an existing row": "Overwrite values in an existing row",
"Find or get rows in a Google Sheet by column name and search value": "Find or get rows in a Google Sheet by column name and search value",
"Creates a blank spreadsheet.": "Creates a blank spreadsheet.",
"Create a blank worksheet with a title.": "Create a blank worksheet with a title.",
"Clears all rows on an existing sheet": "Clears all rows on an existing sheet",
"Get a row in a Google Sheet by row number": "Get a row in a Google Sheet by row number",
"Get next group of rows from a Google Sheet": "Get next group of rows from a Google Sheet",
"Find spreadsheet(s) by name.": "Find spreadsheet(s) by name.",
"Finds a worksheet(s) by title.": "Finds a worksheet(s) by title.",
"Creates a new worksheet by copying an existing one.": "Creates a new worksheet by copying an existing one.",
"Updates multiple rows in a specific spreadsheet.": "Updates multiple rows in a specific spreadsheet.",
"Adds a new column to a spreadsheet.": "Adds a new column to a spreadsheet.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Include Team Drive Sheets ?": "Include Team Drive Sheets ?",
"Spreadsheet": "Spreadsheet",
"Sheet": "Sheet",
"As String": "As String",
"Does the first row contain headers?": "Does the first row contain headers?",
"Values": "Values",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Overwrite Existing Data?",
"Avoid Duplicates?": "Avoid Duplicates?",
"Duplicate Value Column": "Duplicate Value Column",
"Row Number": "Row Number",
"The name of the column to search in": "The name of the column to search in",
"Search Value": "Search Value",
"Exact match": "Exact match",
"Starting Row": "Starting Row",
"Number of Rows": "Number of Rows",
"Title": "Title",
"Parent Folder": "Parent Folder",
"Headers": "Headers",
"Is First row Headers?": "Is First row Headers?",
"Start Row": "Start Row",
"Markdown": "Markdown",
"Memory Key": "Memory Key",
"Group Size": "Group Size",
"Spreadsheet Name": "Spreadsheet Name",
"Exact Match": "Exact Match",
"Spreadsheet Containing the Worksheet to Copy": "Spreadsheet Containing the Worksheet to Copy",
"Worksheet to Copy": "Worksheet to Copy",
"Spreadsheet to paste in": "Spreadsheet to paste in",
"Column Name": "Column Name",
"Column Index": "Column Index",
"Method": "Method",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Determines if sheets from Team Drives should be included in the results.": "Determines if sheets from Team Drives should be included in the results.",
"The ID of the spreadsheet to use.": "The ID of the spreadsheet to use.",
"The ID of the sheet to use.": "The ID of the sheet to use.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Inserted values that are dates and formulas will be entered strings and have no effect",
"If the first row is headers": "If the first row is headers",
"The values to insert": "The values to insert",
"Select the format of the input values to be inserted into the sheet.": "Select the format of the input values to be inserted into the sheet.",
"The values to insert.": "The values to insert.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.",
"The column to check for duplicate values.": "The column to check for duplicate values.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Inserted values that are dates and formulas will be entered as strings and have no effect",
"The row number to remove": "The row number to remove",
"The row number to update": "The row number to update",
"The value to search for in the specified column. If left empty, all rows will be returned.": "The value to search for in the specified column. If left empty, all rows will be returned.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Whether to choose the rows with exact match or choose the rows that contain the search value",
"The row number to start searching from": "The row number to start searching from",
"The number of rows to return ( the default is 1 if not specified )": "The number of rows to return ( the default is 1 if not specified )",
"The title of the new spreadsheet.": "The title of the new spreadsheet.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.",
"The title of the new worksheet.": "The title of the new worksheet.",
"The row number to get from the sheet": "The row number to get from the sheet",
"Which row to start from?": "Which row to start from?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "The key used to store the current row number in memory",
"The number of rows to get": "The number of rows to get",
"The name of the spreadsheet(s) to find.": "The name of the spreadsheet(s) to find.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.",
"The values to update.": "The values to update.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Column Names",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Row Added": "New Row Added",
"New or Updated Row": "New or Updated Row",
"New Spreadsheet": "New Spreadsheet",
"New Worksheet": "New Worksheet",
"Triggers when a new row is added to bottom of a spreadsheet.": "Triggers when a new row is added to bottom of a spreadsheet.",
"Triggers when a new row is added or modified in a spreadsheet.": "Triggers when a new row is added or modified in a spreadsheet.",
"Triggers when a new spreadsheet is created.": "Triggers when a new spreadsheet is created.",
"Triggers when a worksheet is created in a spreadsheet.": "Triggers when a worksheet is created in a spreadsheet.",
"Trigger Column": "Trigger Column",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.",
"Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,137 @@
{
"Create, edit, and collaborate on spreadsheets online": "Create, edit, and collaborate on spreadsheets online",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insert Multiple Rows",
"Delete Row": "Delete Row",
"Update Row": "Update Row",
"Find Rows": "Find Rows",
"Create Spreadsheet": "Create Spreadsheet",
"Create Worksheet": "Create Worksheet",
"Clear Sheet": "Clear Sheet",
"Get Row": "Get Row",
"Get next row(s)": "Get next row(s)",
"Find Spreadsheet(s)": "Find Spreadsheet(s)",
"Find Worksheet(s)": "Find Worksheet(s)",
"Copy Worksheet": "Copy Worksheet",
"Update Multiple Rows": "Update Multiple Rows",
"Create Spreadsheet Column": "Create Spreadsheet Column",
"Export Sheet": "Export Sheet",
"Custom API Call": "Custom API Call",
"Append a row of values to an existing sheet": "Append a row of values to an existing sheet",
"Add one or more new rows in a specific spreadsheet.": "Add one or more new rows in a specific spreadsheet.",
"Delete a row on an existing sheet you have access to": "Delete a row on an existing sheet you have access to",
"Overwrite values in an existing row": "Overwrite values in an existing row",
"Find or get rows in a Google Sheet by column name and search value": "Find or get rows in a Google Sheet by column name and search value",
"Creates a blank spreadsheet.": "Creates a blank spreadsheet.",
"Create a blank worksheet with a title.": "Create a blank worksheet with a title.",
"Clears all rows on an existing sheet": "Clears all rows on an existing sheet",
"Get a row in a Google Sheet by row number": "Get a row in a Google Sheet by row number",
"Get next group of rows from a Google Sheet": "Get next group of rows from a Google Sheet",
"Find spreadsheet(s) by name.": "Find spreadsheet(s) by name.",
"Finds a worksheet(s) by title.": "Finds a worksheet(s) by title.",
"Creates a new worksheet by copying an existing one.": "Creates a new worksheet by copying an existing one.",
"Updates multiple rows in a specific spreadsheet.": "Updates multiple rows in a specific spreadsheet.",
"Adds a new column to a spreadsheet.": "Adds a new column to a spreadsheet.",
"Export a Google Sheets tab to CSV or TSV format.": "Export a Google Sheets tab to CSV or TSV format.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Include Team Drive Sheets ?": "Include Team Drive Sheets ?",
"Spreadsheet": "Spreadsheet",
"Sheet": "Sheet",
"As String": "As String",
"Does the first row contain headers?": "Does the first row contain headers?",
"Values": "Values",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Overwrite Existing Data?",
"Avoid Duplicates?": "Avoid Duplicates?",
"Duplicate Value Column": "Duplicate Value Column",
"Header Row": "Header Row",
"Row Number": "Row Number",
"The name of the column to search in": "The name of the column to search in",
"Search Value": "Search Value",
"Exact match": "Exact match",
"Starting Row": "Starting Row",
"Number of Rows": "Number of Rows",
"Use header names for keys": "Use header names for keys",
"Title": "Title",
"Parent Folder": "Parent Folder",
"Headers": "Headers",
"Is First row Headers?": "Is First row Headers?",
"Start Row": "Start Row",
"Markdown": "Markdown",
"Memory Key": "Memory Key",
"Group Size": "Group Size",
"Spreadsheet Name": "Spreadsheet Name",
"Exact Match": "Exact Match",
"Spreadsheet Containing the Worksheet to Copy": "Spreadsheet Containing the Worksheet to Copy",
"Worksheet to Copy": "Worksheet to Copy",
"Spreadsheet to paste in": "Spreadsheet to paste in",
"Column Name": "Column Name",
"Column Index": "Column Index",
"Export Format": "Export Format",
"Return as Text": "Return as Text",
"Method": "Method",
"Query Parameters": "Query Parameters",
"Body": "Body",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Determines if sheets from Team Drives should be included in the results.": "Determines if sheets from Team Drives should be included in the results.",
"The ID of the spreadsheet to use.": "The ID of the spreadsheet to use.",
"The ID of the sheet to use.": "The ID of the sheet to use.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Inserted values that are dates and formulas will be entered strings and have no effect",
"If the first row is headers": "If the first row is headers",
"The values to insert": "The values to insert",
"Select the format of the input values to be inserted into the sheet.": "Select the format of the input values to be inserted into the sheet.",
"The values to insert.": "The values to insert.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.",
"The column to check for duplicate values.": "The column to check for duplicate values.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Inserted values that are dates and formulas will be entered as strings and have no effect",
"Which row contains the headers?": "Which row contains the headers?",
"The row number to remove": "The row number to remove",
"The row number to update": "The row number to update",
"The value to search for in the specified column. If left empty, all rows will be returned.": "The value to search for in the specified column. If left empty, all rows will be returned.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Whether to choose the rows with exact match or choose the rows that contain the search value",
"The row number to start searching from": "The row number to start searching from",
"The number of rows to return ( the default is 1 if not specified )": "The number of rows to return ( the default is 1 if not specified )",
"Map A/B/C… to the actual column headers (row specified above).": "Map A/B/C… to the actual column headers (row specified above).",
"The title of the new spreadsheet.": "The title of the new spreadsheet.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.",
"The title of the new worksheet.": "The title of the new worksheet.",
"The row number to get from the sheet": "The row number to get from the sheet",
"Which row to start from?": "Which row to start from?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "The key used to store the current row number in memory",
"The number of rows to get": "The number of rows to get",
"The name of the spreadsheet(s) to find.": "The name of the spreadsheet(s) to find.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.",
"The values to update.": "The values to update.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.",
"The format to export the sheet to.": "The format to export the sheet to.",
"Return the exported data as text instead of a file.": "Return the exported data as text instead of a file.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Column Names",
"Comma Separated Values (.csv)": "Comma Separated Values (.csv)",
"Tab Separated Values (.tsv)": "Tab Separated Values (.tsv)",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Row Added": "New Row Added",
"New or Updated Row": "New or Updated Row",
"New Spreadsheet": "New Spreadsheet",
"New Worksheet": "New Worksheet",
"Triggers when a new row is added to bottom of a spreadsheet.": "Triggers when a new row is added to bottom of a spreadsheet.",
"Triggers when a new row is added or modified in a spreadsheet.": "Triggers when a new row is added or modified in a spreadsheet.",
"Triggers when a new spreadsheet is created.": "Triggers when a new spreadsheet is created.",
"Triggers when a worksheet is created in a spreadsheet.": "Triggers when a worksheet is created in a spreadsheet.",
"Trigger Column": "Trigger Column",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.",
"Trigger on changes to cells in this column only. \nSelect **Any Column** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only. \nSelect **Any Column** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,124 @@
{
"Google Sheets": "Google Sheets",
"Create, edit, and collaborate on spreadsheets online": "Create, edit, and collaborate on spreadsheets online",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insert Multiple Rows",
"Delete Row": "Delete Row",
"Update Row": "Update Row",
"Find Rows": "Find Rows",
"Create Spreadsheet": "Create Spreadsheet",
"Create Worksheet": "Create Worksheet",
"Clear Sheet": "Clear Sheet",
"Get Row": "Get Row",
"Get next row(s)": "Get next row(s)",
"Find Spreadsheet(s)": "Find Spreadsheet(s)",
"Find Worksheet(s)": "Find Worksheet(s)",
"Copy Worksheet": "Copy Worksheet",
"Update Multiple Rows": "Update Multiple Rows",
"Create Spreadsheet Column": "Create Spreadsheet Column",
"Custom API Call": "Custom API Call",
"Append a row of values to an existing sheet": "Append a row of values to an existing sheet",
"Add one or more new rows in a specific spreadsheet.": "Add one or more new rows in a specific spreadsheet.",
"Delete a row on an existing sheet you have access to": "Delete a row on an existing sheet you have access to",
"Overwrite values in an existing row": "Overwrite values in an existing row",
"Find or get rows in a Google Sheet by column name and search value": "Find or get rows in a Google Sheet by column name and search value",
"Creates a blank spreadsheet.": "Creates a blank spreadsheet.",
"Create a blank worksheet with a title.": "Create a blank worksheet with a title.",
"Clears all rows on an existing sheet": "Clears all rows on an existing sheet",
"Get a row in a Google Sheet by row number": "Get a row in a Google Sheet by row number",
"Get next group of rows from a Google Sheet": "Get next group of rows from a Google Sheet",
"Find spreadsheet(s) by name.": "Find spreadsheet(s) by name.",
"Finds a worksheet(s) by title.": "Finds a worksheet(s) by title.",
"Creates a new worksheet by copying an existing one.": "Creates a new worksheet by copying an existing one.",
"Updates multiple rows in a specific spreadsheet.": "Updates multiple rows in a specific spreadsheet.",
"Adds a new column to a spreadsheet.": "Adds a new column to a spreadsheet.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Include Team Drive Sheets ?": "Include Team Drive Sheets ?",
"Spreadsheet": "Spreadsheet",
"Sheet": "Sheet",
"As String": "As String",
"Does the first row contain headers?": "Does the first row contain headers?",
"Values": "Values",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Overwrite Existing Data?",
"Avoid Duplicates?": "Avoid Duplicates?",
"Duplicate Value Column": "Duplicate Value Column",
"Row Number": "Row Number",
"The name of the column to search in": "The name of the column to search in",
"Search Value": "Search Value",
"Exact match": "Exact match",
"Starting Row": "Starting Row",
"Number of Rows": "Number of Rows",
"Title": "Title",
"Parent Folder": "Parent Folder",
"Headers": "Headers",
"Is First row Headers?": "Is First row Headers?",
"Start Row": "Start Row",
"Markdown": "Markdown",
"Memory Key": "Memory Key",
"Group Size": "Group Size",
"Spreadsheet Name": "Spreadsheet Name",
"Exact Match": "Exact Match",
"Spreadsheet Containing the Worksheet to Copy": "Spreadsheet Containing the Worksheet to Copy",
"Worksheet to Copy": "Worksheet to Copy",
"Spreadsheet to paste in": "Spreadsheet to paste in",
"Column Name": "Column Name",
"Column Index": "Column Index",
"Method": "Method",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Determines if sheets from Team Drives should be included in the results.": "Determines if sheets from Team Drives should be included in the results.",
"The ID of the spreadsheet to use.": "The ID of the spreadsheet to use.",
"The ID of the sheet to use.": "The ID of the sheet to use.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Inserted values that are dates and formulas will be entered strings and have no effect",
"If the first row is headers": "If the first row is headers",
"The values to insert": "The values to insert",
"Select the format of the input values to be inserted into the sheet.": "Select the format of the input values to be inserted into the sheet.",
"The values to insert.": "The values to insert.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.",
"The column to check for duplicate values.": "The column to check for duplicate values.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Inserted values that are dates and formulas will be entered as strings and have no effect",
"The row number to remove": "The row number to remove",
"The row number to update": "The row number to update",
"The value to search for in the specified column. If left empty, all rows will be returned.": "The value to search for in the specified column. If left empty, all rows will be returned.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Whether to choose the rows with exact match or choose the rows that contain the search value",
"The row number to start searching from": "The row number to start searching from",
"The number of rows to return ( the default is 1 if not specified )": "The number of rows to return ( the default is 1 if not specified )",
"The title of the new spreadsheet.": "The title of the new spreadsheet.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.",
"The title of the new worksheet.": "The title of the new worksheet.",
"The row number to get from the sheet": "The row number to get from the sheet",
"Which row to start from?": "Which row to start from?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "The key used to store the current row number in memory",
"The number of rows to get": "The number of rows to get",
"The name of the spreadsheet(s) to find.": "The name of the spreadsheet(s) to find.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.",
"The values to update.": "The values to update.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Column Names",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Row Added": "New Row Added",
"New or Updated Row": "New or Updated Row",
"New Spreadsheet": "New Spreadsheet",
"New Worksheet": "New Worksheet",
"Triggers when a new row is added to bottom of a spreadsheet.": "Triggers when a new row is added to bottom of a spreadsheet.",
"Triggers when a new row is added or modified in a spreadsheet.": "Triggers when a new row is added or modified in a spreadsheet.",
"Triggers when a new spreadsheet is created.": "Triggers when a new spreadsheet is created.",
"Triggers when a worksheet is created in a spreadsheet.": "Triggers when a worksheet is created in a spreadsheet.",
"Trigger Column": "Trigger Column",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.",
"Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,132 @@
{
"Google Sheets": "Google Sheets",
"Create, edit, and collaborate on spreadsheets online": "Create, edit, and collaborate on spreadsheets online",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "Insert Multiple Rows",
"Delete Row": "Delete Row",
"Update Row": "Update Row",
"Find Rows": "Find Rows",
"Create Spreadsheet": "Create Spreadsheet",
"Create Worksheet": "Create Worksheet",
"Clear Sheet": "Clear Sheet",
"Get Row": "Get Row",
"Get next row(s)": "Get next row(s)",
"Find Spreadsheet(s)": "Find Spreadsheet(s)",
"Find Worksheet(s)": "Find Worksheet(s)",
"Copy Worksheet": "Copy Worksheet",
"Update Multiple Rows": "Update Multiple Rows",
"Create Spreadsheet Column": "Create Spreadsheet Column",
"Export Sheet": "Export Sheet",
"Custom API Call": "Custom API Call",
"Append a row of values to an existing sheet": "Append a row of values to an existing sheet",
"Add one or more new rows in a specific spreadsheet.": "Add one or more new rows in a specific spreadsheet.",
"Delete a row on an existing sheet you have access to": "Delete a row on an existing sheet you have access to",
"Overwrite values in an existing row": "Overwrite values in an existing row",
"Find or get rows in a Google Sheet by column name and search value": "Find or get rows in a Google Sheet by column name and search value",
"Creates a blank spreadsheet.": "Creates a blank spreadsheet.",
"Create a blank worksheet with a title.": "Create a blank worksheet with a title.",
"Clears all rows on an existing sheet": "Clears all rows on an existing sheet",
"Get a row in a Google Sheet by row number": "Get a row in a Google Sheet by row number",
"Get next group of rows from a Google Sheet": "Get next group of rows from a Google Sheet",
"Find spreadsheet(s) by name.": "Find spreadsheet(s) by name.",
"Finds a worksheet(s) by title.": "Finds a worksheet(s) by title.",
"Creates a new worksheet by copying an existing one.": "Creates a new worksheet by copying an existing one.",
"Updates multiple rows in a specific spreadsheet.": "Updates multiple rows in a specific spreadsheet.",
"Adds a new column to a spreadsheet.": "Adds a new column to a spreadsheet.",
"Export a Google Sheets tab to CSV or TSV format.": "Export a Google Sheets tab to CSV or TSV format.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Include Team Drive Sheets ?": "Include Team Drive Sheets ?",
"Spreadsheet": "Spreadsheet",
"Sheet": "Sheet",
"As String": "As String",
"Does the first row contain headers?": "Does the first row contain headers?",
"Values": "Values",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "Overwrite Existing Data?",
"Avoid Duplicates?": "Avoid Duplicates?",
"Duplicate Value Column": "Duplicate Value Column",
"Row Number": "Row Number",
"The name of the column to search in": "The name of the column to search in",
"Search Value": "Search Value",
"Exact match": "Exact match",
"Starting Row": "Starting Row",
"Number of Rows": "Number of Rows",
"Title": "Title",
"Parent Folder": "Parent Folder",
"Headers": "Headers",
"Is First row Headers?": "Is First row Headers?",
"Start Row": "Start Row",
"Markdown": "Markdown",
"Memory Key": "Memory Key",
"Group Size": "Group Size",
"Spreadsheet Name": "Spreadsheet Name",
"Exact Match": "Exact Match",
"Spreadsheet Containing the Worksheet to Copy": "Spreadsheet Containing the Worksheet to Copy",
"Worksheet to Copy": "Worksheet to Copy",
"Spreadsheet to paste in": "Spreadsheet to paste in",
"Column Name": "Column Name",
"Column Index": "Column Index",
"Export Format": "Export Format",
"Return as Text": "Return as Text",
"Method": "Method",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Determines if sheets from Team Drives should be included in the results.": "Determines if sheets from Team Drives should be included in the results.",
"The ID of the spreadsheet to use.": "The ID of the spreadsheet to use.",
"The ID of the sheet to use.": "The ID of the sheet to use.",
"Inserted values that are dates and formulas will be entered strings and have no effect": "Inserted values that are dates and formulas will be entered strings and have no effect",
"If the first row is headers": "If the first row is headers",
"The values to insert": "The values to insert",
"Select the format of the input values to be inserted into the sheet.": "Select the format of the input values to be inserted into the sheet.",
"The values to insert.": "The values to insert.",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.",
"The column to check for duplicate values.": "The column to check for duplicate values.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "Inserted values that are dates and formulas will be entered as strings and have no effect",
"The row number to remove": "The row number to remove",
"The row number to update": "The row number to update",
"The value to search for in the specified column. If left empty, all rows will be returned.": "The value to search for in the specified column. If left empty, all rows will be returned.",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "Whether to choose the rows with exact match or choose the rows that contain the search value",
"The row number to start searching from": "The row number to start searching from",
"The number of rows to return ( the default is 1 if not specified )": "The number of rows to return ( the default is 1 if not specified )",
"The title of the new spreadsheet.": "The title of the new spreadsheet.",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.",
"The title of the new worksheet.": "The title of the new worksheet.",
"The row number to get from the sheet": "The row number to get from the sheet",
"Which row to start from?": "Which row to start from?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "The key used to store the current row number in memory",
"The number of rows to get": "The number of rows to get",
"The name of the spreadsheet(s) to find.": "The name of the spreadsheet(s) to find.",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.",
"The values to update.": "The values to update.",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.",
"The format to export the sheet to.": "The format to export the sheet to.",
"Return the exported data as text instead of a file.": "Return the exported data as text instead of a file.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "Column Names",
"Comma Separated Values (.csv)": "Comma Separated Values (.csv)",
"Tab Separated Values (.tsv)": "Tab Separated Values (.tsv)",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Row Added": "New Row Added",
"New or Updated Row": "New or Updated Row",
"New Spreadsheet": "New Spreadsheet",
"New Worksheet": "New Worksheet",
"Triggers when a new row is added to bottom of a spreadsheet.": "Triggers when a new row is added to bottom of a spreadsheet.",
"Triggers when a new row is added or modified in a spreadsheet.": "Triggers when a new row is added or modified in a spreadsheet.",
"Triggers when a new spreadsheet is created.": "Triggers when a new spreadsheet is created.",
"Triggers when a worksheet is created in a spreadsheet.": "Triggers when a worksheet is created in a spreadsheet.",
"Trigger Column": "Trigger Column",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.",
"Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only.Select **All Columns** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,137 @@
{
"Create, edit, and collaborate on spreadsheets online": "在线创建、编辑和协作电子表格",
"Insert Row": "Insert Row",
"Insert Multiple Rows": "插入多行",
"Delete Row": "删除行",
"Update Row": "更新行",
"Find Rows": "查找行",
"Create Spreadsheet": "创建工作表",
"Create Worksheet": "创建工作表",
"Clear Sheet": "清除工作表",
"Get Row": "获取行",
"Get next row(s)": "获取下一行(s)",
"Find Spreadsheet(s)": "查找Spreadsheet(s)",
"Find Worksheet(s)": "查找工作表",
"Copy Worksheet": "复制工作表",
"Update Multiple Rows": "更新多行",
"Create Spreadsheet Column": "创建工作表列",
"Export Sheet": "Export Sheet",
"Custom API Call": "自定义 API 呼叫",
"Append a row of values to an existing sheet": "添加一行值到现有工作表",
"Add one or more new rows in a specific spreadsheet.": "在特定的电子表格中添加一个或多个新行。",
"Delete a row on an existing sheet you have access to": "删除现有工作表上的一行",
"Overwrite values in an existing row": "覆盖现有行中的值",
"Find or get rows in a Google Sheet by column name and search value": "通过列名称和搜索值在谷歌工作表中查找或获取行",
"Creates a blank spreadsheet.": "创建空白电子表格。",
"Create a blank worksheet with a title.": "创建一个带标题的空白工作表。",
"Clears all rows on an existing sheet": "清除现有工作表上的所有行",
"Get a row in a Google Sheet by row number": "按行号在谷歌工作表中获得一行",
"Get next group of rows from a Google Sheet": "从 Google Sheet 获取下一组行",
"Find spreadsheet(s) by name.": "按名称查找电子表格。",
"Finds a worksheet(s) by title.": "按标题查找工作表。",
"Creates a new worksheet by copying an existing one.": "通过复制现有工作表创建一个新工作表。",
"Updates multiple rows in a specific spreadsheet.": "在特定的电子表格中更新多行。",
"Adds a new column to a spreadsheet.": "在电子表格中添加一个新列.",
"Export a Google Sheets tab to CSV or TSV format.": "Export a Google Sheets tab to CSV or TSV format.",
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
"Include Team Drive Sheets ?": "包含团队驱动程序表?",
"Spreadsheet": "电子表格",
"Sheet": "工作表",
"As String": "作为字符串",
"Does the first row contain headers?": "第一行是否包含标题?",
"Values": "值",
"Rows Input Format": "Rows Input Format",
"Overwrite Existing Data?": "覆盖现有数据?",
"Avoid Duplicates?": "避免重复?",
"Duplicate Value Column": "重复的值列",
"Header Row": "Header Row",
"Row Number": "行号",
"The name of the column to search in": "要搜索的列名称",
"Search Value": "搜索值",
"Exact match": "精确匹配",
"Starting Row": "起始行",
"Number of Rows": "行数",
"Use header names for keys": "Use header names for keys",
"Title": "标题",
"Parent Folder": "父文件夹",
"Headers": "信头",
"Is First row Headers?": "是第一行头?",
"Start Row": "开始行",
"Markdown": "Markdown",
"Memory Key": "内存键",
"Group Size": "组大小",
"Spreadsheet Name": "工作表名称",
"Exact Match": "精确匹配",
"Spreadsheet Containing the Worksheet to Copy": "包含工作表的数据表以复制",
"Worksheet to Copy": "复制工作表",
"Spreadsheet to paste in": "要粘贴的数据表",
"Column Name": "列名称",
"Column Index": "列索引",
"Export Format": "Export Format",
"Return as Text": "Return as Text",
"Method": "方法",
"Query Parameters": "查询参数",
"Body": "正文内容",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "失败时没有错误",
"Timeout (in seconds)": "超时(秒)",
"Determines if sheets from Team Drives should be included in the results.": "确定是否应该将团队驱动程序中的工作表包含在结果中。",
"The ID of the spreadsheet to use.": "要使用的电子表格的 ID。",
"The ID of the sheet to use.": "要使用的工作表的 ID。",
"Inserted values that are dates and formulas will be entered strings and have no effect": "作为日期和公式的插入值将被输入字符串并且没有任何效果",
"If the first row is headers": "如果第一行是头部",
"The values to insert": "要插入的值",
"Select the format of the input values to be inserted into the sheet.": "选择要插入到工作表的输入值的格式。",
"The values to insert.": "要插入的值。",
"Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.": "启用此选项可以用输入的新数据替换工作表中的所有现有数据。 这将清除超出更新范围的任何额外行数。",
"Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.": "启用此选项,在将数据插入工作表之前检查重复的值。只会根据所选列添加唯一的行。",
"The column to check for duplicate values.": "检查重复值的列.",
"Inserted values that are dates and formulas will be entered as strings and have no effect": "作为日期和公式的插入值将作为字符串输入,无效果",
"Which row contains the headers?": "Which row contains the headers?",
"The row number to remove": "要删除的行数",
"The row number to update": "要更新的行数",
"The value to search for in the specified column. If left empty, all rows will be returned.": "要在指定列中搜索的值。如果留空,将返回所有行。",
"Whether to choose the rows with exact match or choose the rows that contain the search value": "选择确切匹配的行还是选择包含搜索值的行",
"The row number to start searching from": "开始搜索的行数",
"The number of rows to return ( the default is 1 if not specified )": "要返回的行数 (默认值为 1 如果未指定)",
"Map A/B/C… to the actual column headers (row specified above).": "Map A/B/C… to the actual column headers (row specified above).",
"The title of the new spreadsheet.": "新电子表格的标题。",
"The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.": "创建工作表的文件夹。默认情况下,新工作表创建于驱动器的根文件夹。",
"The title of the new worksheet.": "新工作表的标题。",
"The row number to get from the sheet": "从工作表中获取的行数",
"Which row to start from?": "从哪一行开始?",
"\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n": "\n**Notes:**\n\n- Memory key is used to remember where last row was processed and will be used in the following runs.\n- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.\n",
"The key used to store the current row number in memory": "用于将当前行号存储在内存中的密钥",
"The number of rows to get": "要获取的行数",
"The name of the spreadsheet(s) to find.": "要查找的电子表格名称。",
"If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.": "如果为 true只返回与名称完全匹配的电子表格。如果为 false返回包含名称的电子表格。",
"If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.": "如果为 true只返回与名称完全匹配的工作单。如果为 false返回包含名称的工作表。",
"The values to update.": "要更新的值。",
"The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.": "列索引从1.开始。例如如果您想要在第三列中添加一列请输入3。 f 输入小于1列将在最后一列后添加。",
"The format to export the sheet to.": "The format to export the sheet to.",
"Return the exported data as text instead of a file.": "Return the exported data as text instead of a file.",
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"CSV": "CSV",
"JSON": "JSON",
"Column Names": "列名称",
"Comma Separated Values (.csv)": "Comma Separated Values (.csv)",
"Tab Separated Values (.tsv)": "Tab Separated Values (.tsv)",
"GET": "获取",
"POST": "帖子",
"PATCH": "PATCH",
"PUT": "弹出",
"DELETE": "删除",
"HEAD": "黑色",
"New Row Added": "添加新行",
"New or Updated Row": "新建或更新行",
"New Spreadsheet": "新建工作表",
"New Worksheet": "新建工作表",
"Triggers when a new row is added to bottom of a spreadsheet.": "当新行被添加到电子表格底部时触发.",
"Triggers when a new row is added or modified in a spreadsheet.": "当新行在电子表格中添加或修改时触发.",
"Triggers when a new spreadsheet is created.": "创建新的电子表格时触发。",
"Triggers when a worksheet is created in a spreadsheet.": "当工作表在电子表格中创建时触发.",
"Trigger Column": "触发列",
"Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.": "请注意由于谷歌的延迟触发点可能会延迟3分钟。",
"Trigger on changes to cells in this column only. \nSelect **Any Column** if you want the flow to trigger on changes to any cell within the row.": "Trigger on changes to cells in this column only. \nSelect **Any Column** if you want the flow to trigger on changes to any cell within the row."
}

View File

@@ -0,0 +1,79 @@
import { createCustomApiCallAction } from '@activepieces/pieces-common';
import {
createPiece,
} from '@activepieces/pieces-framework';
import { PieceCategory } from '@activepieces/shared';
import { clearSheetAction } from './lib/actions/clear-sheet';
import { deleteRowAction } from './lib/actions/delete-row.action';
import { findRowByNumAction } from './lib/actions/find-row-by-num';
import { findRowsAction } from './lib/actions/find-rows';
import { getRowsAction } from './lib/actions/get-rows';
import { insertRowAction } from './lib/actions/insert-row.action';
import { updateRowAction } from './lib/actions/update-row';
import { getAccessToken, googleSheetsAuth, GoogleSheetsAuthValue, googleSheetsCommon } from './lib/common/common';
import { newRowAddedTrigger } from './lib/triggers/new-row-added-webhook';
import { newOrUpdatedRowTrigger } from './lib/triggers/new-or-updated-row.trigger';
import { insertMultipleRowsAction } from './lib/actions/insert-multiple-rows.action';
import { createWorksheetAction } from './lib/actions/create-worksheet';
import { createSpreadsheetAction } from './lib/actions/create-spreadsheet';
import { findSpreadsheets } from './lib/actions/find-spreadsheets';
import { newSpreadsheetTrigger } from './lib/triggers/new-spreadsheet';
import { newWorksheetTrigger } from './lib/triggers/new-worksheet';
import { findWorksheetAction } from './lib/actions/find-worksheet';
import { copyWorksheetAction } from './lib/actions/copy-worksheet';
import { updateMultipleRowsAction } from './lib/actions/update-multiple-rows';
import { createColumnAction } from './lib/actions/create-column';
import { exportSheetAction } from './lib/actions/export-sheet';
import { getManyRowsAction } from './lib/actions/get-many-rows';
export const googleSheets = createPiece({
minimumSupportedRelease: '0.71.4',
logoUrl: 'https://cdn.activepieces.com/pieces/google-sheets.png',
categories: [PieceCategory.PRODUCTIVITY],
authors: [
'ShayPunter',
'Ozak93',
'Abdallah-Alwarawreh',
'Salem-Alaa',
'kishanprmr',
'MoShizzle',
'AbdulTheActivePiecer',
'khaledmashaly',
'abuaboud',
'geekyme',
],
actions: [
insertRowAction,
insertMultipleRowsAction,
deleteRowAction,
updateRowAction,
findRowsAction,
createSpreadsheetAction,
createWorksheetAction,
clearSheetAction,
findRowByNumAction,
getRowsAction,
getManyRowsAction,
findSpreadsheets,
findWorksheetAction,
copyWorksheetAction,
updateMultipleRowsAction,
createColumnAction,
exportSheetAction,
createCustomApiCallAction({
auth: googleSheetsAuth,
baseUrl: () => {
return googleSheetsCommon.baseUrl;
},
authMapping: async (auth) => {
return {
Authorization: `Bearer ${(await getAccessToken(auth as GoogleSheetsAuthValue))}`,
};
},
}),
],
displayName: 'Google Sheets',
description: 'Create, edit, and collaborate on spreadsheets online',
triggers: [newOrUpdatedRowTrigger,newRowAddedTrigger,newSpreadsheetTrigger,newWorksheetTrigger],
auth: googleSheetsAuth,
});

View File

@@ -0,0 +1,64 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { areSheetIdsValid, googleSheetsCommon } from '../common/common';
import { googleSheetsAuth } from '../common/common';
import { commonProps } from '../common/props';
export const clearSheetAction = createAction({
auth: googleSheetsAuth,
name: 'clear_sheet',
description: 'Clears all rows on an existing sheet',
displayName: 'Clear Sheet',
props: {
...commonProps,
is_first_row_headers: Property.Checkbox({
displayName: 'Is First row Headers?',
description: 'If the first row is headers',
required: true,
defaultValue: true,
}),
headerRow: Property.Number({
displayName: 'Header Row',
description: 'Which row contains the headers?',
required: true,
defaultValue: 1,
}),
},
async run({ propsValue, auth }) {
const { spreadsheetId, sheetId, is_first_row_headers:isFirstRowHeaders, headerRow } = propsValue;
if (!areSheetIdsValid(spreadsheetId, sheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
await googleSheetsCommon.findSheetName(
auth,
spreadsheetId as string,
sheetId as number
);
const rowsToDelete: number[] = [];
const values = await googleSheetsCommon.getGoogleSheetRows({
spreadsheetId: spreadsheetId as string,
auth: auth,
sheetId: sheetId as number,
rowIndex_s: 1,
rowIndex_e: undefined,
headerRow: headerRow,
});
for (const key in values) {
if (key === '0' && isFirstRowHeaders) {
continue;
}
rowsToDelete.push(parseInt(key) + 1);
}
const response = await googleSheetsCommon.clearSheet(
spreadsheetId as string,
sheetId as number,
auth,
isFirstRowHeaders ? 1 : 0,
rowsToDelete.length
);
return response.body;
},
});

View File

@@ -0,0 +1,32 @@
import { googleSheetsAuth } from '../common/common';
import { createAction } from '@activepieces/pieces-framework';
import { includeTeamDrivesProp, sheetIdProp, spreadsheetIdProp } from '../common/props';
import { google } from 'googleapis';
import { createGoogleClient } from '../common/common';
export const copyWorksheetAction = createAction({
auth: googleSheetsAuth,
name: 'copy-worksheet',
displayName: 'Copy Worksheet',
description: 'Creates a new worksheet by copying an existing one.',
props: {
includeTeamDrives: includeTeamDrivesProp(),
spreadsheetId: spreadsheetIdProp('Spreadsheet Containing the Worksheet to Copy', ''),
sheetId: sheetIdProp('Worksheet to Copy', ''),
desinationSpeadsheetId: spreadsheetIdProp('Spreadsheet to paste in', ''),
},
async run(context) {
const authClient = await createGoogleClient(context.auth);
const sheets = google.sheets({ version: 'v4', auth: authClient });
const response = await sheets.spreadsheets.sheets.copyTo({
spreadsheetId: context.propsValue.spreadsheetId,
sheetId: context.propsValue.sheetId,
requestBody: {
destinationSpreadsheetId: context.propsValue.desinationSpeadsheetId,
},
});
return response.data;
},
});

View File

@@ -0,0 +1,106 @@
import { googleSheetsAuth } from '../common/common';
import { createAction, Property } from '@activepieces/pieces-framework';
import {
areSheetIdsValid,
columnToLabel,
createGoogleClient,
getHeaderRow,
ValueInputOption,
} from '../common/common';
import { google } from 'googleapis';
import { OAuth2Client } from 'googleapis-common';
import { getWorkSheetName } from '../triggers/helpers';
import { commonProps } from '../common/props';
export const createColumnAction = createAction({
auth: googleSheetsAuth,
name: 'create-column',
displayName: 'Create Spreadsheet Column',
description: 'Adds a new column to a spreadsheet.',
props: {
...commonProps,
columnName: Property.ShortText({
displayName: 'Column Name',
required: true,
}),
columnIndex: Property.Number({
displayName: 'Column Index',
description:
'The column index starts from 1.For example, if you want to add a column to the third column, enter 3.Ff the input is less than 1 the column will be added after the last current column.',
required: false,
}),
},
async run(context) {
const { spreadsheetId, sheetId, columnName, columnIndex } = context.propsValue;
if (!areSheetIdsValid(spreadsheetId, sheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const authClient = await createGoogleClient(context.auth);
const sheets = google.sheets({ version: 'v4', auth: authClient });
let columnLabel;
if (columnIndex && columnIndex > 0) {
await sheets.spreadsheets.batchUpdate({
spreadsheetId,
requestBody: {
requests: [
{
insertDimension: {
range: {
sheetId,
dimension: 'COLUMNS',
startIndex: columnIndex -1,
endIndex: columnIndex,
},
},
},
],
},
});
columnLabel = columnToLabel(columnIndex-1);
} else {
const headers = await getHeaderRow({
spreadsheetId:spreadsheetId as string,
sheetId :sheetId as number,
auth: context.auth,
});
const newColumnIndex = headers === undefined ? 0 : headers.length;
await sheets.spreadsheets.batchUpdate({
spreadsheetId,
requestBody: {
requests: [
{
insertDimension: {
range: {
sheetId,
dimension: 'COLUMNS',
startIndex: newColumnIndex,
endIndex: newColumnIndex + 1,
},
},
},
],
},
});
columnLabel = columnToLabel(newColumnIndex);
}
const sheetName = await getWorkSheetName(context.auth, spreadsheetId as string , sheetId as number);
const response = await sheets.spreadsheets.values.update({
range: `${sheetName}!${columnLabel}1`,
spreadsheetId,
valueInputOption: ValueInputOption.USER_ENTERED,
requestBody: {
values: [[columnName]],
},
});
return response.data;
},
});

View File

@@ -0,0 +1,122 @@
import {
AppConnectionValueForAuthProperty,
createAction,
PiecePropValueSchema,
Property,
} from '@activepieces/pieces-framework';
import {
AuthenticationType,
httpClient,
HttpMethod,
HttpRequest,
} from '@activepieces/pieces-common';
import { google } from 'googleapis';
import { includeTeamDrivesProp } from '../common/props';
import { createGoogleClient, getAccessToken, googleSheetsAuth } from '../common/common';
import { AppConnectionType, isNil } from '@activepieces/shared';
export const createSpreadsheetAction = createAction({
auth: googleSheetsAuth,
name: 'create-spreadsheet',
displayName: 'Create Spreadsheet',
description: 'Creates a blank spreadsheet.',
props: {
title: Property.ShortText({
displayName: 'Title',
description: 'The title of the new spreadsheet.',
required: true,
}),
includeTeamDrives: includeTeamDrivesProp(),
folder: Property.Dropdown({
auth: googleSheetsAuth,
displayName: 'Parent Folder',
description:
'The folder to create the worksheet in.By default, the new worksheet is created in the root folder of drive.',
required: false,
refreshers: ['auth', 'includeTeamDrives'],
options: async ({ auth, includeTeamDrives }) => {
if (!auth) {
return {
disabled: true,
options: [],
placeholder: 'Please authenticate first',
};
}
const authProp = auth;
let folders: { id: string; name: string }[] = [];
const isServiceAccountWithoutImpersonation = authProp.type === AppConnectionType.CUSTOM_AUTH && authProp.props.userEmail?.length === 0;
let pageToken = null;
do {
const request: HttpRequest = {
method: HttpMethod.GET,
url: `https://www.googleapis.com/drive/v3/files`,
queryParams: {
q: "mimeType='application/vnd.google-apps.folder' and trashed = false",
includeItemsFromAllDrives: includeTeamDrives || isServiceAccountWithoutImpersonation ? 'true' : 'false',
supportsAllDrives: 'true',
},
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: await getAccessToken(authProp),
},
};
if (pageToken) {
if (request.queryParams !== undefined) {
request.queryParams['pageToken'] = pageToken;
}
}
try {
const response = await httpClient.sendRequest<{
files: { id: string; name: string,teamDriveId?: string }[];
nextPageToken: string;
}>(request);
folders = folders.concat(response.body.files.filter(file => !isNil(file.teamDriveId) || !isServiceAccountWithoutImpersonation));
pageToken = response.body.nextPageToken;
} catch (e) {
throw new Error(`Failed to get folders\nError:${e}`);
}
} while (pageToken);
return {
disabled: false,
options: folders.map((folder: { id: string; name: string }) => {
return {
label: folder.name,
value: folder.id,
};
}),
};
},
}),
},
async run(context) {
const { title, folder } = context.propsValue;
const response = await createSpreadsheet(context.auth, title, folder);
const newSpreadsheetId = response.id;
return {
id: newSpreadsheetId,
};
},
});
async function createSpreadsheet(
auth: AppConnectionValueForAuthProperty<typeof googleSheetsAuth>,
title: string,
folderId?: string,
) {
const googleClient = await createGoogleClient(auth);
const driveApi = google.drive({ version: 'v3', auth: googleClient });
const response = await driveApi.files.create({
requestBody: {
name: title,
mimeType: 'application/vnd.google-apps.spreadsheet',
parents: folderId ? [folderId] : undefined,
},
supportsAllDrives: true,
});
return response.data;
}

View File

@@ -0,0 +1,62 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { createGoogleClient } from '../common/common';
import { googleSheetsAuth } from '../common/common';
import { includeTeamDrivesProp, spreadsheetIdProp } from '../common/props';
import { google } from 'googleapis';
export const createWorksheetAction = createAction({
auth: googleSheetsAuth,
name: 'create-worksheet',
displayName: 'Create Worksheet',
description:'Create a blank worksheet with a title.',
props: {
includeTeamDrives: includeTeamDrivesProp(),
spreadsheetId: spreadsheetIdProp('Spreadsheet',''),
title:Property.ShortText({
displayName:'Title',
description:'The title of the new worksheet.',
required:true
}),
headers:Property.Array({
displayName:'Headers',
required:false
})
},
async run(context){
const {spreadsheetId,title} = context.propsValue;
const headers = context.propsValue.headers as string[] ?? [];
const client = await createGoogleClient(context.auth);
const sheetsApi = google.sheets({ version: 'v4', auth: client });
const sheet = await sheetsApi.spreadsheets.batchUpdate({
spreadsheetId:spreadsheetId,
requestBody:{
requests:[
{
addSheet:{
properties:{
title:title
},
},
}
]
}
});
const addHeadersResponse = await sheetsApi.spreadsheets.values.append({
spreadsheetId,
range:`${context.propsValue.title}!A1`,
valueInputOption:'RAW',
requestBody:{
majorDimension:'ROWS',
values:[headers]
}
});
return {
id: sheet.data?.replies?.[0]?.addSheet?.properties?.sheetId,
...addHeadersResponse.data
}
}})

View File

@@ -0,0 +1,40 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { areSheetIdsValid, googleSheetsCommon } from '../common/common';
import { googleSheetsAuth } from '../common/common';
import { commonProps } from '../common/props';
export const deleteRowAction = createAction({
auth: googleSheetsAuth,
name: 'delete_row',
description: 'Delete a row on an existing sheet you have access to',
displayName: 'Delete Row',
props: {
...commonProps,
rowId: Property.Number({
displayName: 'Row Number',
description: 'The row number to remove',
required: true,
}),
},
async run(context) {
const { spreadsheetId, sheetId, rowId } = context.propsValue;
if (!areSheetIdsValid(spreadsheetId,sheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
// Subtract 1 from the row_id to convert it to 0-indexed
const adjustedRowIndex = rowId - 1;
const response = await googleSheetsCommon.deleteRow(
spreadsheetId as string,
sheetId as number,
adjustedRowIndex,
context.auth,
);
return {
success: true,
body: response,
};
},
});

View File

@@ -0,0 +1,85 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
httpClient,
HttpMethod,
AuthenticationType,
} from '@activepieces/pieces-common';
import { googleSheetsAuth } from '../common/common';
import { commonProps } from '../common/props';
import { areSheetIdsValid, getAccessToken } from '../common/common';
export const exportSheetAction = createAction({
name: 'export_sheet',
displayName: 'Export Sheet',
description: 'Export a Google Sheets tab to CSV or TSV format.',
auth: googleSheetsAuth,
props: {
...commonProps,
format: Property.StaticDropdown({
displayName: 'Export Format',
description: 'The format to export the sheet to.',
required: true,
defaultValue: 'csv',
options: {
disabled: false,
options: [
{ label: 'Comma Separated Values (.csv)', value: 'csv' },
{ label: 'Tab Separated Values (.tsv)', value: 'tsv' },
],
},
}),
returnAsText: Property.Checkbox({
displayName: 'Return as Text',
description: 'Return the exported data as text instead of a file.',
required: false,
defaultValue: false,
}),
},
async run({ propsValue, auth, files }) {
const { spreadsheetId, sheetId, format, returnAsText } = propsValue;
if (!areSheetIdsValid(spreadsheetId, sheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const spreadsheet_id = spreadsheetId as string;
const sheet_id = sheetId as number;
const exportUrl = `https://docs.google.com/spreadsheets/d/${spreadsheet_id}/export?format=${format}&id=${spreadsheet_id}&gid=${sheet_id}`;
try {
const response = await httpClient.sendRequest({
method: HttpMethod.GET,
url: exportUrl,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: await getAccessToken(auth),
},
responseType: 'arraybuffer',
});
if (returnAsText) {
const textData = Buffer.from(response.body).toString('utf-8');
return {
text: textData,
format,
};
} else {
const filename = `exported_sheet.${format}`;
const file = await files.write({
fileName: filename,
data: Buffer.from(response.body),
});
return {
file,
filename,
format,
};
}
} catch (error) {
throw new Error(`Failed to export sheet: ${error}`);
}
},
});

View File

@@ -0,0 +1,42 @@
import { Property, createAction } from '@activepieces/pieces-framework';
import { areSheetIdsValid, googleSheetsCommon } from '../common/common';
import { googleSheetsAuth } from '../common/common';
import { commonProps } from '../common/props';
export const findRowByNumAction = createAction({
auth: googleSheetsAuth,
name: 'find_row_by_num',
description: 'Get a row in a Google Sheet by row number',
displayName: 'Get Row',
props: {
...commonProps,
rowNumber: Property.Number({
displayName: 'Row Number',
description: 'The row number to get from the sheet',
required: true,
}),
headerRow: Property.Number({
displayName: 'Header Row',
description: 'Which row contains the headers?',
required: true,
defaultValue: 1,
}),
},
async run(context) {
const {spreadsheetId,sheetId,rowNumber,headerRow} = context.propsValue;
if (!areSheetIdsValid(spreadsheetId,sheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const row = await googleSheetsCommon.getGoogleSheetRows({
auth: context.auth,
sheetId: sheetId as number,
spreadsheetId: spreadsheetId as string,
rowIndex_s: rowNumber,
rowIndex_e: rowNumber,
headerRow: headerRow,
});
return row[0];
},
});

View File

@@ -0,0 +1,142 @@
import {
createAction,
Property,
} from '@activepieces/pieces-framework';
import {
areSheetIdsValid,
googleSheetsCommon,
labelToColumn,
mapRowsToHeaderNames
} from '../common/common';
import { googleSheetsAuth } from '../common/common';
import { z } from 'zod';
import { propsValidation } from '@activepieces/pieces-common';
import { columnNameProp, commonProps } from '../common/props';
export const findRowsAction = createAction({
auth: googleSheetsAuth,
name: 'find_rows',
description:
'Find or get rows in a Google Sheet by column name and search value',
displayName: 'Find Rows',
props: {
...commonProps,
columnName: columnNameProp(),
searchValue: Property.ShortText({
displayName: 'Search Value',
description:
'The value to search for in the specified column. If left empty, all rows will be returned.',
required: false,
}),
matchCase: Property.Checkbox({
displayName: 'Exact match',
description:
'Whether to choose the rows with exact match or choose the rows that contain the search value',
required: true,
defaultValue: false,
}),
startingRow: Property.Number({
displayName: 'Starting Row',
description: 'The row number to start searching from',
required: false,
}),
numberOfRows: Property.Number({
displayName: 'Number of Rows',
description:
'The number of rows to return ( the default is 1 if not specified )',
required: false,
defaultValue: 1,
}),
headerRow: Property.Number({
displayName: 'Header Row',
description: 'Which row contains the headers?',
required: true,
defaultValue: 1,
}),
useHeaderNames: Property.Checkbox({
displayName: 'Use header names for keys',
description: 'Map A/B/C… to the actual column headers (row specified above).',
required: false,
defaultValue: false,
}),
},
async run({ propsValue, auth }) {
await propsValidation.validateZod(propsValue, {
startingRow: z.number().min(1).optional(),
numberOfRows: z.number().min(1).optional(),
});
const spreadsheetId = propsValue.spreadsheetId;
const sheetId = propsValue.sheetId;
const startingRow = propsValue.startingRow ?? 1;
const numberOfRowsToReturn = propsValue.numberOfRows ?? 1;
const headerRow = propsValue.headerRow;
const useHeaderNames = propsValue.useHeaderNames as boolean;
if (!areSheetIdsValid(spreadsheetId,sheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const rows = await googleSheetsCommon.getGoogleSheetRows({
spreadsheetId: spreadsheetId as string,
auth: auth,
sheetId: sheetId as number,
rowIndex_s: startingRow,
rowIndex_e: undefined,
headerRow: headerRow,
});
const values = rows.map((row) => {
return row.values;
});
const matchingRows: any[] = [];
const columnName = propsValue.columnName ? propsValue.columnName : 'A';
const columnNumber:number = labelToColumn(columnName);
const searchValue = propsValue.searchValue ?? '';
let matchedRowCount = 0;
for (let i = 0; i < values.length; i++) {
const row:Record<string,any> = values[i];
if (matchedRowCount === numberOfRowsToReturn) break;
if (searchValue === '') {
matchingRows.push(rows[i]);
matchedRowCount += 1;
continue;
}
const keys = Object.keys(row);
if (keys.length <= columnNumber) continue;
const entry_value = row[keys[columnNumber]];
if (entry_value === undefined) {
continue;
}
if (propsValue.matchCase) {
if (entry_value === searchValue) {
matchedRowCount += 1;
matchingRows.push(rows[i]);
}
} else {
if (entry_value.toLowerCase().includes(searchValue.toLowerCase())) {
matchedRowCount += 1;
matchingRows.push(rows[i]);
}
}
}
const finalRows = await mapRowsToHeaderNames(
matchingRows,
useHeaderNames,
spreadsheetId as string,
sheetId as number,
headerRow,
auth,
);
return finalRows;
},
});

View File

@@ -0,0 +1,83 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod, AuthenticationType, HttpRequest } from '@activepieces/pieces-common';
import { googleSheetsAuth } from '../common/common';
import { includeTeamDrivesProp } from '../common/props';
import { getAccessToken } from '../common/common';
export const findSpreadsheets = createAction({
name: 'find_spreadsheets',
displayName: 'Find Spreadsheet(s)',
description: 'Find spreadsheet(s) by name.',
auth: googleSheetsAuth,
props: {
includeTeamDrives: includeTeamDrivesProp(),
spreadsheet_name: Property.ShortText({
displayName: 'Spreadsheet Name',
description: 'The name of the spreadsheet(s) to find.',
required: true,
}),
exact_match: Property.Checkbox({
displayName: 'Exact Match',
description: 'If true, only return spreadsheets that exactly match the name. If false, return spreadsheets that contain the name.',
required: false,
defaultValue: false,
}),
},
async run({ propsValue, auth }) {
const searchValue = propsValue.spreadsheet_name;
const queries = [
"mimeType='application/vnd.google-apps.spreadsheet'",
'trashed=false',
];
if (propsValue.exact_match) {
queries.push(`name = '${searchValue}'`);
} else {
queries.push(`name contains '${searchValue}'`);
}
const files = [];
let pageToken = null;
do
{
const request :HttpRequest = {
method:HttpMethod.GET,
url: 'https://www.googleapis.com/drive/v3/files',
queryParams:{
q: queries.join(' and '),
includeItemsFromAllDrives: propsValue.includeTeamDrives ? 'true' : 'false',
supportsAllDrives: 'true',
fields: 'files(id,name,webViewLink,createdTime,modifiedTime),nextPageToken',
},
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: await getAccessToken(auth),
},
}
if (pageToken) {
if (request.queryParams !== undefined) {
request.queryParams['pageToken'] = pageToken;
}
}
try {
const response = await httpClient.sendRequest<{
files: { id: string; name: string }[];
nextPageToken: string;
}>(request);
files.push(...response.body.files);
pageToken = response.body.nextPageToken;
} catch (e) {
throw new Error(`Failed to get folders\nError:${e}`);
}
}while(pageToken);
return {
found: files.length > 0,
spreadsheets:files,
};
},
});

View File

@@ -0,0 +1,52 @@
import { googleSheetsAuth } from '../common/common';
import { createAction, Property } from '@activepieces/pieces-framework';
import { google } from 'googleapis';
import { OAuth2Client } from 'googleapis-common';
import { includeTeamDrivesProp, spreadsheetIdProp } from '../common/props';
import { createGoogleClient } from '../common/common';
export const findWorksheetAction = createAction({
auth: googleSheetsAuth,
name: 'find-worksheet',
displayName: 'Find Worksheet(s)',
description: 'Finds a worksheet(s) by title.',
props: {
includeTeamDrives: includeTeamDrivesProp(),
spreadsheetId:spreadsheetIdProp('Spreadsheet',''),
title: Property.ShortText({
displayName: 'Title',
required: true,
}),
exact_match: Property.Checkbox({
displayName: 'Exact Match',
description: 'If true, only return worksheets that exactly match the name. If false, return worksheets that contain the name.',
required: false,
defaultValue: false,
}),
},
async run(context) {
const spreadsheetId = context.propsValue.spreadsheetId;
const title = context.propsValue.title;
const exactMatch = context.propsValue.exact_match ?? false;
const authClient = await createGoogleClient(context.auth);
const sheets = google.sheets({ version: 'v4', auth: authClient });
const response = await sheets.spreadsheets.get({
spreadsheetId,
});
const sheetsData = response.data.sheets ?? [];
const matchedSheets = sheetsData.filter((sheet) => {
const sheetTitle = sheet.properties?.title ?? "";
return exactMatch ? sheetTitle === title : sheetTitle.includes(title);
});
return {
found: matchedSheets.length > 0,
worksheets: matchedSheets ,
};
},
});

View File

@@ -0,0 +1,46 @@
import { createAction, Property } from "@activepieces/pieces-framework";
import { areSheetIdsValid, googleSheetsAuth, googleSheetsCommon, mapRowsToHeaderNames } from "../common/common";
import { commonProps } from "../common/props";
export const getManyRowsAction = createAction({
name: 'get-many-rows',
auth: googleSheetsAuth,
displayName: 'Get Many Rows',
description: 'Get all values from the selected sheet.',
props: {
...commonProps,
first_row_headers: Property.Checkbox({
displayName: 'Does the first row contain headers?',
required: true,
defaultValue: false,
}),
},
async run(context) {
const {first_row_headers,sheetId,spreadsheetId} = context.propsValue;
if (!areSheetIdsValid(spreadsheetId, sheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const rows = await googleSheetsCommon.getGoogleSheetRows({
auth:context.auth,
sheetId: sheetId as number,
spreadsheetId: spreadsheetId as string,
rowIndex_s:undefined,
rowIndex_e:undefined,
headerRow: 1,
});
const useHeaderNames = first_row_headers;
const result = await mapRowsToHeaderNames(
rows,
useHeaderNames,
spreadsheetId as string,
sheetId as number,
1,
context.auth
)
return result
}
})

View File

@@ -0,0 +1,207 @@
import {
PiecePropValueSchema,
Property,
Store,
StoreScope,
createAction,
} from '@activepieces/pieces-framework';
import { googleSheetsAuth } from '../common/common';
import {
areSheetIdsValid,
GoogleSheetsAuthValue,
googleSheetsCommon,
mapRowsToHeaderNames,
} from '../common/common';
import { isNil } from '@activepieces/shared';
import { HttpError } from '@activepieces/pieces-common';
import { z } from 'zod';
import { propsValidation } from '@activepieces/pieces-common';
import { getWorkSheetGridSize } from '../triggers/helpers';
import { commonProps } from '../common/props';
async function getRows(
store: Store,
auth: GoogleSheetsAuthValue,
spreadsheetId: string,
sheetId: number,
memKey: string,
groupSize: number,
startRow: number,
headerRow: number,
useHeaderNames: boolean,
testing: boolean
) {
const sheetGridRange = await getWorkSheetGridSize(auth,spreadsheetId,sheetId);
const existingGridRowCount = sheetGridRange.rowCount ??0;
const memVal = await store.get(memKey, StoreScope.FLOW);
let startingRow;
if (isNil(memVal) || memVal === '') startingRow = startRow || 1;
else {
startingRow = parseInt(memVal as string);
if (isNaN(startingRow)) {
throw Error(
'The value stored in memory key : ' +
memKey +
' is ' +
memVal +
' and it is not a number'
);
}
}
if (startingRow < 1)
throw Error('Starting row : ' + startingRow + ' is less than 1' + memVal);
if(startingRow > existingGridRowCount-1){
return [];
}
const endRow = Math.min(startingRow + groupSize,existingGridRowCount);
if (testing == false) await store.put(memKey, endRow, StoreScope.FLOW);
const row = await googleSheetsCommon.getGoogleSheetRows({
auth,
sheetId: sheetId,
spreadsheetId: spreadsheetId,
rowIndex_s: startingRow,
rowIndex_e: endRow - 1,
headerRow: headerRow,
});
if (row.length == 0) {
const allRows = await googleSheetsCommon.getGoogleSheetRows({
spreadsheetId: spreadsheetId,
auth,
sheetId: sheetId,
rowIndex_s: undefined,
rowIndex_e: undefined,
headerRow: headerRow,
});
const lastRow = allRows.length + 1;
if (testing == false) await store.put(memKey, lastRow, StoreScope.FLOW);
}
const finalRows = await mapRowsToHeaderNames(
row,
useHeaderNames,
spreadsheetId,
sheetId,
headerRow,
auth,
);
return finalRows;
}
const notes = `
**Notes:**
- Memory key is used to remember where last row was processed and will be used in the following runs.
- Republishing the flow **keeps** the memory key value, If you want to start over **change** the memory key.
`
export const getRowsAction = createAction({
auth: googleSheetsAuth,
name: 'get_next_rows',
description: 'Get next group of rows from a Google Sheet',
displayName: 'Get next row(s)',
props: {
...commonProps,
startRow: Property.Number({
displayName: 'Start Row',
description: 'Which row to start from?',
required: true,
defaultValue: 1,
}),
headerRow: Property.Number({
displayName: 'Header Row',
description: 'Which row contains the headers?',
required: true,
defaultValue: 1,
}),
useHeaderNames: Property.Checkbox({
displayName: 'Use header names for keys',
description: 'Map A/B/C… to the actual column headers (row specified above).',
required: false,
defaultValue: false,
}),
markdown: Property.MarkDown({
value: notes
}),
memKey: Property.ShortText({
displayName: 'Memory Key',
description: 'The key used to store the current row number in memory',
required: true,
defaultValue: 'row_number',
}),
groupSize: Property.Number({
displayName: 'Group Size',
description: 'The number of rows to get',
required: true,
defaultValue: 1,
}),
},
async run({ store, auth, propsValue }) {
const { startRow, groupSize, memKey, headerRow, spreadsheetId, sheetId, useHeaderNames} = propsValue;
if (!areSheetIdsValid(spreadsheetId, sheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
await propsValidation.validateZod(propsValue, {
startRow: z.number().min(1),
groupSize: z.number().min(1),
});
try {
return await getRows(
store,
auth,
spreadsheetId as string,
sheetId as number,
memKey,
groupSize,
startRow,
headerRow,
useHeaderNames as boolean,
false
);
} catch (error) {
if (error instanceof HttpError) {
const errorBody = error.response.body as any;
throw new Error(errorBody['error']['message']);
}
throw error;
}
},
async test({ store, auth, propsValue }) {
const { startRow, groupSize, memKey, headerRow, spreadsheetId, sheetId, useHeaderNames} = propsValue;
if (!areSheetIdsValid(spreadsheetId, sheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
try {
return await getRows(
store,
auth,
spreadsheetId as string,
sheetId as number,
memKey,
groupSize,
startRow,
headerRow,
useHeaderNames as boolean,
true
);
} catch (error) {
if (error instanceof HttpError) {
const errorBody = error.response.body as any;
throw new Error(errorBody['error']['message']);
}
throw error;
}
},
});

View File

@@ -0,0 +1,514 @@
import { googleSheetsAuth } from '../common/common';
import {
createAction,
DropdownOption,
DynamicPropsValue,
OAuth2PropertyValue,
Property,
} from '@activepieces/pieces-framework';
import { Dimension, googleSheetsCommon, objectToArray, ValueInputOption,columnToLabel, areSheetIdsValid, GoogleSheetsAuthValue, createGoogleClient } from '../common/common';
import { getWorkSheetName, getWorkSheetGridSize } from '../triggers/helpers';
import { google, sheets_v4 } from 'googleapis';
import { MarkdownVariant } from '@activepieces/shared';
import {parse} from 'csv-parse/sync';
import { commonProps } from '../common/props';
type RowValueType = Record<string, any>
export const insertMultipleRowsAction = createAction({
auth: googleSheetsAuth,
name: 'google-sheets-insert-multiple-rows',
displayName: 'Insert Multiple Rows',
description: 'Add one or more new rows in a specific spreadsheet.',
props: {
...commonProps,
input_type: Property.StaticDropdown({
displayName: 'Rows Input Format',
description: 'Select the format of the input values to be inserted into the sheet.',
required: true,
defaultValue: 'column_names',
options: {
disabled: false,
options: [
{
value: 'csv',
label: 'CSV',
},
{
value: 'json',
label: 'JSON',
},
{
value: 'column_names',
label: 'Column Names',
},
],
},
}),
values: Property.DynamicProperties({
auth: googleSheetsAuth,
displayName: 'Values',
description: 'The values to insert.',
required: true,
refreshers: ['sheetId', 'spreadsheetId', 'input_type', 'headerRow'],
props: async ({ auth, sheetId, spreadsheetId, input_type, headerRow }) => {
const sheet_id = Number(sheetId);
const spreadsheet_id = spreadsheetId as unknown as string;
const valuesInputType = input_type as unknown as string;
if (
!auth ||
(spreadsheet_id ?? '').toString().length === 0 ||
(sheet_id ?? '').toString().length === 0 ||
!['csv', 'json', 'column_names'].includes(valuesInputType)
) {
return {};
}
const fields: DynamicPropsValue = {};
switch (valuesInputType) {
case 'csv':
fields['markdown'] = Property.MarkDown({
value: `Ensure the first row contains column headers that match the sheet's column names.`,
variant: MarkdownVariant.INFO,
});
fields['values'] = Property.LongText({
displayName: 'CSV',
required: true,
});
break;
case 'json':
fields['markdown'] = Property.MarkDown({
value: `Provide values in JSON format. Ensure the column names match the sheet's header.`,
variant: MarkdownVariant.INFO,
});
fields['values'] = Property.Json({
displayName: 'JSON',
required: true,
defaultValue: [
{
column1: 'value1',
column2: 'value2',
},
{
column1: 'value3',
column2: 'value4',
},
],
});
break;
case 'column_names': {
const headers = await googleSheetsCommon.getGoogleSheetRows({
spreadsheetId: spreadsheet_id,
auth: auth,
sheetId: sheet_id,
rowIndex_s: 1,
rowIndex_e: 1,
headerRow: (headerRow as unknown as number) || 1,
});
const firstRow = headers[0].values ?? {};
//check for empty headers
if (Object.keys(firstRow).length === 0) {
fields['markdown'] = Property.MarkDown({
value: `We couldn't find any headers in the selected spreadsheet or worksheet. Please add headers to the sheet and refresh the page to reflect the columns.`,
variant: MarkdownVariant.INFO,
});
} else {
const columns: {
[key: string]: any;
} = {};
for (const key in firstRow) {
columns[key] = Property.ShortText({
displayName: firstRow[key],
description: firstRow[key],
required: false,
defaultValue: '',
});
}
fields['values'] = Property.Array({
displayName: 'Values',
required: false,
properties: columns,
});
}
}
}
return fields;
},
}),
overwrite: Property.Checkbox({
displayName: 'Overwrite Existing Data?',
description:
'Enable this option to replace all existing data in the sheet with new data from your input. This will clear any extra rows beyond the updated range.',
required: false,
defaultValue: false,
}),
check_for_duplicate: Property.Checkbox({
displayName: 'Avoid Duplicates?',
description:
'Enable this option to check for duplicate values before inserting data into the sheet. Only unique rows will be added based on the selected column.',
required: false,
defaultValue: false,
}),
check_for_duplicate_column: Property.DynamicProperties({
auth: googleSheetsAuth,
displayName: 'Duplicate Value Column',
description: 'The column to check for duplicate values.',
refreshers: ['spreadsheetId', 'sheetId', 'check_for_duplicate', 'headerRow'],
required: false,
props: async ({ auth, spreadsheetId, sheetId, check_for_duplicate, headerRow }) => {
const sheet_id = Number(sheetId);
const spreadsheet_id = spreadsheetId as unknown as string;
const checkForExisting = check_for_duplicate as unknown as boolean;
if (
!auth ||
(spreadsheet_id ?? '').toString().length === 0 ||
(sheet_id ?? '').toString().length === 0
) {
return {};
}
const fields: DynamicPropsValue = {};
if (checkForExisting) {
const headers = await googleSheetsCommon.getGoogleSheetRows({
spreadsheetId: spreadsheet_id,
auth: auth as GoogleSheetsAuthValue,
sheetId: sheet_id,
rowIndex_s: 1,
rowIndex_e: 1,
headerRow: (headerRow as unknown as number) || 1,
});
const firstRow = headers[0].values ?? {};
//check for empty headers
if (Object.keys(firstRow).length === 0) {
fields['markdown'] = Property.MarkDown({
value: `No headers were found in the selected spreadsheet or worksheet. Please ensure that headers are added to the sheet and refresh the page to display the available columns.`,
variant: MarkdownVariant.INFO,
});
} else {
const headers: DropdownOption<string>[] = [];
for (const key in firstRow) {
headers.push({ label: firstRow[key].toString(), value: key.toString() });
}
fields['column_name'] = Property.StaticDropdown({
displayName: 'Column to Check for Duplicates',
description:
'Select the column to use for detecting duplicate values. Only rows with unique values in this column will be added to the sheet.',
required: true,
options: {
disabled: false,
options: headers,
},
});
}
}
return fields;
},
}),
as_string: Property.Checkbox({
displayName: 'As String',
description:
'Inserted values that are dates and formulas will be entered as strings and have no effect',
required: false,
}),
headerRow: Property.Number({
displayName: 'Header Row',
description: 'Which row contains the headers?',
required: true,
defaultValue: 1,
}),
},
async run(context) {
const {
spreadsheetId:inputSpreadsheetId,
sheetId:inputSheetId,
input_type: valuesInputType,
overwrite: overwriteValues,
check_for_duplicate: checkForDuplicateValues,
values: { values: rowValuesInput },
as_string: asString,
headerRow,
} = context.propsValue;
if (!areSheetIdsValid(inputSpreadsheetId, inputSheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const sheetId = Number(inputSheetId);
const spreadsheetId = inputSpreadsheetId as string;
const duplicateColumn = context.propsValue.check_for_duplicate_column?.['column_name'];
const sheetName = await getWorkSheetName(context.auth, spreadsheetId, sheetId);
const rowHeaders = await googleSheetsCommon.getGoogleSheetRows({
spreadsheetId: spreadsheetId,
auth: context.auth,
sheetId: sheetId,
rowIndex_s: 1,
rowIndex_e: 1,
headerRow: headerRow,
});
const sheetHeaders = rowHeaders[0]?.values ?? {};
const authClient = await createGoogleClient(context.auth);
const sheets = google.sheets({ version: 'v4', auth: authClient });
const formattedValues = await formatInputRows(sheets,spreadsheetId, sheetName,valuesInputType, rowValuesInput, sheetHeaders);
const valueInputOption = asString ? ValueInputOption.RAW : ValueInputOption.USER_ENTERED;
if (overwriteValues) {
const sheetGridRange = await getWorkSheetGridSize(context.auth, spreadsheetId, sheetId);
const existingGridRowCount = sheetGridRange.rowCount ?? 0;
return handleOverwrite(sheets, spreadsheetId, sheetName, formattedValues, existingGridRowCount, valueInputOption);
}
if (checkForDuplicateValues) {
const existingSheetValues = await googleSheetsCommon.getGoogleSheetRows({
spreadsheetId: spreadsheetId,
auth: context.auth,
sheetId: sheetId,
rowIndex_s: 1,
rowIndex_e: undefined,
headerRow: headerRow,
});
return handleDuplicates(
sheets,
spreadsheetId,
sheetName,
formattedValues,
existingSheetValues,
duplicateColumn,
valueInputOption
);
}
return normalInsert(sheets, spreadsheetId, sheetName, formattedValues, valueInputOption);
},
});
async function handleOverwrite(
sheets: sheets_v4.Sheets,
spreadSheetId: string,
sheetName: string,
formattedValues: any[],
existingGridRowCount: number,
valueInputOption: ValueInputOption
) {
const existingRowCount = existingGridRowCount;
const inputRowCount = formattedValues.length;
const updateResponse = await sheets.spreadsheets.values.batchUpdate({
spreadsheetId: spreadSheetId,
requestBody: {
data: [{
range: `${sheetName}!A2:ZZZ${inputRowCount + 1}`,
majorDimension: Dimension.ROWS,
values: formattedValues.map(row => objectToArray(row)),
}],
valueInputOption
},
});
// Determine if clearing rows is necessary and within grid size
const clearStartRow = inputRowCount + 2; // Start clearing after the last input row
const clearEndRow = Math.max(clearStartRow, existingRowCount);
if (clearStartRow <= existingGridRowCount) {
const boundedClearEndRow = Math.min(clearEndRow, existingGridRowCount);
const clearRowsResponse = await sheets.spreadsheets.values.batchClear({
spreadsheetId: spreadSheetId,
requestBody: {
ranges: [`${sheetName}!A${clearStartRow}:ZZZ${boundedClearEndRow}`],
},
});
return {
...updateResponse.data,
...clearRowsResponse.data,
};
}
return updateResponse.data;
}
async function handleDuplicates(
sheets: sheets_v4.Sheets,
spreadSheetId: string,
sheetName: string,
formattedInputRows: any[],
existingSheetValues: any[],
duplicateColumn: string,
valueInputOption: ValueInputOption
) {
const uniqueValues = formattedInputRows.filter(
(inputRow) => !existingSheetValues.some(
(existingRow) => {
const existingValue = existingRow?.values?.[duplicateColumn];
const inputValue = inputRow?.[duplicateColumn];
return existingValue != null && inputValue != null &&
String(existingValue).toLowerCase().trim() === String(inputValue).toLowerCase().trim();
}
)
);
const response = await sheets.spreadsheets.values.append({
range: sheetName + '!A:A',
spreadsheetId: spreadSheetId,
valueInputOption,
requestBody: {
values: uniqueValues.map((row) => objectToArray(row)),
majorDimension: Dimension.ROWS,
},
});
return response.data;
}
async function normalInsert(
sheets: sheets_v4.Sheets,
spreadSheetId: string,
sheetName: string,
formattedValues: any[],
valueInputOption: ValueInputOption
) {
const response = await sheets.spreadsheets.values.append({
range: sheetName + '!A:A',
spreadsheetId: spreadSheetId,
valueInputOption,
requestBody: {
values: formattedValues.map(row => objectToArray(row)),
majorDimension: Dimension.ROWS,
},
});
return response.data;
}
async function formatInputRows(
sheets: sheets_v4.Sheets,
spreadSheetId: string,
sheetName: string,
valuesInputType: string,
rowValuesInput: any,
sheetHeaders: RowValueType
): Promise<RowValueType[]> {
let formattedInputRows: any[] = [];
switch (valuesInputType) {
case 'csv':
formattedInputRows = convertCsvToRawValues(rowValuesInput as string, ',', sheetHeaders);
break;
case 'json':
formattedInputRows = await convertJsonToRawValues(sheets,spreadSheetId, sheetName, rowValuesInput as string, sheetHeaders);
break;
case 'column_names':
formattedInputRows = rowValuesInput as RowValueType[];
break;
}
return formattedInputRows;
}
async function convertJsonToRawValues(
sheets: sheets_v4.Sheets,
spreadSheetId: string,
sheetName: string,
json: string | Record<string, any>[],
labelHeaders: RowValueType
): Promise<RowValueType[]> {
let data: RowValueType[];
// If the input is a JSON string
if (typeof json === 'string') {
try {
data = JSON.parse(json);
} catch (error) {
throw new Error('Invalid JSON format for row values');
}
} else {
// If the input is already an array of objects, use it directly
data = json;
}
// Ensure the input is an array of objects
if (!Array.isArray(data) || typeof data[0] !== 'object') {
throw new Error('Input must be an array of objects or a valid JSON string representing it.');
}
// Collect all possible headers from the data
const allHeaders = new Set<string>();
data.forEach((row) => {
Object.keys(row).forEach((key) => allHeaders.add(key));
});
// Identify headers not present in labelHeaders
const additionalHeaders = Array.from(allHeaders).filter(
(header) => !Object.values(labelHeaders).includes(header)
);
//add missing headers to labelHeaders
additionalHeaders.forEach((header) => {
labelHeaders[columnToLabel(Object.keys(labelHeaders).length)] = header;
});
// update sheets with new headers
if (additionalHeaders.length > 0) {
await sheets.spreadsheets.values.update({
range: `${sheetName}!A1:ZZZ1`,
spreadsheetId: spreadSheetId,
valueInputOption: ValueInputOption.USER_ENTERED,
requestBody: {
majorDimension:Dimension.ROWS,
values: [objectToArray(labelHeaders)]
}
});
}
return data.map((row: RowValueType) => {
return Object.entries(labelHeaders).reduce((acc, [labelColumn, csvHeader]) => {
acc[labelColumn] = row[csvHeader] ?? "";
return acc;
}, {} as RowValueType);
})
}
function convertCsvToRawValues(
csvText: string,
delimiter: string,
labelHeaders: RowValueType,
) {
// Split CSV into rows
const rows:Record<string,any>[] = parse(csvText,{delimiter: delimiter, columns: true});
const result = rows.map((row)=>{
// Normalize record keys to lowercase
const normalizedRow = Object.keys(row).reduce((acc, key) => {
acc[key.toLowerCase().trim()] = row[key];
return acc;
},{} as Record<string,any>);
const transformedRow :Record<string,any>= {};
for(const key in labelHeaders){
// Match labels to normalized keys
const normalizedKey = labelHeaders[key].toLowerCase();
transformedRow[key] = normalizedRow[normalizedKey] || '';
}
return transformedRow;
})
return result;
}

View File

@@ -0,0 +1,107 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
areSheetIdsValid,
Dimension,
getAccessToken,
GoogleSheetsAuthValue,
googleSheetsCommon,
objectToArray,
stringifyArray,
ValueInputOption,
} from '../common/common';
import { googleSheetsAuth } from '../common/common';
import { isNil } from '@activepieces/shared';
import { AuthenticationType, httpClient, HttpMethod, HttpRequest } from '@activepieces/pieces-common';
import { commonProps, rowValuesProp } from '../common/props';
export const insertRowAction = createAction({
auth: googleSheetsAuth,
name: 'insert_row',
description: 'Append a row of values to an existing sheet',
displayName: 'Insert Row',
props: {
...commonProps,
as_string: Property.Checkbox({
displayName: 'As String',
description: 'Inserted values that are dates and formulas will be entered strings and have no effect',
required: false,
}),
first_row_headers: Property.Checkbox({
displayName: 'Does the first row contain headers?',
description: 'If the first row is headers',
required: true,
defaultValue: false,
}),
values: rowValuesProp(),
},
async run({ propsValue, auth }) {
const { values, spreadsheetId:inputSpreadsheetId, sheetId:inputSheetId, as_string, first_row_headers } = propsValue;
if (!areSheetIdsValid(inputSpreadsheetId, inputSheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const sheetId = Number(inputSheetId);
const spreadsheetId = inputSpreadsheetId as string;
const sheetName = await googleSheetsCommon.findSheetName(
auth,
spreadsheetId,
sheetId
);
const formattedValues = first_row_headers
? objectToArray(values).map(val => isNil(val) ? '' : val)
: values.values;
const res = await appendGoogleSheetValues({
auth,
majorDimension: Dimension.COLUMNS,
range: sheetName,
spreadSheetId: spreadsheetId,
valueInputOption: as_string ? ValueInputOption.RAW : ValueInputOption.USER_ENTERED,
values: stringifyArray(formattedValues),
});
const updatedRowNumber = extractRowNumber(res.body.updates.updatedRange);
return { ...res.body, row: updatedRowNumber };
},
});
function extractRowNumber(updatedRange: string): number {
const rowRange = updatedRange.split('!')[1];
return parseInt(rowRange.split(':')[0].substring(1), 10);
}
async function appendGoogleSheetValues(params: AppendGoogleSheetValuesParams) {
const { auth, majorDimension, range, spreadSheetId, valueInputOption, values } = params;
const accessToken = await getAccessToken(auth);
const request: HttpRequest = {
method: HttpMethod.POST,
url: `https://sheets.googleapis.com/v4/spreadsheets/${spreadSheetId}/values/${encodeURIComponent(`${range}!A:A`)}:append`,
body: {
majorDimension,
range: `${range}!A:A`,
values: values.map(val => ({ values: val })),
},
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: accessToken,
},
queryParams: {
valueInputOption,
},
};
return httpClient.sendRequest(request);
}
type AppendGoogleSheetValuesParams = {
values: string[];
spreadSheetId: string;
range: string;
valueInputOption: ValueInputOption;
majorDimension: Dimension;
auth: GoogleSheetsAuthValue;
};

View File

@@ -0,0 +1,164 @@
import { googleSheetsAuth } from '../common/common';
import {
createAction,
DynamicPropsValue,
OAuth2PropertyValue,
Property,
} from '@activepieces/pieces-framework';
import { areSheetIdsValid, createGoogleClient, Dimension, GoogleSheetsAuthValue, googleSheetsCommon, objectToArray, ValueInputOption } from '../common/common';
import { getAccessTokenOrThrow } from '@activepieces/pieces-common';
import { isNil, isString, MarkdownVariant } from '@activepieces/shared';
import { getWorkSheetName } from '../triggers/helpers';
import { google, sheets_v4 } from 'googleapis';
import { OAuth2Client } from 'googleapis-common';
import { commonProps } from '../common/props';
export const updateMultipleRowsAction = createAction({
auth: googleSheetsAuth,
name: 'update-multiple-rows',
displayName: 'Update Multiple Rows',
description: 'Updates multiple rows in a specific spreadsheet.',
props: {
...commonProps,
values: Property.DynamicProperties({
auth: googleSheetsAuth,
displayName: 'Values',
description: 'The values to update.',
required: true,
refreshers: ['sheetId', 'spreadsheetId', 'headerRow'],
props: async ({ auth, spreadsheetId, sheetId, headerRow }) => {
const sheet_Id = Number(sheetId);
const spreadsheet_Id = spreadsheetId as unknown as string;
const authentication = auth;
if (
!auth ||
(spreadsheet_Id ?? '').toString().length === 0 ||
(sheet_Id ?? '').toString().length === 0
) {
return {};
}
const fields: DynamicPropsValue = {};
const headers = await googleSheetsCommon.getGoogleSheetRows({
spreadsheetId: spreadsheet_Id,
auth: auth as GoogleSheetsAuthValue,
sheetId: sheet_Id,
rowIndex_s: 1,
rowIndex_e: 1,
headerRow: (headerRow as unknown as number) || 1,
});
const firstRow = headers[0].values ?? {};
//check for empty headers
if (Object.keys(firstRow).length === 0) {
fields['markdown'] = Property.MarkDown({
value: `We couldn't find any headers in the selected spreadsheet or worksheet. Please add headers to the sheet and refresh the page to reflect the columns.`,
variant: MarkdownVariant.INFO,
});
} else {
const columns: {
[key: string]: any;
} = {
rowId: Property.Number({
displayName: 'Row Id',
description: 'The row id to update',
required: true,
}),
};
for (const key in firstRow) {
columns[key] = Property.ShortText({
displayName: firstRow[key].toString(),
description: firstRow[key].toString(),
required: false,
defaultValue: '',
});
}
fields['values'] = Property.Array({
displayName: 'Values',
required: false,
properties: columns,
});
}
return fields;
},
}),
as_string: Property.Checkbox({
displayName: 'As String',
description:
'Inserted values that are dates and formulas will be entered as strings and have no effect',
required: false,
}),
headerRow: Property.Number({
displayName: 'Header Row',
description: 'Which row contains the headers?',
required: true,
defaultValue: 1,
}),
},
async run(context) {
const {
spreadsheetId:inputSpreadsheetId,
sheetId:inputSheetId,
values: { values: rowValuesInput },
as_string: asString,
headerRow,
} = context.propsValue;
if (!areSheetIdsValid(inputSpreadsheetId, inputSheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const sheetId = Number(inputSheetId);
const spreadsheetId = inputSpreadsheetId as string;
const sheetName = await getWorkSheetName(context.auth, spreadsheetId, sheetId);
const valueInputOption = asString ? ValueInputOption.RAW : ValueInputOption.USER_ENTERED;
const authClient = await createGoogleClient(context.auth);
const sheets = google.sheets({ version: 'v4', auth: authClient });
const values: sheets_v4.Schema$ValueRange[] = [];
for (const row of rowValuesInput) {
const { rowId, ...rowValues } = row;
if (rowId === undefined || rowId === null) {
continue;
}
const formattedValues = objectToArray(rowValues).map((value: string | null | undefined) => {
if (value === '' || value === null || value === undefined) {
return null;
}
if (isString(value)) {
return value;
}
return JSON.stringify(value, null, 2);
});
if (formattedValues.length === 0) {
continue;
}
values.push({
range: `${sheetName}!A${rowId}:ZZZ${rowId}`,
majorDimension: Dimension.ROWS,
values: [formattedValues],
});
}
const response = await sheets.spreadsheets.values.batchUpdate({
spreadsheetId: spreadsheetId,
requestBody: {
valueInputOption: valueInputOption,
data: values,
},
});
return response.data;
},
});

View File

@@ -0,0 +1,98 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { areSheetIdsValid, createGoogleClient, Dimension, objectToArray, ValueInputOption } from '../common/common';
import { googleSheetsAuth } from '../common/common';
import { getWorkSheetName } from '../triggers/helpers';
import { google } from 'googleapis';
import { isString } from '@activepieces/shared';
import { commonProps, rowValuesProp } from '../common/props';
export const updateRowAction = createAction({
auth: googleSheetsAuth,
name: 'update_row',
description: 'Overwrite values in an existing row',
displayName: 'Update Row',
props: {
...commonProps,
row_id: Property.Number({
displayName: 'Row Number',
description: 'The row number to update',
required: true,
}),
first_row_headers: Property.Checkbox({
displayName: 'Does the first row contain headers?',
description: 'If the first row is headers',
required: true,
defaultValue: false,
}),
values: rowValuesProp(),
},
async run(context) {
const inputSpreadsheetId = context.propsValue.spreadsheetId;
const inputSheetId = context.propsValue.sheetId;
const rowId = context.propsValue.row_id;
const isFirstRowHeaders = context.propsValue.first_row_headers;
const rowValuesInput = context.propsValue.values;
if (!areSheetIdsValid(inputSpreadsheetId, inputSheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const sheetId = Number(inputSheetId);
const spreadsheetId = inputSpreadsheetId as string;
const authClient = await createGoogleClient(context.auth);
const sheets = google.sheets({ version: 'v4', auth: authClient });
const sheetName = await getWorkSheetName(
context.auth,
spreadsheetId,
sheetId
);
// replace empty string with null to skip the cell value
const formattedValues = (
isFirstRowHeaders
? objectToArray(rowValuesInput)
: rowValuesInput['values']
).map((value: string | null | undefined) => {
if (value === '' || value === null || value === undefined) {
return null;
}
if (isString(value)) {
return value;
}
return JSON.stringify(value, null, 2);
});
if (formattedValues.length > 0) {
const response = await sheets.spreadsheets.values.update({
range: `${sheetName}!A${rowId}:ZZZ${rowId}`,
spreadsheetId: spreadsheetId,
valueInputOption: ValueInputOption.USER_ENTERED,
requestBody: {
values: [formattedValues],
majorDimension: Dimension.ROWS,
},
});
//Split the updatedRange string to extract the row number
const updatedRangeParts = response.data.updatedRange?.split(
'!'
);
const updatedRowRange = updatedRangeParts?.[1];
const updatedRowNumber = parseInt(
updatedRowRange?.split(':')[0].substring(1) ?? '0',
10
);
return { updates: { ...response.data }, row: updatedRowNumber };
} else {
throw Error(
'Values passed are empty or not array ' +
JSON.stringify(formattedValues)
);
}
},
});

View File

@@ -0,0 +1,383 @@
import { AppConnectionValueForAuthProperty, OAuth2PropertyValue, OAuth2Props, PieceAuth, PiecePropValueSchema, Property, ShortTextProperty, StaticPropsValue } from '@activepieces/pieces-framework';
import {
httpClient,
HttpMethod,
AuthenticationType,
HttpRequest,
} from '@activepieces/pieces-common';
import { AppConnectionType, isNil, isString } from '@activepieces/shared';
import { google } from 'googleapis';
import { OAuth2Client } from 'googleapis-common';
import { mapRowsToColumnLabels } from '../triggers/helpers';
export type GoogleSheetsAuthValue = AppConnectionValueForAuthProperty<typeof googleSheetsAuth>
export const googleSheetsCommon = {
baseUrl: 'https://sheets.googleapis.com/v4/spreadsheets',
getGoogleSheetRows,
findSheetName,
deleteRow,
clearSheet,
getHeaderRow,
};
export async function findSheetName(
auth: GoogleSheetsAuthValue,
spreadsheetId: string,
sheetId: string | number,
) {
const sheets = await listSheetsName(auth, spreadsheetId);
const sheetName = sheets.find((f) => f.properties.sheetId == sheetId)?.properties.title;
if (!sheetName) {
throw Error(`Sheet with ID ${sheetId} not found in spreadsheet ${spreadsheetId}`);
}
return sheetName;
}
async function listSheetsName(auth: GoogleSheetsAuthValue, spreadsheet_id: string) {
return (
await httpClient.sendRequest<{
sheets: { properties: { title: string; sheetId: number } }[];
}>({
method: HttpMethod.GET,
url: `https://sheets.googleapis.com/v4/spreadsheets/` + spreadsheet_id,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: await getAccessToken(auth),
},
})
).body.sheets;
}
type GetGoogleSheetRowsProps = {
spreadsheetId: string;
auth: GoogleSheetsAuthValue;
sheetId: number;
rowIndex_s: number | undefined;
rowIndex_e: number | undefined;
headerRow?: number;
};
async function getGoogleSheetRows({
spreadsheetId,
auth,
sheetId,
rowIndex_s,
rowIndex_e,
headerRow = 1,
}: GetGoogleSheetRowsProps): Promise<{ row: number; values: { [x: string]: string } }[]> {
const sheetName = await findSheetName(auth, spreadsheetId, sheetId);
if (!sheetName) {
return [];
}
let range = '';
if (rowIndex_s !== undefined) {
range = `!A${rowIndex_s}:ZZZ`;
}
if (rowIndex_s !== undefined && rowIndex_e !== undefined) {
range = `!A${rowIndex_s}:ZZZ${rowIndex_e}`;
}
const rowsResponse = await httpClient.sendRequest<{ values: [string[]][] }>({
method: HttpMethod.GET,
url: `${googleSheetsCommon.baseUrl}/${spreadsheetId}/values/${encodeURIComponent(`${sheetName}${range}`)}`,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: await getAccessToken(auth),
},
});
if (rowsResponse.body.values === undefined) return [];
const headerResponse = await httpClient.sendRequest<{ values: [string[]][] }>({
method: HttpMethod.GET,
url: `${googleSheetsCommon.baseUrl}/${spreadsheetId}/values/${encodeURIComponent(`${sheetName}!A${headerRow}:ZZZ${headerRow}`)}`,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: await getAccessToken(auth),
},
});
if (!headerResponse.body.values) {
throw new Error(`Unable to read headers from row ${headerRow} in sheet "${sheetName}". The row appears to be empty or inaccessible.`);
}
const headers = headerResponse.body.values[0] ?? [];
const headerCount = headers.length;
const startingRow = rowIndex_s ? rowIndex_s - 1 : 0;
const labeledRowValues = mapRowsToColumnLabels(
rowsResponse.body.values,
startingRow,
headerCount,
);
return labeledRowValues;
}
type GetHeaderRowProps = {
spreadsheetId: string;
auth: GoogleSheetsAuthValue;
sheetId: number;
};
export async function getHeaderRow({
spreadsheetId,
auth,
sheetId,
}: GetHeaderRowProps): Promise<string[] | undefined> {
const rows = await getGoogleSheetRows({
spreadsheetId,
auth,
sheetId,
rowIndex_s: 1,
rowIndex_e: 1,
headerRow: 1,
});
if (rows.length === 0) {
return undefined;
}
return objectToArray(rows[0].values);
}
export const columnToLabel = (columnIndex: number) => {
const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
let label = '';
while (columnIndex >= 0) {
label = alphabet[columnIndex % 26] + label;
columnIndex = Math.floor(columnIndex / 26) - 1;
}
return label;
};
export const labelToColumn = (label: string) => {
const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
let column = 0;
for (let i = 0; i < label.length; i++) {
column += (alphabet.indexOf(label[i]) + 1) * Math.pow(26, label.length - i - 1);
}
return column - 1;
};
export function objectToArray(obj: { [x: string]: any }) {
const maxIndex = Math.max(...Object.keys(obj).map((key) => labelToColumn(key)));
const arr = new Array(maxIndex + 1);
for (const key in obj) {
arr[labelToColumn(key)] = obj[key];
}
return arr;
}
export function stringifyArray(object: unknown[]): string[] {
return object.map((val) => {
if (isString(val)) {
return val;
}
return JSON.stringify(val);
});
}
export async function mapRowsToHeaderNames(
rows:any[],
useHeaderNames: boolean,
spreadsheetId: string,
sheetId: number,
headerRow: number,
auth: GoogleSheetsAuthValue,
): Promise<any[]> {
if (!useHeaderNames) {
return rows;
}
const headerRows = await getGoogleSheetRows({
spreadsheetId,
auth,
sheetId,
rowIndex_s: headerRow,
rowIndex_e: headerRow,
});
if (headerRows.length === 0) {
return rows;
}
const headers = Object.values(headerRows[0].values);
if (headers.length === 0) {
return rows;
}
// map rows to use header names as keys instead of column letters
return rows.map(row => {
const newValues: Record<string, any> = {};
Object.keys(row.values).forEach((columnLetter) => {
const columnIndex = labelToColumn(columnLetter);
const headerName = headers[columnIndex];
if (headerName) {
newValues[headerName] = row.values[columnLetter];
}
else{
newValues[columnLetter] = row.values[columnLetter];
}
});
return { ...row, values: newValues };
});
}
async function deleteRow(
spreadsheetId: string,
sheetId: number,
rowIndex: number,
auth: GoogleSheetsAuthValue,
) {
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${googleSheetsCommon.baseUrl}/${spreadsheetId}/:batchUpdate`,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: await getAccessToken(auth),
},
body: {
requests: [
{
deleteDimension: {
range: {
sheetId: sheetId,
dimension: 'ROWS',
startIndex: rowIndex,
endIndex: rowIndex + 1,
},
},
},
],
},
};
await httpClient.sendRequest(request);
}
async function clearSheet(
spreadsheetId: string,
sheetId: number,
auth: GoogleSheetsAuthValue,
rowIndex: number,
numOfRows: number,
) {
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${googleSheetsCommon.baseUrl}/${spreadsheetId}/:batchUpdate`,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: await getAccessToken(auth),
},
body: {
requests: [
{
deleteDimension: {
range: {
sheetId: sheetId,
dimension: 'ROWS',
startIndex: rowIndex,
endIndex: rowIndex + numOfRows + 1,
},
},
},
],
},
};
return await httpClient.sendRequest(request);
}
export enum ValueInputOption {
RAW = 'RAW',
USER_ENTERED = 'USER_ENTERED',
}
export enum Dimension {
ROWS = 'ROWS',
COLUMNS = 'COLUMNS',
}
export async function createGoogleClient(auth: GoogleSheetsAuthValue): Promise<OAuth2Client> {
if(auth.type === AppConnectionType.CUSTOM_AUTH)
{
const serviceAccount = JSON.parse(auth.props.serviceAccount);
return new google.auth.JWT({
email: serviceAccount.client_email,
key: serviceAccount.private_key,
scopes: googleSheetsScopes,
subject: auth.props.userEmail,
});
}
const authClient = new OAuth2Client();
authClient.setCredentials(auth);
return authClient;
}
export const getAccessToken = async (auth: GoogleSheetsAuthValue): Promise<string> => {
if(auth.type === AppConnectionType.CUSTOM_AUTH)
{
const googleClient = await createGoogleClient(auth);
const response = await googleClient.getAccessToken();
if(response.token)
{
return response.token;
}
else {
throw new Error('Could not retrieve access token from service account json');
}
}
return auth.access_token;
}
export function areSheetIdsValid(spreadsheetId: string | null | undefined, sheetId: string | number | null | undefined): boolean {
return !isNil(spreadsheetId) && spreadsheetId !== "" &&
!isNil(sheetId) && sheetId !== "";
}
export const googleSheetsScopes = [
'https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive.readonly',
'https://www.googleapis.com/auth/drive',
]
export const googleSheetsAuth =[PieceAuth.OAuth2({
description: '',
authUrl: 'https://accounts.google.com/o/oauth2/auth',
tokenUrl: 'https://oauth2.googleapis.com/token',
required: true,
scope:googleSheetsScopes ,
}), PieceAuth.CustomAuth({
displayName: 'Service Account (Advanced)',
description: 'Authenticate via service account from https://console.cloud.google.com/ > IAM & Admin > Service Accounts > Create Service Account > Keys > Add key. <br> <br> You can optionally use domain-wide delegation (https://support.google.com/a/answer/162106?hl=en#zippy=%2Cset-up-domain-wide-delegation-for-a-client) to access spreadsheets without adding the service account to each one. <br> <br> **Note:** Without a user email, the service account only has access to files/folders you explicitly share with it.',
required: true,
props: {
serviceAccount: Property.ShortText({
displayName: 'Service Account JSON Key',
required: true,
}
) ,
userEmail: Property.ShortText({
displayName: 'User Email',
required: false,
description: 'Email address of the user to impersonate for domain-wide delegation.',
}),},
validate: async ({auth})=>{
try{
await getAccessToken({
type: AppConnectionType.CUSTOM_AUTH,
props: {...auth}
});
}catch(e){
return {
valid: false,
error: (e as Error).message,
};
}
return {
valid: true,
};
}
})];

View File

@@ -0,0 +1,259 @@
import { DropdownOption, Property } from '@activepieces/pieces-framework';
import { google, drive_v3 } from 'googleapis';
import { columnToLabel, createGoogleClient, getHeaderRow, googleSheetsAuth, GoogleSheetsAuthValue, googleSheetsCommon } from './common';
import { isNil } from '@activepieces/shared';
export const includeTeamDrivesProp = () =>
Property.Checkbox({
displayName: 'Include Team Drive Sheets ?',
description: 'Determines if sheets from Team Drives should be included in the results.',
defaultValue: false,
required: false,
});
export const spreadsheetIdProp = (displayName: string, description: string, required = true) =>
Property.Dropdown({
displayName,
description,
auth: googleSheetsAuth,
required,
refreshers: ['includeTeamDrives'],
options: async ({ auth, includeTeamDrives }, { searchValue }) => {
if (!auth) {
return {
disabled: true,
options: [],
placeholder: 'Please authenticate first',
};
}
const authValue = auth;
const authClient = await createGoogleClient(authValue);
const drive = google.drive({ version: 'v3', auth: authClient });
const q = ["mimeType='application/vnd.google-apps.spreadsheet'", 'trashed = false'];
if (searchValue) {
q.push(`name contains '${searchValue}'`);
}
let nextPageToken;
const options: DropdownOption<string>[] = [];
do {
const response: any = await drive.files.list({
q: q.join(' and '),
pageToken: nextPageToken,
orderBy: 'createdTime desc',
fields: 'nextPageToken, files(id, name)',
supportsAllDrives: true,
includeItemsFromAllDrives: includeTeamDrives ? true : false,
});
const fileList: drive_v3.Schema$FileList = response.data;
if (fileList.files) {
for (const file of fileList.files) {
options.push({
label: file.name!,
value: file.id!,
});
}
}
nextPageToken = response.data.nextPageToken;
} while (nextPageToken);
return {
disabled: false,
options,
};
},
});
export const sheetIdProp = (displayName: string, description: string, required = true) =>
Property.Dropdown({
displayName,
description,
auth: googleSheetsAuth,
required,
refreshers: ['spreadsheetId'],
options: async ({ auth, spreadsheetId }) => {
if (!auth || (spreadsheetId ?? '').toString().length === 0) {
return {
disabled: true,
options: [],
placeholder: 'Please select a spreadsheet first.',
};
}
const authValue = auth as GoogleSheetsAuthValue;
const authClient = await createGoogleClient(authValue);
const sheets = google.sheets({ version: 'v4', auth: authClient });
const response = await sheets.spreadsheets.get({
spreadsheetId: spreadsheetId as unknown as string,
});
const sheetsData = response.data.sheets ?? [];
const options: DropdownOption<number>[] = [];
for (const sheet of sheetsData) {
const title = sheet.properties?.title;
const sheetId = sheet.properties?.sheetId;
if(isNil(title) || isNil(sheetId)){
continue;
}
options.push({
label: title,
value: sheetId,
});
}
return {
disabled: false,
options,
};
},
});
export const commonProps = {
includeTeamDrives: includeTeamDrivesProp(),
spreadsheetId: spreadsheetIdProp('Spreadsheet', 'The ID of the spreadsheet to use.'),
sheetId: sheetIdProp('Sheet', 'The ID of the sheet to use.'),
};
export const rowValuesProp = () =>
Property.DynamicProperties({
displayName: 'Values',
description: 'The values to insert',
required: true,
auth: googleSheetsAuth,
refreshers: ['sheetId', 'spreadsheetId', 'first_row_headers'],
props: async ({ auth, spreadsheetId, sheetId, first_row_headers }) => {
if (
!auth ||
(spreadsheetId ?? '').toString().length === 0 ||
(sheetId ?? '').toString().length === 0
) {
return {};
}
const sheet_id = Number(sheetId);
const authValue = auth as GoogleSheetsAuthValue;
const headers = await googleSheetsCommon.getHeaderRow({
spreadsheetId: spreadsheetId as unknown as string,
auth: authValue,
sheetId: sheet_id,
});
if (!first_row_headers) {
return {
values: Property.Array({
displayName: 'Values',
required: true,
}),
};
}
const firstRow = headers ?? [];
const properties: {
[key: string]: any;
} = {};
for (let i = 0; i < firstRow.length; i++) {
const label = columnToLabel(i);
properties[label] = Property.ShortText({
displayName: firstRow[i].toString(),
description: firstRow[i].toString(),
required: false,
defaultValue: '',
});
}
return properties;
},
});
export const columnNameProp = () =>
Property.Dropdown<string,true,typeof googleSheetsAuth>({
description: 'Column Name',
displayName: 'The name of the column to search in',
required: true,
auth: googleSheetsAuth,
refreshers: ['sheetId', 'spreadsheetId'],
options: async ({ auth, spreadsheetId, sheetId }) => {
const spreadsheet_id = spreadsheetId as string;
const sheet_id = Number(sheetId) as number;
if (
!auth ||
(spreadsheet_id ?? '').toString().length === 0 ||
(sheet_id ?? '').toString().length === 0
) {
return {
disabled: true,
options: [],
placeholder: 'Please select a sheet first',
};
}
const sheetName = await googleSheetsCommon.findSheetName(
auth,
spreadsheet_id,
sheet_id,
);
if (!sheetName) {
throw Error('Sheet not found in spreadsheet');
}
const headers = await getHeaderRow({
spreadsheetId: spreadsheet_id,
auth,
sheetId: sheet_id,
});
const ret = [];
const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
if (isNil(headers)) {
return {
options: [],
disabled: false,
};
}
if (headers.length === 0) {
const columnSize = headers.length;
for (let i = 0; i < columnSize; i++) {
ret.push({
label: alphabet[i].toUpperCase(),
value: alphabet[i],
});
}
} else {
let index = 0;
for (let i = 0; i < headers.length; i++) {
let value = 'A';
if (index >= alphabet.length) {
// if the index is greater than the length of the alphabet, we need to add another letter
const firstLetter = alphabet[Math.floor(index / alphabet.length) - 1];
const secondLetter = alphabet[index % alphabet.length];
value = firstLetter + secondLetter;
} else {
value = alphabet[index];
}
ret.push({
label: headers[i].toString(),
value: value,
});
index++;
}
}
return {
options: ret,
disabled: false,
};
},
});

View File

@@ -0,0 +1,155 @@
import { google } from 'googleapis';
import { nanoid } from 'nanoid';
import dayjs from 'dayjs';
import crypto from 'crypto';
import { columnToLabel, createGoogleClient, GoogleSheetsAuthValue } from '../common/common';
import { isNil } from '@activepieces/shared';
export async function getWorkSheetName(
auth: GoogleSheetsAuthValue,
spreadSheetId: string,
sheetId: number,
) {
const authClient = await createGoogleClient(auth);
const sheets = google.sheets({ version: 'v4', auth: authClient });
const res = await sheets.spreadsheets.get({ spreadsheetId: spreadSheetId });
const sheetName = res.data.sheets?.find((f) => f.properties?.sheetId == sheetId)?.properties
?.title;
if (!sheetName) {
throw Error(`Sheet with ID ${sheetId} not found in spreadsheet ${spreadSheetId}`);
}
return sheetName;
}
export async function getWorkSheetGridSize(
auth: GoogleSheetsAuthValue,
spreadSheetId: string,
sheetId: number,
) {
const authClient = await createGoogleClient(auth);
const sheets = google.sheets({ version: 'v4', auth: authClient });
const res = await sheets.spreadsheets.get({ spreadsheetId: spreadSheetId, includeGridData: true, fields: 'sheets.properties(sheetId,title,sheetType,gridProperties)' });
const sheetRange = res.data.sheets?.find((f) => f.properties?.sheetId == sheetId)?.properties?.gridProperties;
if (!sheetRange) {
throw Error(`Unable to get grid size for sheet ${sheetId} in spreadsheet ${spreadSheetId}`);
}
return sheetRange
}
export async function getWorkSheetValues(
auth: GoogleSheetsAuthValue,
spreadsheetId: string,
range?: string,
) {
const authClient = await createGoogleClient(auth);
const sheets = google.sheets({ version: 'v4', auth: authClient });
const res = await sheets.spreadsheets.values.get({
spreadsheetId: spreadsheetId,
range: range,
});
return res.data.values ?? [];
}
export async function createFileNotification(
auth: GoogleSheetsAuthValue,
fileId: string,
url: string,
includeTeamDrives?: boolean,
) {
const authClient = await createGoogleClient(auth);
const drive = google.drive({ version: 'v3', auth: authClient });
// create unique UUID for channel
const channelId = nanoid();
return await drive.files.watch({
fileId: fileId,
supportsAllDrives: includeTeamDrives,
requestBody: {
id: channelId,
expiration: (dayjs().add(6, 'day').unix() * 1000).toString(),
type: 'web_hook',
address: url,
},
});
}
export async function deleteFileNotification(
auth: GoogleSheetsAuthValue,
channelId: string,
resourceId: string,
) {
const authClient = await createGoogleClient(auth);
const drive = google.drive({ version: 'v3', auth: authClient });
return await drive.channels.stop({
requestBody: {
id: channelId,
resourceId: resourceId,
},
});
}
export function isSyncMessage(headers: Record<string, string>) {
return headers['x-goog-resource-state'] === 'sync';
}
export function isChangeContentMessage(headers: Record<string, string>) {
// https://developers.google.com/drive/api/guides/push#respond-to-notifications
return (
headers['x-goog-resource-state'] === 'update' &&
['content', 'properties', 'content,properties'].includes(headers['x-goog-changed'])
);
}
export function hashObject(obj: Record<string, unknown>): string {
const hash = crypto.createHash('sha256');
hash.update(JSON.stringify(obj));
return hash.digest('hex');
}
// returns an array of row number and cells values mapped to column labels
export function mapRowsToColumnLabels(rowValues: any[][], oldRowCount: number, headerCount: number) {
const result = [];
for (let i = 0; i < rowValues.length; i++) {
const values: Record<string, string> = {};
for (let j = 0; j < Math.max(headerCount, rowValues[i].length); j++) {
const columnLabel = columnToLabel(j);
if (isNil(rowValues[i][j])) {
values[columnLabel] = "";
} else if (typeof rowValues[i][j] === "string") {
values[columnLabel] = rowValues[i][j];
}
else if ('toString' in rowValues[i][j]) {
values[columnLabel] = rowValues[i][j].toString();
}
else {
values[columnLabel] = `${rowValues[i][j]}`;
}
}
result.push({
row: oldRowCount + i + 1,
values,
});
}
return result;
}
export interface WebhookInformation {
kind?: string | null;
id?: string | null;
resourceId?: string | null;
resourceUri?: string | null;
expiration?: string | null;
}

View File

@@ -0,0 +1,299 @@
import { isNil } from '@activepieces/shared';
import { googleSheetsAuth } from '../common/common';
import { areSheetIdsValid, columnToLabel, GoogleSheetsAuthValue, labelToColumn } from '../common/common';
import {
createFileNotification,
deleteFileNotification,
getWorkSheetName,
getWorkSheetValues,
hashObject,
isChangeContentMessage,
isSyncMessage,
mapRowsToColumnLabels,
WebhookInformation,
} from './helpers';
import {
createTrigger,
TriggerStrategy,
DEDUPE_KEY_PROPERTY,
WebhookRenewStrategy,
Property,
DropdownOption,
} from '@activepieces/pieces-framework';
import crypto from 'crypto';
import { commonProps } from '../common/props';
const ALL_COLUMNS = 'all_columns';
export const newOrUpdatedRowTrigger = createTrigger({
auth: googleSheetsAuth,
name: 'google-sheets-new-or-updated-row',
displayName: 'New or Updated Row',
description: 'Triggers when a new row is added or modified in a spreadsheet.',
props: {
info: Property.MarkDown({
value:
'Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.',
}),
...commonProps,
trigger_column: Property.Dropdown({
auth: googleSheetsAuth,
displayName: 'Trigger Column',
description: `Trigger on changes to cells in this column only. \nSelect **Any Column** if you want the flow to trigger on changes to any cell within the row.`,
required: false,
refreshers: ['spreadsheetId', 'sheetId'],
defaultValue: ALL_COLUMNS,
options: async ({ auth, spreadsheetId, sheetId }) => {
if (!auth || !spreadsheetId || isNil(sheetId)) {
return {
disabled: true,
options: [],
placeholder: `Please select sheet first`,
};
}
const spreadsheet_id = spreadsheetId as string;
const sheet_id = sheetId as number;
const sheetName = await getWorkSheetName(auth, spreadsheet_id, sheet_id);
const firstRowValues = await getWorkSheetValues(
auth,
spreadsheet_id,
`${sheetName}!1:1`,
);
const headers = firstRowValues[0] ?? [];
const headerCount = headers.length;
const labeledRowValues = mapRowsToColumnLabels(firstRowValues, 0, headerCount);
const labledHeaders = labeledRowValues.length > 0 ? labeledRowValues[0].values : {};
const options = Object.entries(labledHeaders).reduce((accumlator:DropdownOption<string>[],[key,value]) => {
accumlator.push({ label: value as string, value: key });
return accumlator;
}, [{ label: 'Any Column', value: ALL_COLUMNS }]);
return {
disabled: options.length === 0,
options,
};
},
}),
},
renewConfiguration: {
strategy: WebhookRenewStrategy.CRON,
cronExpression: '0 */12 * * *',
},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const inputSpreadsheetId = context.propsValue.spreadsheetId;
const inputSheetId = context.propsValue.sheetId;
const triggerColumn = context.propsValue.trigger_column ?? ALL_COLUMNS;
if (!areSheetIdsValid(inputSpreadsheetId, inputSheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const sheetId = Number(inputSheetId);
const spreadsheetId = inputSpreadsheetId as string;
const sheetName = await getWorkSheetName(context.auth, spreadsheetId, sheetId);
const sheetValues = await getWorkSheetValues(context.auth, spreadsheetId, sheetName);
const rowHashes = [];
// create initial row level hashes and used it to check updated row
for (const row of sheetValues) {
let targetValue;
if (triggerColumn === ALL_COLUMNS) {
targetValue = row;
} else {
const currentTriggerColumnValue = row[labelToColumn(triggerColumn)];
targetValue =
currentTriggerColumnValue !== undefined && currentTriggerColumnValue !== '' // if column value is empty
? [currentTriggerColumnValue]
: [];
}
const rowHash = crypto.createHash('md5').update(JSON.stringify(targetValue)).digest('hex');
rowHashes.push(rowHash);
}
// store compressed values
await context.store.put(`${sheetId}`, rowHashes);
// create file watch notification
const fileNotificationRes = await createFileNotification(
context.auth,
spreadsheetId,
context.webhookUrl,
context.propsValue.includeTeamDrives,
);
await context.store.put<WebhookInformation>(
'google-sheets-new-or-updated-row',
fileNotificationRes.data,
);
},
async onDisable(context) {
const webhook = await context.store.get<WebhookInformation>('google-sheets-new-or-updated-row');
if (webhook != null && webhook.id != null && webhook.resourceId != null) {
try
{
await deleteFileNotification(context.auth, webhook.id, webhook.resourceId);
}
catch(err){
console.debug("deleteFileNotification failed :",JSON.stringify(err));
}
}
},
async run(context) {
if (isSyncMessage(context.payload.headers)) {
return [];
}
if (!isChangeContentMessage(context.payload.headers)) {
return [];
}
const inputSpreadsheetId = context.propsValue.spreadsheetId;
const inputSheetId = context.propsValue.sheetId;
const triggerColumn = context.propsValue.trigger_column ?? ALL_COLUMNS;
if (!areSheetIdsValid(inputSpreadsheetId, inputSheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const sheetId = Number(inputSheetId);
const spreadsheetId = inputSpreadsheetId as string;
const sheetName = await getWorkSheetName(context.auth, spreadsheetId, sheetId);
const oldValuesHashes = (await context.store.get(`${sheetId}`)) as any[];
/* Fetch rows values with all columns as this will be used on returning updated/new row data
*/
const currentValues = await getWorkSheetValues(context.auth, spreadsheetId, sheetName);
const headers = currentValues[0] ?? [];
const headerCount = headers.length;
// const rowCount = Math.max(oldValuesHashes.length, currentValues.length);
const changedValues = [];
const newRowHashes = [];
for (let row = 0; row < currentValues.length; row++) {
const currentRowValue = currentValues[row];
/**
* This variable store value based on trigger column.
* If trigger column is all_columns then store entry row as target value, else store only column value.
*/
let targetValue;
if (triggerColumn === ALL_COLUMNS) {
targetValue = currentRowValue;
} else {
const currentTriggerColumnValue = currentRowValue[labelToColumn(triggerColumn)];
targetValue =
currentTriggerColumnValue !== undefined && currentTriggerColumnValue !== ''
? [currentTriggerColumnValue]
: [];
}
// create hash for new row values
const currentRowHash = crypto
.createHash('md5')
.update(JSON.stringify(targetValue))
.digest('hex');
newRowHashes.push(currentRowHash);
// If row is empty then skip
if (currentRowValue === undefined || currentRowValue.length === 0) {
continue;
}
const oldRowHash =
!isNil(oldValuesHashes) && row < oldValuesHashes.length ? oldValuesHashes[row] : undefined;
if (oldRowHash === undefined || oldRowHash != currentRowHash) {
const formattedValues: any = {};
for (let column = 0; column < headerCount; column++) {
formattedValues[columnToLabel(column)] = currentValues[row][column] ?? '';
}
changedValues.push({
row: row + 1,
values: formattedValues,
});
}
}
// update the row hashes
await context.store.put(`${sheetId}`, newRowHashes);
return changedValues.map((row) => {
return {
...row,
[DEDUPE_KEY_PROPERTY]: hashObject(row),
};
});
},
async test(context) {
const inputSpreadsheetId = context.propsValue.spreadsheetId;
const inputSheetId = context.propsValue.sheetId;
if (!areSheetIdsValid(inputSpreadsheetId, inputSheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const sheetId = Number(inputSheetId);
const spreadsheetId = inputSpreadsheetId as string;
const sheetName = await getWorkSheetName(context.auth, spreadsheetId, sheetId);
const currentSheetValues = await getWorkSheetValues(context.auth, spreadsheetId, sheetName);
const headers = currentSheetValues[0] ?? [];
const headerCount = headers.length;
const transformedRowValues = mapRowsToColumnLabels(currentSheetValues, 0, headerCount)
.slice(-5)
.reverse();
return transformedRowValues;
},
async onRenew(context) {
// get current channel ID & resource ID
const webhook = await context.store.get<WebhookInformation>(`google-sheets-new-or-updated-row`);
if (webhook != null && webhook.id != null && webhook.resourceId != null) {
// delete current channel
await deleteFileNotification(context.auth, webhook.id, webhook.resourceId);
const fileNotificationRes = await createFileNotification(
context.auth,
context.propsValue.spreadsheetId!,
context.webhookUrl,
context.propsValue.includeTeamDrives,
);
// store channel response
await context.store.put<WebhookInformation>(
'google-sheets-new-or-updated-row',
fileNotificationRes.data,
);
}
},
sampleData: {},
});

View File

@@ -0,0 +1,182 @@
import {
DEDUPE_KEY_PROPERTY,
Property,
TriggerStrategy,
WebhookRenewStrategy,
createTrigger,
} from '@activepieces/pieces-framework';
import {
createFileNotification,
deleteFileNotification,
getWorkSheetName,
getWorkSheetValues,
hashObject,
isChangeContentMessage,
isSyncMessage,
mapRowsToColumnLabels,
WebhookInformation,
} from './helpers';
import { googleSheetsAuth } from '../common/common';
import { commonProps } from '../common/props';
import { areSheetIdsValid, } from '../common/common';
export const newRowAddedTrigger = createTrigger({
auth: googleSheetsAuth,
name: 'googlesheets_new_row_added',
displayName: 'New Row Added',
description: 'Triggers when a new row is added to bottom of a spreadsheet.',
props: {
info: Property.MarkDown({
value:
'Please note that there might be a delay of up to 3 minutes for the trigger to be fired, due to a delay from Google.',
}),
...commonProps,
},
renewConfiguration: {
strategy: WebhookRenewStrategy.CRON,
cronExpression: '0 */12 * * *',
},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const { spreadsheetId:inputSpreadsheetId, sheetId:inputSheetId } = context.propsValue;
if (!areSheetIdsValid(inputSpreadsheetId, inputSheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const sheetId = Number(inputSheetId);
const spreadsheetId = inputSpreadsheetId as string;
const sheetName = await getWorkSheetName(context.auth, spreadsheetId, sheetId);
const currentSheetValues = await getWorkSheetValues(context.auth, spreadsheetId, sheetName);
await context.store.put(`${sheetId}`, currentSheetValues.length);
const fileNotificationRes = await createFileNotification(
context.auth,
spreadsheetId,
context.webhookUrl,
context.propsValue.includeTeamDrives,
);
await context.store.put<WebhookInformation>(
'googlesheets_new_row_added',
fileNotificationRes.data,
);
},
async onDisable(context) {
const webhook = await context.store.get<WebhookInformation>(`googlesheets_new_row_added`);
if (webhook != null && webhook.id != null && webhook.resourceId != null) {
try
{
await deleteFileNotification(context.auth, webhook.id, webhook.resourceId);
}
catch(err){
console.debug("deleteFileNotification failed :",JSON.stringify(err));
}
}
},
async run(context) {
if (isSyncMessage(context.payload.headers)) {
return [];
}
if (!isChangeContentMessage(context.payload.headers)) {
return [];
}
const { spreadsheetId:inputSpreadsheetId, sheetId:inputSheetId } = context.propsValue;
if (!areSheetIdsValid(inputSpreadsheetId, inputSheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const sheetId = Number(inputSheetId);
const spreadsheetId = inputSpreadsheetId as string;
const oldRowCount = (await context.store.get(`${sheetId}`)) as number;
const sheetName = await getWorkSheetName(context.auth, spreadsheetId, sheetId);
const currentRowValues = await getWorkSheetValues(context.auth, spreadsheetId, sheetName);
const currentRowCount = currentRowValues.length;
const headers = currentRowValues[0] ?? [];
const headerCount = headers.length;
if (oldRowCount >= currentRowCount) {
if (oldRowCount > currentRowCount) {
await context.store.put(`${sheetId}`, currentRowCount);
}
return [];
}
// create A1 notation range for new rows
const range = `${sheetName}!${oldRowCount + 1}:${currentRowCount}`;
const newRowValues = await getWorkSheetValues(
context.auth,
spreadsheetId,
range,
);
await context.store.put(`${sheetId}`, currentRowCount);
const transformedRowValues = mapRowsToColumnLabels(newRowValues, oldRowCount,headerCount);
return transformedRowValues.map((row) => {
return {
...row,
[DEDUPE_KEY_PROPERTY]: hashObject(row),
};
});
},
async onRenew(context) {
// get current channel ID & resource ID
const webhook = await context.store.get<WebhookInformation>(`googlesheets_new_row_added`);
const { spreadsheetId:inputSpreadsheetId, sheetId:inputSheetId } = context.propsValue;
if (!areSheetIdsValid(inputSpreadsheetId, inputSheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const spreadsheetId = inputSpreadsheetId as string;
if (webhook != null && webhook.id != null && webhook.resourceId != null) {
await deleteFileNotification(context.auth, webhook.id, webhook.resourceId);
const fileNotificationRes = await createFileNotification(
context.auth,
spreadsheetId,
context.webhookUrl,
context.propsValue.includeTeamDrives,
);
await context.store.put<WebhookInformation>(
'googlesheets_new_row_added',
fileNotificationRes.data,
);
}
},
async test(context) {
const { spreadsheetId:inputSpreadsheetId, sheetId:inputSheetId } = context.propsValue;
if (!areSheetIdsValid(inputSpreadsheetId, inputSheetId)) {
throw new Error('Please select a spreadsheet and sheet first.');
}
const sheetId = Number(inputSheetId);
const spreadsheetId = inputSpreadsheetId as string;
const sheetName = await getWorkSheetName(context.auth, spreadsheetId, sheetId);
const currentSheetValues = await getWorkSheetValues(context.auth, spreadsheetId, sheetName);
const headers = currentSheetValues[0] ?? [];
const headerCount = headers.length;
const transformedRowValues = mapRowsToColumnLabels(currentSheetValues, 0,headerCount)
.slice(-5)
.reverse();
return transformedRowValues;
},
sampleData: {},
});

View File

@@ -0,0 +1,83 @@
import { AppConnectionValueForAuthProperty, createTrigger,PiecePropValueSchema,TriggerStrategy } from '@activepieces/pieces-framework';
import { googleSheetsAuth } from '../common/common';
import { DedupeStrategy, Polling, pollingHelper } from '@activepieces/pieces-common';
import dayjs from 'dayjs';
import { google, drive_v3 } from 'googleapis';
import { includeTeamDrivesProp } from '../common/props';
import { createGoogleClient, GoogleSheetsAuthValue } from '../common/common';
type Props = {
includeTeamDrives?: boolean;
};
const polling: Polling<AppConnectionValueForAuthProperty<typeof googleSheetsAuth>, Props> = {
strategy: DedupeStrategy.TIMEBASED,
async items({ auth, propsValue, lastFetchEpochMS }) {
const authValue = auth as GoogleSheetsAuthValue;
const q = ["mimeType='application/vnd.google-apps.spreadsheet'",'trashed = false'];
if (lastFetchEpochMS) {
q.push(`createdTime > '${dayjs(lastFetchEpochMS).toISOString()}'`);
}
const authClient = await createGoogleClient(authValue);
const drive = google.drive({ version: 'v3', auth: authClient });
let nextPageToken;
const items = [];
do {
const response: any = await drive.files.list({
q: q.join(' and '),
fields: '*',
orderBy: 'createdTime desc',
supportsAllDrives: true,
includeItemsFromAllDrives: propsValue.includeTeamDrives,
pageToken: nextPageToken,
});
const fileList: drive_v3.Schema$FileList = response.data;
if (fileList.files) {
items.push(...fileList.files);
}
if (lastFetchEpochMS === 0) break;
nextPageToken = response.data.nextPageToken;
} while (nextPageToken);
return items.map((item) => ({
epochMilliSeconds: dayjs(item.createdTime).valueOf(),
data: item,
}));
},
};
export const newSpreadsheetTrigger = createTrigger({
auth: googleSheetsAuth,
name: 'new-spreadsheet',
displayName: 'New Spreadsheet',
description: 'Triggers when a new spreadsheet is created.',
type: TriggerStrategy.POLLING,
props: {
includeTeamDrives: includeTeamDrivesProp()
},
async onEnable(context) {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async onDisable(context) {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async test(context) {
return await pollingHelper.test(polling, context);
},
async run(context) {
return await pollingHelper.poll(polling, context);
},
sampleData:{
kind: 'drive#file',
mimeType: 'application/vnd.google-apps.spreadsheet',
webViewLink:
'https://docs.google.com/document/d/1_9xjsrYFgHVvgqYwAJ8KcsDcNU/edit?usp=drivesdk',
id: '1_9xjsrYFgHVvgqYwAJ8KcsDcN3AzPelsux',
name: 'Test Document',
},
});

View File

@@ -0,0 +1,97 @@
import { googleSheetsAuth } from '../common/common';
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { google } from 'googleapis';
import { OAuth2Client } from 'googleapis-common';
import { isNil } from '@activepieces/shared';
import { includeTeamDrivesProp, spreadsheetIdProp } from '../common/props';
import { createGoogleClient } from '../common/common';
export const newWorksheetTrigger = createTrigger({
auth: googleSheetsAuth,
name: 'new-worksheet',
displayName: 'New Worksheet',
description: 'Triggers when a worksheet is created in a spreadsheet.',
type: TriggerStrategy.POLLING,
props: {
includeTeamDrives: includeTeamDrivesProp(),
spreadsheetId: spreadsheetIdProp('Spreadsheet', '',true),
},
async onEnable(context) {
const ids: number[] = [];
const authClient = await createGoogleClient(context.auth);
const sheets = google.sheets({ version: 'v4', auth: authClient });
const response = await sheets.spreadsheets.get({
spreadsheetId: context.propsValue.spreadsheetId as string,
});
if (response.data.sheets) {
for (const sheet of response.data.sheets) {
const sheetId = sheet.properties?.sheetId;
if (sheetId) {
ids.push(sheetId);
}
}
}
await context.store.put('worksheets', JSON.stringify(ids));
},
async onDisable(context) {
await context.store.delete('worksheets');
},
async test(context) {
const worksheets = [];
const authClient = await createGoogleClient(context.auth);
const sheets = google.sheets({ version: 'v4', auth: authClient });
const response = await sheets.spreadsheets.get({
spreadsheetId: context.propsValue.spreadsheetId as string,
});
if (response.data.sheets) {
for (const sheet of response.data.sheets) {
worksheets.push(sheet);
}
}
return worksheets;
},
async run(context) {
const existingIds = (await context.store.get<string>('worksheets')) ?? '[]';
const parsedExistingIds = JSON.parse(existingIds) as number[];
const authClient = await createGoogleClient(context.auth);
const sheets = google.sheets({ version: 'v4', auth: authClient });
const response = await sheets.spreadsheets.get({
spreadsheetId: context.propsValue.spreadsheetId as string,
});
if (isNil(response.data.sheets) || response.data.sheets.length === 0) {
return [];
}
// Filter valid worksheetss
const newWorksheets = response.data.sheets.filter((sheet) => {
const sheetId = sheet.properties?.sheetId ?? undefined;
return sheetId !== undefined && !parsedExistingIds.includes(sheetId);
});
const newIds = newWorksheets
.map((sheet) => sheet.properties?.sheetId ?? undefined)
.filter((id): id is number => id !== undefined);
if (newIds.length === 0) {
return [];
}
// Store new IDs
await context.store.put('worksheets', JSON.stringify([...newIds, ...parsedExistingIds]));
return newWorksheets;
},
sampleData: {
properties: {
sheetId: 2077270595,
title: 'Sheet5',
index: 1,
sheetType: 'GRID',
gridProperties: {
rowCount: 1000,
columnCount: 26,
},
},
},
});

View File

@@ -0,0 +1,16 @@
{
"extends": "../../../../tsconfig.base.json",
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
}
],
"compilerOptions": {
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true
}
}

View File

@@ -0,0 +1,11 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"module": "commonjs",
"outDir": "../../../../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"],
"include": ["src/**/*.ts"]
}