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:
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"presets": [["@nx/js/babel", { "useBuiltIns": "usage" }]]
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"extends": ["../../../../.eslintrc.json"],
|
||||
"ignorePatterns": ["!**/*"],
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": ["*.ts", "*.tsx"],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": ["*.js", "*.jsx"],
|
||||
"rules": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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/).
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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": []
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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行内の任意のセルへの変更をトリガーするフローを使用する場合は、**任意の列** を選択します。"
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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.": "Включать только изменения ячеек в этом столбце. выберите **Все колонки**, если хотите, чтобы потоки срабатывали изменения в любой ячейке в строке."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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,
|
||||
});
|
||||
@@ -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;
|
||||
},
|
||||
});
|
||||
@@ -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;
|
||||
},
|
||||
});
|
||||
@@ -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;
|
||||
},
|
||||
});
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
}})
|
||||
@@ -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,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -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}`);
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -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];
|
||||
},
|
||||
});
|
||||
@@ -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;
|
||||
},
|
||||
});
|
||||
@@ -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,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -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 ,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -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
|
||||
}
|
||||
})
|
||||
@@ -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;
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
@@ -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;
|
||||
},
|
||||
});
|
||||
@@ -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)
|
||||
);
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
})];
|
||||
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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: {},
|
||||
});
|
||||
@@ -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: {},
|
||||
});
|
||||
@@ -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',
|
||||
},
|
||||
});
|
||||
@@ -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,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"extends": "../../../../tsconfig.base.json",
|
||||
"files": [],
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.lib.json"
|
||||
}
|
||||
],
|
||||
"compilerOptions": {
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true
|
||||
}
|
||||
}
|
||||
@@ -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"]
|
||||
}
|
||||
Reference in New Issue
Block a user