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,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-microsoft-excel-365
|
||||
|
||||
This library was generated with [Nx](https://nx.dev).
|
||||
|
||||
## Building
|
||||
|
||||
Run `nx build pieces-microsoft-excel-365` to build the library.
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "@activepieces/piece-microsoft-excel-365",
|
||||
"version": "0.1.2"
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"name": "pieces-microsoft-excel-365",
|
||||
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
|
||||
"sourceRoot": "packages/pieces/community/microsoft-excel-365/src",
|
||||
"projectType": "library",
|
||||
"targets": {
|
||||
"build": {
|
||||
"executor": "@nx/js:tsc",
|
||||
"outputs": [
|
||||
"{options.outputPath}"
|
||||
],
|
||||
"options": {
|
||||
"outputPath": "dist/packages/pieces/community/microsoft-excel-365",
|
||||
"tsConfig": "packages/pieces/community/microsoft-excel-365/tsconfig.lib.json",
|
||||
"packageJson": "packages/pieces/community/microsoft-excel-365/package.json",
|
||||
"main": "packages/pieces/community/microsoft-excel-365/src/index.ts",
|
||||
"assets": [
|
||||
"packages/pieces/community/microsoft-excel-365/*.md",
|
||||
{
|
||||
"input": "packages/pieces/community/microsoft-excel-365/src/i18n",
|
||||
"output": "./src/i18n",
|
||||
"glob": "**/!(i18n.json)"
|
||||
}
|
||||
],
|
||||
"buildableProjectDepsInPackageJsonType": "dependencies",
|
||||
"updateBuildableProjectDepsInPackageJson": true
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build",
|
||||
"prebuild"
|
||||
]
|
||||
},
|
||||
"publish": {
|
||||
"command": "node tools/scripts/publish.mjs pieces-microsoft-excel-365 {args.ver} {args.tag}",
|
||||
"dependsOn": [
|
||||
"build"
|
||||
]
|
||||
},
|
||||
"lint": {
|
||||
"executor": "@nx/eslint:lint",
|
||||
"outputs": [
|
||||
"{options.outputFile}"
|
||||
]
|
||||
},
|
||||
"prebuild": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"cwd": "packages/pieces/community/microsoft-excel-365",
|
||||
"command": "bun install --no-save --silent"
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build"
|
||||
]
|
||||
}
|
||||
},
|
||||
"tags": []
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"Microsoft Excel 365": "Microsoft Excel 365",
|
||||
"Spreadsheet software by Microsoft": "Spreadsheet software by Microsoft",
|
||||
"Authentication for Microsoft Excel 365": "Authentication for Microsoft Excel 365",
|
||||
"Append Row to Worksheet": "Append Row to Worksheet",
|
||||
"Get Worksheets": "Get Worksheets",
|
||||
"Get Worksheet Rows": "Get Worksheet Rows",
|
||||
"Update Worksheet Rows": "Update Worksheet Rows",
|
||||
"Clear Worksheet": "Clear Worksheet",
|
||||
"Delete Worksheet": "Delete Worksheet",
|
||||
"Get Workbooks": "Get Workbooks",
|
||||
"Delete Workbook": "Delete Workbook",
|
||||
"Add a Worksheet to a Workbook": "Add a Worksheet to a Workbook",
|
||||
"Get Table Rows": "Get Table Rows",
|
||||
"Get Table Columns": "Get Table Columns",
|
||||
"Create Table": "Create Table",
|
||||
"Delete Table": "Delete Table",
|
||||
"Lookup Table Column": "Lookup Table Column",
|
||||
"Append Rows to a Table": "Append Rows to a Table",
|
||||
"Convert to Range": "Convert to Range",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Append row of values to a worksheet": "Append row of values to a worksheet",
|
||||
"Retrieve worksheets from a workbook": "Retrieve worksheets from a workbook",
|
||||
"Retrieve rows from a worksheet": "Retrieve rows from a worksheet",
|
||||
"Update a row in a worksheet": "Update a row in a worksheet",
|
||||
"Clear a worksheet": "Clear a worksheet",
|
||||
"Delete a worksheet in a workbook": "Delete a worksheet in a workbook",
|
||||
"Retrieve a list of workbooks": "Retrieve a list of workbooks",
|
||||
"Delete a workbook": "Delete a workbook",
|
||||
"Add a worksheet to a workbook": "Add a worksheet to a workbook",
|
||||
"List rows of a table in a worksheet": "List rows of a table in a worksheet",
|
||||
"List columns of a table in a worksheet": "List columns of a table in a worksheet",
|
||||
"Create a table in a worksheet": "Create a table in a worksheet",
|
||||
"Delete a table from a worksheet": "Delete a table from a worksheet",
|
||||
"Lookup a value in a table column in a worksheet": "Lookup a value in a table column in a worksheet",
|
||||
"Append rows to a table": "Append rows to a table",
|
||||
"Converts a table to a range": "Converts a table to a range",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Workbook": "Workbook",
|
||||
"Worksheet": "Worksheet",
|
||||
"Does the first row contain headers?": "Does the first row contain headers?",
|
||||
"Values": "Values",
|
||||
"Return All": "Return All",
|
||||
"Limit": "Limit",
|
||||
"Range": "Range",
|
||||
"Header Row": "Header Row",
|
||||
"First Data Row": "First Data Row",
|
||||
"Row number": "Row number",
|
||||
"Worksheet Name": "Worksheet Name",
|
||||
"Table": "Table",
|
||||
"Select Range": "Select Range",
|
||||
"Has Headers": "Has Headers",
|
||||
"Lookup Column": "Lookup Column",
|
||||
"Lookup Value": "Lookup Value",
|
||||
"Return All Matches": "Return All Matches",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"If the first row is headers": "If the first row is headers",
|
||||
"The values to insert": "The values to insert",
|
||||
"If checked, all worksheets will be returned": "If checked, all worksheets will be returned",
|
||||
"Limit the number of worksheets returned": "Limit the number of worksheets returned",
|
||||
"Range of the rows to retrieve (e.g., A2:B2)": "Range of the rows to retrieve (e.g., A2:B2)",
|
||||
"Row number of the header": "Row number of the header",
|
||||
"Row number of the first data row": "Row number of the first data row",
|
||||
"The row number to update": "The row number to update",
|
||||
"The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet": "The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet",
|
||||
"Limits the number of workbooks returned, returns all workbooks if empty": "Limits the number of workbooks returned, returns all workbooks if empty",
|
||||
"The name of the new worksheet": "The name of the new worksheet",
|
||||
"Limit the number of rows retrieved": "Limit the number of rows retrieved",
|
||||
"Limit the number of columns retrieved": "Limit the number of columns retrieved",
|
||||
"How to select the range for the table": "How to select the range for the table",
|
||||
"The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table": "The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table",
|
||||
"Whether the range has column labels": "Whether the range has column labels",
|
||||
"The column name to lookup the value in": "The column name to lookup the value in",
|
||||
"The value to lookup": "The value to lookup",
|
||||
"If checked, all matching rows will be returned": "If checked, all matching rows will be returned",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Row": "New Row",
|
||||
"Trigger when a new row is added, and it can include existing rows as well.": "Trigger when a new row is added, and it can include existing rows as well.",
|
||||
"Max Rows to Poll": "Max Rows to Poll",
|
||||
"The maximum number of rows to poll, the rest will be polled on the next run.": "The maximum number of rows to poll, the rest will be polled on the next run."
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"Spreadsheet software by Microsoft": "Tabellensoftware von Microsoft",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add ": "\n1. Melden Sie sich bei [Microsoft Azure Portal](https://portal.azure.com/).\n. Von der linken Seitenleiste gehen Sie zur **Microsoft Enfra ID**.\n3. Unter **Verwalten** klicken Sie auf **App-Registrierungen**.\n4. Klicken Sie auf die **Neue Registrierung** Schaltfläche.\n5. Geben Sie einen **Name** für Ihre App ein.\n6. Für **unterstützte Kontotypen**, auswählen:\n - **Konten in jedem Organisationsverzeichnis (jeder Microsoft-Entra-ID-Mieter - Multitenant) und persönlichen Microsoft-Konten**\n - Oder wählen Sie nach Ihren Anforderungen aus.\n7. In **Umleitungs-URI** wählen Sie **Web** und fügen Sie die angegebene URL hinzu.\n8. Klicken Sie auf **Registrieren**.\n9. Nach der Registrierung werden Sie zur Übersichtsseite der App weitergeleitet. Kopieren Sie die **Application (Client) ID**.\n10. Vom linken Menü gehen Sie zu **Zertifikate & Geheimnisse**.\n - Unter **Kundengeheimnis**, klicke **Neues Kundengeheimnis**.\n - Geben Sie eine Beschreibung an, setzen Sie ein Ablaufdatum und klicken Sie auf **Hinzufügen**.\n - Kopieren Sie den **Wert** des Client-Geheimnisses (dies wird nicht wieder angezeigt).\n11. Gehe zu **API Berechtigungen** vom linken Menü.\n - Klicke **Berechtigung hinzufügen**.\n - Wählen Sie **Microsoft Graph** → **delegierte Berechtigungen**.\n - Fügen Sie folgende Bereiche hinzu:\n - Dateien. eadWrite\n - offline_access \n - Klicken Sie auf **Berechtigungen hinzufügen**.\n12. Kopieren Sie Ihre **Client-ID** und **Client-Geheimnis**.\n",
|
||||
"Append Row to Worksheet": "Zeile an Arbeitsblatt anhängen",
|
||||
"Get Worksheets": "Arbeitsblätter abrufen",
|
||||
"Get Worksheet Rows": "Arbeitsblatt Zeilen abrufen",
|
||||
"Update Worksheet Rows": "Arbeitsblatt Zeilen aktualisieren",
|
||||
"Clear Worksheet": "Arbeitsblatt löschen",
|
||||
"Delete Worksheet": "Arbeitsblatt löschen",
|
||||
"Get Workbooks": "Arbeitsbücher abrufen",
|
||||
"Delete Workbook": "Arbeitsbuch löschen",
|
||||
"Add a Worksheet to a Workbook": "Ein Arbeitsblatt zu einem Arbeitsbuch hinzufügen",
|
||||
"Get Table Rows": "Tabellenzeile erhalten",
|
||||
"Get Table Columns": "Tabellenspalten erhalten",
|
||||
"Create Table": "Tabelle erstellen",
|
||||
"Delete Table": "Tabelle löschen",
|
||||
"Lookup Table Column": "Tabellenspalte suchen",
|
||||
"Append Rows to a Table": "Zeilen an einen Tisch anhängen",
|
||||
"Convert to Range": "In Bereich umwandeln",
|
||||
"Create Workbook": "Arbeitsbuch erstellen",
|
||||
"Clear Column by Index": "Spalte nach Index löschen",
|
||||
"Clear Cells by Range": "Lösche Zellen nach Reichweite",
|
||||
"Clear Row by ID": "Zeile durch ID löschen",
|
||||
"Create Worksheet": "Arbeitsblatt erstellen",
|
||||
"Find Row": "Finde Zeile",
|
||||
"Get Cells in Range": "Hol dir Zellen in Reichweite",
|
||||
"Get Row by ID": "Zeile per ID erhalten",
|
||||
"Get Worksheet by ID": "Arbeitsblatt über ID abrufen",
|
||||
"Rename Worksheet": "Arbeitsblatt umbenennen",
|
||||
"Custom API Call": "Eigener API-Aufruf",
|
||||
"Append row of values to a worksheet": "Füge eine Zeile von Werten zu einer Tabelle hinzu",
|
||||
"Retrieve worksheets from a workbook": "Arbeitsblätter aus einem Arbeitsbuch abrufen",
|
||||
"Retrieve rows from a worksheet": "Datensätze von einem Arbeitsblatt abrufen",
|
||||
"Update a row in a worksheet": "Eine Zeile in einer Tabelle aktualisieren",
|
||||
"Clear a worksheet": "Arbeitsblatt leeren",
|
||||
"Delete a worksheet in a workbook": "Arbeitsblatt in einem Arbeitsbuch löschen",
|
||||
"Retrieve a list of workbooks": "Liste der Arbeitsbücher abrufen",
|
||||
"Delete a workbook": "Ein Arbeitsbuch löschen",
|
||||
"Add a worksheet to a workbook": "Ein Arbeitsblatt zu einem Arbeitsbuch hinzufügen",
|
||||
"List rows of a table in a worksheet": "Datensätze einer Tabelle in einer Tabelle auflisten",
|
||||
"List columns of a table in a worksheet": "Spalten einer Tabelle in einer Tabelle auflisten",
|
||||
"Create a table in a worksheet": "Tabelle in einer Tabelle erstellen",
|
||||
"Delete a table from a worksheet": "Tabelle aus Arbeitsblatt löschen",
|
||||
"Lookup a value in a table column in a worksheet": "Suche einen Wert in einer Tabellenspalte in einem Arbeitsblatt",
|
||||
"Append rows to a table": "Zeilen an eine Tabelle anhängen",
|
||||
"Converts a table to a range": "Konvertiert eine Tabelle in einen Bereich",
|
||||
"Create a new workbook at the specified location": "Neues Arbeitsbuch an dem angegebenen Ort erstellen",
|
||||
"Clear contents/formatting of a column by its index.": "Lösche Inhalte/Formatierung einer Spalte nach ihrem Index.",
|
||||
"Clear a block of cells (range) content or formatting.": "Lösche einen Block von Zellen (Bereich) Inhalt oder Formatierung.",
|
||||
"Clear contents/formatting of an entire row by its ID.": "Lösche Inhalte/Formatierung eines ganzen Datensatzes mit seiner ID.",
|
||||
"Add a new worksheet (tab) to an existing workbook with optional default headers.": "Fügen Sie ein neues Arbeitsblatt (Tab) zu einem bestehenden Arbeitsbuch mit optionalen Headern hinzu.",
|
||||
"Locate a row by specifying a lookup column and value (e.g. find a row where “ID” = 123).": "Suchen Sie eine Zeile, indem Sie eine Spalte und einen Wert angeben (z.B. finden Sie eine Zeile, in der „ID“ = 123).",
|
||||
"Retrieve the values in a given cell range (e.g., “A1:C10”).": "Rufen Sie die Werte in einem vorgegebenen Zellbereich ab (z.B. „A1:C10“).",
|
||||
" Retrieve the entire content of a row by its row ID.": " Ruft den gesamten Inhalt einer Zeile nach ihrer Zeilennummer ab.",
|
||||
"Retrieve metadata of a worksheet by its ID.": "Abrufen von Metadaten eines Arbeitsblatts durch seine ID.",
|
||||
"Change the name of an existing worksheet.": "Ändern Sie den Namen einer vorhandenen Tabelle.",
|
||||
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
|
||||
"Workbook": "Arbeitsbuch",
|
||||
"Worksheet": "Arbeitsblatt",
|
||||
"Does the first row contain headers?": "Enthält die erste Zeile Kopfzeilen?",
|
||||
"Values": "Werte",
|
||||
"Return All": "Alle zurückgeben",
|
||||
"Limit": "Limit",
|
||||
"Range": "Range",
|
||||
"Header Row": "Kopfzeile",
|
||||
"First Data Row": "Erste Datenzeile",
|
||||
"Row number": "Zeilennummer",
|
||||
"Worksheet Name": "Arbeitsblattname",
|
||||
"Table": "Tisch",
|
||||
"Select Range": "Bereich auswählen",
|
||||
"Has Headers": "Hat Kopfzeilen",
|
||||
"Lookup Column": "Spalte suchen",
|
||||
"Lookup Value": "Suchwert",
|
||||
"Return All Matches": "Alle Matches zurückgeben",
|
||||
"Name": "Name",
|
||||
"Parent Folder": "Eltern-Ordner",
|
||||
"Column Index": "Spaltenindex",
|
||||
"Clear Type": "Typ löschen",
|
||||
"Row Number": "Zeilennummer",
|
||||
"Headers": "Kopfzeilen",
|
||||
"Row ID (Index)": "Zeilennummer (Index)",
|
||||
"New Worksheet Name": "Neuer Arbeitsblattname",
|
||||
"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)",
|
||||
"If the first row is headers": "Wenn die erste Zeile Kopfzeilen ist",
|
||||
"The values to insert": "Die einzufügenden Werte",
|
||||
"If checked, all worksheets will be returned": "Wenn aktiviert, werden alle Arbeitsblätter zurückgegeben",
|
||||
"Limit the number of worksheets returned": "Anzahl der zurückgegebenen Arbeitsblätter begrenzen",
|
||||
"Range of the rows to retrieve (e.g., A2:B2)": "Bereich der zu holenden Zeilen (z.B. A2:B2)",
|
||||
"Row number of the header": "Zeilennummer der Kopfzeile",
|
||||
"Row number of the first data row": "Zeilennummer der ersten Datenzeile",
|
||||
"The row number to update": "Die zu aktualisierende Zeilennummer",
|
||||
"The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet": "Der Bereich in der Schreibweise A1 (z. B. A2:B2), um in der Tabelle zu löschen, falls nicht vorhanden, löschen Sie das gesamte Arbeitsblatt",
|
||||
"Limits the number of workbooks returned, returns all workbooks if empty": "Begrenzt die Anzahl der zurückgegebenen Arbeitsbücher zurück, gibt alle Arbeitsbücher zurück, wenn leer",
|
||||
"The name of the new worksheet": "Der Name des neuen Arbeitsblatts",
|
||||
"Limit the number of rows retrieved": "Anzahl der abgerufenen Zeilen begrenzen",
|
||||
"Limit the number of columns retrieved": "Anzahl der abgerufenen Spalten begrenzen",
|
||||
"How to select the range for the table": "Auswahl des Bereichs für die Tabelle",
|
||||
"The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table": "Der Bereich der Zellen in A1-Notation (z. B. A2:B2), die in eine Tabelle konvertiert werden",
|
||||
"Whether the range has column labels": "Gibt an, ob der Bereich Spaltenbezeichnungen hat",
|
||||
"The column name to lookup the value in": "Der Spaltenname für die Suche nach dem Wert in",
|
||||
"The value to lookup": "Der zu durchsuchende Wert",
|
||||
"If checked, all matching rows will be returned": "Wenn aktiviert, werden alle übereinstimmenden Zeilen zurückgegeben",
|
||||
"The name of the new workbook": "Der Name des neuen Arbeitsbuchs",
|
||||
"The parent folder to use": "Der zu verwendende übergeordnete Ordner",
|
||||
"The 1-based index of the column to be cleared (e.g., 1 for column A, 2 for column B).": "Der 1-basierte Index der zu löschenden Spalte (z.B. 1 für Spalte A, 2 für Spalte B).",
|
||||
"Specify what to clear from the column.": "Legen Sie fest, was aus der Spalte zu löschen ist.",
|
||||
"The range of cells to clear, in A1 notation (e.g., \"A1:C5\").": "Der Bereich der Zellen zu löschen, in A1 Notation (z. B. \"A1:C5\").",
|
||||
"Specify what to clear from the range.": "Legen Sie fest, was aus dem Bereich zu löschen ist.",
|
||||
"The number of the row to be cleared (e.g., 5 for the 5th row).": "Die Anzahl der zu löschenden Zeilen (z.B. 5 für die 5. Zeile).",
|
||||
"Specify what to clear from the row.": "Legen Sie fest, was aus der Zeile zu löschen ist.",
|
||||
"The name for the new worksheet. If not provided, a default name like 'Sheet1' will be assigned.": "Der Name für das neue Arbeitsblatt. Falls nicht angegeben wird, wird ein Standardname wie 'Sheet1' zugewiesen.",
|
||||
"Optional: A list of headers to add to the first row. A table will be created from these headers.": "Optional: Eine Liste von Kopfzeilen, die zur ersten Zeile hinzugefügt werden sollen. Eine Tabelle wird aus diesen Kopfzeilen erstellt.",
|
||||
"The column to search in.": "Die Spalte in der gesucht werden soll.",
|
||||
"The value to find in the lookup column.": "Der Wert, der in der Suchspalte zu finden ist.",
|
||||
"The range of cells to retrieve, in A1 notation (e.g., \"A1:C10\").": "Der Bereich der Zellen, die in A1-Notation abgerufen werden sollen (z.B. \"A1:C10\").",
|
||||
"The zero-based index of the row to retrieve (e.g., 0 for the first row, 1 for the second).": "Der null-basierte Index der zu holenden Zeile (z.B. 0 für die erste Zeile, 1 für die zweite Zeile).",
|
||||
"\nThe new name for the worksheet. The name must adhere to the following rules:\n- Cannot be blank.\n- Cannot exceed 31 characters.\n- Must not contain any of the following characters: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- The name \"History\" is reserved by Excel and cannot be used.\n": "\nDer neue Name für das Arbeitsblatt. Der Name muss die folgenden Regeln beachten:\n- darf nicht leer sein.\n- 31 Zeichen nicht überschreiten.\n- Darf keine der folgenden Zeichen enthalten: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- Der Name \"History\" ist von Excel reserviert und kann nicht verwendet werden.\n",
|
||||
"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..",
|
||||
"All (Contents and Formatting)": "Alle (Inhalt und Formatierung)",
|
||||
"Contents Only": "Nur Inhalte",
|
||||
"Formats Only": "Nur Formate",
|
||||
"GET": "ERHALTEN",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "LÖSCHEN",
|
||||
"HEAD": "HEAD",
|
||||
"New Row": "Neue Zeile",
|
||||
"New Row in Table": "Neue Zeile in Tabelle",
|
||||
"New Worksheet": "Neues Arbeitsblatt",
|
||||
"Updated Row": "Aktualisierte Zeile",
|
||||
"Trigger when a new row is added, and it can include existing rows as well.": "Wird ausgelöst, wenn eine neue Zeile hinzugefügt wird, und kann auch vorhandene Datensätze enthalten.",
|
||||
"Fires when a new row is added to a table within a worksheet.": "Feuert ab, wenn eine neue Zeile einer Tabelle innerhalb einer Tabelle hinzugefügt wird.",
|
||||
"Fires when a new worksheet is created in a workbook.": "Feuert ab, wenn ein neues Arbeitsblatt in einem Arbeitsbuch erstellt wird.",
|
||||
"Fires when a row (in a worksheet) is added or updated.": "Feuert ab, wenn eine Zeile (in einem Arbeitsblatt) hinzugefügt oder aktualisiert wird.",
|
||||
"Max Rows to Poll": "Max. Zeilen zur Abfrage",
|
||||
"My table has headers": "Meine Tabelle hat Kopfzeilen",
|
||||
"First row has headers": "Erste Zeile hat Kopfzeilen",
|
||||
"The maximum number of rows to poll, the rest will be polled on the next run.": "Die maximale Anzahl der zu befragenden Zeilen, der Rest wird beim nächsten Lauf befragt.",
|
||||
"Enable this if the first row of your table is a header row.": "Aktivieren Sie dies, wenn die erste Zeile Ihrer Tabelle eine Kopfzeile ist.",
|
||||
"Enable this if the first row of your worksheet should be treated as headers.": "Aktivieren Sie dies, wenn die erste Zeile Ihres Arbeitsblatts als Header behandelt werden soll."
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"Spreadsheet software by Microsoft": "Software de hoja de cálculo por Microsoft",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add ": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - Files.ReadWrite\n - offline_access\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Append Row to Worksheet": "Añadir fila a la hoja de trabajo",
|
||||
"Get Worksheets": "Obtener hojas de trabajo",
|
||||
"Get Worksheet Rows": "Obtener filas de hojas de trabajo",
|
||||
"Update Worksheet Rows": "Actualizar Filas de Hoja de Trabajo",
|
||||
"Clear Worksheet": "Limpiar hoja de trabajo",
|
||||
"Delete Worksheet": "Eliminar hoja de trabajo",
|
||||
"Get Workbooks": "Obtener libros de trabajo",
|
||||
"Delete Workbook": "Eliminar Libro de Trabajo",
|
||||
"Add a Worksheet to a Workbook": "Añadir una hoja de trabajo a un libro de trabajo",
|
||||
"Get Table Rows": "Obtener Arcos de Tabla",
|
||||
"Get Table Columns": "Obtener columnas de tabla",
|
||||
"Create Table": "Crear tabla",
|
||||
"Delete Table": "Eliminar tabla",
|
||||
"Lookup Table Column": "Columna de Tabla de Búsqueda",
|
||||
"Append Rows to a Table": "Añadir filas a una tabla",
|
||||
"Convert to Range": "Convertir a rango",
|
||||
"Create Workbook": "Crear Libro de Trabajo",
|
||||
"Clear Column by Index": "Limpiar columna por índice",
|
||||
"Clear Cells by Range": "Limpiar celdas por rango",
|
||||
"Clear Row by ID": "Limpiar fila por ID",
|
||||
"Create Worksheet": "Crear hoja de trabajo",
|
||||
"Find Row": "Buscar fila",
|
||||
"Get Cells in Range": "Obtener celdas en el rango",
|
||||
"Get Row by ID": "Obtener fila por ID",
|
||||
"Get Worksheet by ID": "Obtener Hoja de Trabajo por ID",
|
||||
"Rename Worksheet": "Renombrar hoja de trabajo",
|
||||
"Custom API Call": "Llamada API personalizada",
|
||||
"Append row of values to a worksheet": "Añadir fila de valores a una hoja de trabajo",
|
||||
"Retrieve worksheets from a workbook": "Recuperar hojas de trabajo de un libro",
|
||||
"Retrieve rows from a worksheet": "Recuperar filas de una hoja de trabajo",
|
||||
"Update a row in a worksheet": "Actualizar una fila en una hoja de trabajo",
|
||||
"Clear a worksheet": "Limpiar una hoja de trabajo",
|
||||
"Delete a worksheet in a workbook": "Eliminar una hoja de trabajo en un libro",
|
||||
"Retrieve a list of workbooks": "Recuperar una lista de libros de trabajo",
|
||||
"Delete a workbook": "Eliminar un libro",
|
||||
"Add a worksheet to a workbook": "Añadir una hoja de trabajo a un libro",
|
||||
"List rows of a table in a worksheet": "Listar filas de una tabla en una hoja de trabajo",
|
||||
"List columns of a table in a worksheet": "Listar columnas de una tabla en una hoja de trabajo",
|
||||
"Create a table in a worksheet": "Crear una tabla en una hoja de trabajo",
|
||||
"Delete a table from a worksheet": "Eliminar una tabla de una hoja de trabajo",
|
||||
"Lookup a value in a table column in a worksheet": "Buscar un valor en una columna de tabla en una hoja de trabajo",
|
||||
"Append rows to a table": "Añadir filas a una tabla",
|
||||
"Converts a table to a range": "Convierte una tabla a un rango",
|
||||
"Create a new workbook at the specified location": "Crear un nuevo libro en la ubicación especificada",
|
||||
"Clear contents/formatting of a column by its index.": "Elimina el contenido/formato de una columna por su índice.",
|
||||
"Clear a block of cells (range) content or formatting.": "Elimina un bloque de contenido o formato de celdas (rango).",
|
||||
"Clear contents/formatting of an entire row by its ID.": "Elimina el contenido/formato de una fila entera por su ID.",
|
||||
"Add a new worksheet (tab) to an existing workbook with optional default headers.": "Añadir una nueva hoja de trabajo (pestaña) a un libro de trabajo existente con cabeceras predeterminadas opcionales.",
|
||||
"Locate a row by specifying a lookup column and value (e.g. find a row where “ID” = 123).": "Busque una fila especificando una columna de búsqueda y un valor (por ejemplo, encuentre una fila donde “ID” = 123).",
|
||||
"Retrieve the values in a given cell range (e.g., “A1:C10”).": "Recuperar los valores en un determinado rango de celdas (por ejemplo, “A1:C10”).",
|
||||
" Retrieve the entire content of a row by its row ID.": " Recuperar todo el contenido de una fila por su ID de fila.",
|
||||
"Retrieve metadata of a worksheet by its ID.": "Recuperar metadatos de una hoja de trabajo por su ID.",
|
||||
"Change the name of an existing worksheet.": "Cambiar el nombre de una hoja de trabajo existente.",
|
||||
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
|
||||
"Workbook": "Libro de trabajo",
|
||||
"Worksheet": "Hoja de trabajo",
|
||||
"Does the first row contain headers?": "¿La primera fila contiene cabeceras?",
|
||||
"Values": "Valores",
|
||||
"Return All": "Devolver todos",
|
||||
"Limit": "Límite",
|
||||
"Range": "Range",
|
||||
"Header Row": "Fila de cabecera",
|
||||
"First Data Row": "Primera fila de datos",
|
||||
"Row number": "Número de fila",
|
||||
"Worksheet Name": "Nombre de la hoja de trabajo",
|
||||
"Table": "Tabla",
|
||||
"Select Range": "Seleccionar rango",
|
||||
"Has Headers": "Tiene cabeceras",
|
||||
"Lookup Column": "Columna de Búsqueda",
|
||||
"Lookup Value": "Valor de Búsqueda",
|
||||
"Return All Matches": "Devolver todas las partidas",
|
||||
"Name": "Nombre",
|
||||
"Parent Folder": "Carpeta padre",
|
||||
"Column Index": "Índice de columna",
|
||||
"Clear Type": "Borrar tipo",
|
||||
"Row Number": "Número de fila",
|
||||
"Headers": "Encabezados",
|
||||
"Row ID (Index)": "ID fila (índice)",
|
||||
"New Worksheet Name": "Nuevo nombre de hoja de trabajo",
|
||||
"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)",
|
||||
"If the first row is headers": "Si la primera fila son cabeceras",
|
||||
"The values to insert": "Los valores a insertar",
|
||||
"If checked, all worksheets will be returned": "Si está marcado, todas las hojas de trabajo serán devueltas",
|
||||
"Limit the number of worksheets returned": "Limitar el número de hojas de cálculo devueltas",
|
||||
"Range of the rows to retrieve (e.g., A2:B2)": "Rango de las filas a recuperar (por ejemplo, A2:B2)",
|
||||
"Row number of the header": "Número de fila de la cabecera",
|
||||
"Row number of the first data row": "Número de fila de la primera fila de datos",
|
||||
"The row number to update": "El número de fila a actualizar",
|
||||
"The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet": "El rango en notación A1 (por ej., A2:B2) para limpiar en la hoja de cálculo, si no se proporciona, limpiar toda la hoja de trabajo",
|
||||
"Limits the number of workbooks returned, returns all workbooks if empty": "Limita el número de libros de trabajo devueltos, devuelve todos los libros de trabajo si está vacío",
|
||||
"The name of the new worksheet": "El nombre de la nueva hoja de trabajo",
|
||||
"Limit the number of rows retrieved": "Limitar el número de filas recuperadas",
|
||||
"Limit the number of columns retrieved": "Limitar el número de columnas recuperadas",
|
||||
"How to select the range for the table": "Cómo seleccionar el rango para la tabla",
|
||||
"The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table": "El rango de celdas en notación A1 (por ejemplo, A2:B2) que se convertirá en una tabla",
|
||||
"Whether the range has column labels": "Si el rango tiene etiquetas de columna",
|
||||
"The column name to lookup the value in": "El nombre de la columna en la que buscar el valor",
|
||||
"The value to lookup": "El valor a buscar",
|
||||
"If checked, all matching rows will be returned": "Si está marcado, todas las filas coincidentes serán devueltas",
|
||||
"The name of the new workbook": "El nombre del nuevo libro",
|
||||
"The parent folder to use": "La carpeta padre a usar",
|
||||
"The 1-based index of the column to be cleared (e.g., 1 for column A, 2 for column B).": "El índice 1 basado en la columna a ser borrada (por ejemplo, 1 para la columna A, 2 para la columna B).",
|
||||
"Specify what to clear from the column.": "Especifique qué borrar de la columna.",
|
||||
"The range of cells to clear, in A1 notation (e.g., \"A1:C5\").": "El rango de células a limpiar, en notación A1 (por ejemplo, \"A1:C5\").",
|
||||
"Specify what to clear from the range.": "Especifique qué limpiar del rango.",
|
||||
"The number of the row to be cleared (e.g., 5 for the 5th row).": "El número de la fila a limpiar (por ejemplo, 5 para la quinta fila).",
|
||||
"Specify what to clear from the row.": "Especifique qué borrar de la fila.",
|
||||
"The name for the new worksheet. If not provided, a default name like 'Sheet1' will be assigned.": "El nombre de la nueva hoja de cálculo. Si no se proporciona, se asignará un nombre por defecto como 'Sheet1'.",
|
||||
"Optional: A list of headers to add to the first row. A table will be created from these headers.": "Opcional: Una lista de cabeceras a añadir a la primera fila. Se creará una tabla a partir de estas cabeceras.",
|
||||
"The column to search in.": "La columna en la que buscar.",
|
||||
"The value to find in the lookup column.": "El valor a encontrar en la columna de búsqueda.",
|
||||
"The range of cells to retrieve, in A1 notation (e.g., \"A1:C10\").": "El rango de celdas a recuperar, en notación A1 (por ej., \"A1:C10\").",
|
||||
"The zero-based index of the row to retrieve (e.g., 0 for the first row, 1 for the second).": "El índice cero de la fila a recuperar (por ejemplo, 0 para la primera fila, 1 para la segunda).",
|
||||
"\nThe new name for the worksheet. The name must adhere to the following rules:\n- Cannot be blank.\n- Cannot exceed 31 characters.\n- Must not contain any of the following characters: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- The name \"History\" is reserved by Excel and cannot be used.\n": "\nThe new name for the worksheet. The name must adhere to the following rules:\n- Cannot be blank.\n- Cannot exceed 31 characters.\n- Must not contain any of the following characters: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- The name \"History\" is reserved by Excel and cannot be used.\n",
|
||||
"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.",
|
||||
"All (Contents and Formatting)": "Todo (contenido y formato)",
|
||||
"Contents Only": "Sólo contenido",
|
||||
"Formats Only": "Sólo formatos",
|
||||
"GET": "RECOGER",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "BORRAR",
|
||||
"HEAD": "LIMPIO",
|
||||
"New Row": "Nueva fila",
|
||||
"New Row in Table": "Nueva fila en la tabla",
|
||||
"New Worksheet": "Nueva hoja de trabajo",
|
||||
"Updated Row": "Fila actualizada",
|
||||
"Trigger when a new row is added, and it can include existing rows as well.": "Activar cuando se agrega un nuevo registro, y también puede incluir registros existentes.",
|
||||
"Fires when a new row is added to a table within a worksheet.": "Dispara cuando se agrega un nuevo registro a una tabla dentro de una hoja de cálculo.",
|
||||
"Fires when a new worksheet is created in a workbook.": "Dispara cuando se crea una nueva hoja de trabajo en un libro.",
|
||||
"Fires when a row (in a worksheet) is added or updated.": "Dispara cuando una fila (en una hoja de cálculo) es añadida o actualizada.",
|
||||
"Max Rows to Poll": "Máximas filas a la encuesta",
|
||||
"My table has headers": "Mi tabla tiene cabeceras",
|
||||
"First row has headers": "La primera fila tiene cabeceras",
|
||||
"The maximum number of rows to poll, the rest will be polled on the next run.": "El número máximo de filas a encuestar, el resto serán encuestados en la próxima ejecución.",
|
||||
"Enable this if the first row of your table is a header row.": "Habilita esto si la primera fila de tu tabla es una fila de cabecera.",
|
||||
"Enable this if the first row of your worksheet should be treated as headers.": "Habilite esto si la primera fila de su hoja de trabajo debe ser tratada como cabeceras."
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"Spreadsheet software by Microsoft": "Logiciel de la feuille de calcul par Microsoft",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add ": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - Files.ReadWrite\n - offline_access\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Append Row to Worksheet": "Ajouter la ligne à la feuille de travail",
|
||||
"Get Worksheets": "Obtenir des feuilles de travail",
|
||||
"Get Worksheet Rows": "Récupérer les lignes de feuilles de travail",
|
||||
"Update Worksheet Rows": "Mettre à jour les lignes de la feuille de travail",
|
||||
"Clear Worksheet": "Vider la fiche",
|
||||
"Delete Worksheet": "Supprimer la fiche",
|
||||
"Get Workbooks": "Obtenir des cahiers de travail",
|
||||
"Delete Workbook": "Supprimer le carnet de travail",
|
||||
"Add a Worksheet to a Workbook": "Ajouter une feuille de travail à un cahier de travail",
|
||||
"Get Table Rows": "Récupérer les lignes de la table",
|
||||
"Get Table Columns": "Récupérer les colonnes de la table",
|
||||
"Create Table": "Créer une table",
|
||||
"Delete Table": "Supprimer la table",
|
||||
"Lookup Table Column": "Colonne de table de recherche",
|
||||
"Append Rows to a Table": "Ajouter les lignes à une table",
|
||||
"Convert to Range": "Convertir en Portée",
|
||||
"Create Workbook": "Créer un cahier de travail",
|
||||
"Clear Column by Index": "Effacer la colonne par index",
|
||||
"Clear Cells by Range": "Effacer les cellules à distance",
|
||||
"Clear Row by ID": "Effacer la ligne par ID",
|
||||
"Create Worksheet": "Créer une feuille de calcul",
|
||||
"Find Row": "Trouver une ligne",
|
||||
"Get Cells in Range": "Obtenir des cellules à portée",
|
||||
"Get Row by ID": "Obtenir une ligne par ID",
|
||||
"Get Worksheet by ID": "Obtenir la fiche par ID",
|
||||
"Rename Worksheet": "Renommer la fiche",
|
||||
"Custom API Call": "Appel API personnalisé",
|
||||
"Append row of values to a worksheet": "Ajouter une ligne de valeurs à une feuille de calcul",
|
||||
"Retrieve worksheets from a workbook": "Récupérer les feuilles de travail d'un classeur",
|
||||
"Retrieve rows from a worksheet": "Récupérer les lignes d'une feuille de travail",
|
||||
"Update a row in a worksheet": "Mettre à jour une ligne dans une feuille de calcul",
|
||||
"Clear a worksheet": "Vider une fiche",
|
||||
"Delete a worksheet in a workbook": "Supprimer une feuille de travail dans un cahier de travail",
|
||||
"Retrieve a list of workbooks": "Récupérer une liste de classeurs",
|
||||
"Delete a workbook": "Supprimer un cahier de travail",
|
||||
"Add a worksheet to a workbook": "Ajouter une feuille de travail à un cahier de travail",
|
||||
"List rows of a table in a worksheet": "Liste les lignes d'une table dans une feuille de calcul",
|
||||
"List columns of a table in a worksheet": "Liste les colonnes d'une table dans une feuille de travail",
|
||||
"Create a table in a worksheet": "Créer une table dans une feuille de calcul",
|
||||
"Delete a table from a worksheet": "Supprimer une table d'une feuille de calcul",
|
||||
"Lookup a value in a table column in a worksheet": "Recherche une valeur dans une colonne de table dans une feuille de calcul",
|
||||
"Append rows to a table": "Ajouter des lignes à une table",
|
||||
"Converts a table to a range": "Convertit une table en une plage",
|
||||
"Create a new workbook at the specified location": "Créer un nouveau cahier de travail à l'emplacement spécifié",
|
||||
"Clear contents/formatting of a column by its index.": "Effacer le contenu/formatage d'une colonne par son index.",
|
||||
"Clear a block of cells (range) content or formatting.": "Vider un bloc de cellules (rangées) contenu ou formatage.",
|
||||
"Clear contents/formatting of an entire row by its ID.": "Effacer le contenu/formatage d'une ligne entière par son ID.",
|
||||
"Add a new worksheet (tab) to an existing workbook with optional default headers.": "Ajouter une nouvelle feuille de travail (onglet) à un classeur existant avec des en-têtes optionnels par défaut.",
|
||||
"Locate a row by specifying a lookup column and value (e.g. find a row where “ID” = 123).": "Localisez une ligne en spécifiant une colonne de recherche et une valeur (par exemple, trouver une ligne où « ID» = 123).",
|
||||
"Retrieve the values in a given cell range (e.g., “A1:C10”).": "Récupère les valeurs dans une plage de cellules donnée (par exemple, « A1:C10 »).",
|
||||
" Retrieve the entire content of a row by its row ID.": " Récupère tout le contenu d'une ligne par son identifiant de ligne.",
|
||||
"Retrieve metadata of a worksheet by its ID.": "Récupère les métadonnées d'une feuille par son ID.",
|
||||
"Change the name of an existing worksheet.": "Changer le nom d'une feuille de travail existante.",
|
||||
"Make a custom API call to a specific endpoint": "Passez un appel API personnalisé à un point de terminaison spécifique",
|
||||
"Workbook": "Carnet de travail",
|
||||
"Worksheet": "Feuille de travail",
|
||||
"Does the first row contain headers?": "La première ligne contient-elle des en-têtes ?",
|
||||
"Values": "Valeurs",
|
||||
"Return All": "Retourner tout",
|
||||
"Limit": "Limite",
|
||||
"Range": "Range",
|
||||
"Header Row": "Ligne d'en-tête",
|
||||
"First Data Row": "Première ligne de données",
|
||||
"Row number": "Numéro de ligne",
|
||||
"Worksheet Name": "Nom de la fiche",
|
||||
"Table": "Tableau",
|
||||
"Select Range": "Sélectionner la plage",
|
||||
"Has Headers": "A des entêtes",
|
||||
"Lookup Column": "Colonne de recherche",
|
||||
"Lookup Value": "Valeur de recherche",
|
||||
"Return All Matches": "Retourner tous les matchs",
|
||||
"Name": "Nom",
|
||||
"Parent Folder": "Dossier parent",
|
||||
"Column Index": "Index des colonnes",
|
||||
"Clear Type": "Effacer le type",
|
||||
"Row Number": "Numéro de ligne",
|
||||
"Headers": "En-têtes",
|
||||
"Row ID (Index)": "ID de ligne (Index)",
|
||||
"New Worksheet Name": "Nom de la nouvelle fiche",
|
||||
"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)",
|
||||
"If the first row is headers": "Si la première ligne est des en-têtes",
|
||||
"The values to insert": "Les valeurs à insérer",
|
||||
"If checked, all worksheets will be returned": "Si coché, toutes les feuilles de travail seront retournées",
|
||||
"Limit the number of worksheets returned": "Limiter le nombre de feuilles de travail retournées",
|
||||
"Range of the rows to retrieve (e.g., A2:B2)": "Plage des lignes à récupérer (par exemple, A2:B2)",
|
||||
"Row number of the header": "Numéro de ligne de l'en-tête",
|
||||
"Row number of the first data row": "Numéro de ligne de la première ligne de données",
|
||||
"The row number to update": "Le numéro de ligne à mettre à jour",
|
||||
"The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet": "La plage en notation A1 (par exemple, A2:B2) à effacer dans la feuille de travail, si elle n'est pas fournie, effacer la feuille de travail entière",
|
||||
"Limits the number of workbooks returned, returns all workbooks if empty": "Limite le nombre de classeurs retournés, retourne tous les classeurs si vide",
|
||||
"The name of the new worksheet": "Le nom de la nouvelle fiche",
|
||||
"Limit the number of rows retrieved": "Limiter le nombre de lignes récupérées",
|
||||
"Limit the number of columns retrieved": "Limiter le nombre de colonnes récupérées",
|
||||
"How to select the range for the table": "Comment sélectionner la plage pour la table",
|
||||
"The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table": "La plage de cellules en notation A1 (par exemple, A2:B2) qui seront converties en table",
|
||||
"Whether the range has column labels": "Si la plage a des libellés de colonnes",
|
||||
"The column name to lookup the value in": "Le nom de la colonne dans laquelle rechercher la valeur",
|
||||
"The value to lookup": "La valeur à rechercher",
|
||||
"If checked, all matching rows will be returned": "Si coché, toutes les lignes correspondantes seront retournées",
|
||||
"The name of the new workbook": "Le nom du nouveau classeur",
|
||||
"The parent folder to use": "Le dossier parent à utiliser",
|
||||
"The 1-based index of the column to be cleared (e.g., 1 for column A, 2 for column B).": "L'index basé sur 1 de la colonne à effacer (par exemple, 1 pour la colonne A, 2 pour la colonne B).",
|
||||
"Specify what to clear from the column.": "Spécifie ce qu'il faut effacer de la colonne.",
|
||||
"The range of cells to clear, in A1 notation (e.g., \"A1:C5\").": "La plage de cellules à effacer, en notation A1 (par exemple, \"A1:C5\").",
|
||||
"Specify what to clear from the range.": "Spécifie ce qu'il faut effacer de l'intervalle.",
|
||||
"The number of the row to be cleared (e.g., 5 for the 5th row).": "Le numéro de la ligne à effacer (par exemple, 5 pour la 5ème rangée).",
|
||||
"Specify what to clear from the row.": "Spécifie ce qu'il faut effacer de la ligne.",
|
||||
"The name for the new worksheet. If not provided, a default name like 'Sheet1' will be assigned.": "Le nom de la nouvelle feuille de travail. Si elle n'est pas fournie, un nom par défaut comme 'Sheet1' sera assigné.",
|
||||
"Optional: A list of headers to add to the first row. A table will be created from these headers.": "Optionnel: Une liste d'entêtes à ajouter à la première ligne. Une table sera créée à partir de ces en-têtes.",
|
||||
"The column to search in.": "La colonne à rechercher.",
|
||||
"The value to find in the lookup column.": "La valeur à trouver dans la colonne de recherche.",
|
||||
"The range of cells to retrieve, in A1 notation (e.g., \"A1:C10\").": "La plage de cellules à récupérer, en notation A1 (par exemple, \"A1:C10\").",
|
||||
"The zero-based index of the row to retrieve (e.g., 0 for the first row, 1 for the second).": "L'index basé sur zéro de la ligne à récupérer (par exemple, 0 pour la première ligne, 1 pour la seconde).",
|
||||
"\nThe new name for the worksheet. The name must adhere to the following rules:\n- Cannot be blank.\n- Cannot exceed 31 characters.\n- Must not contain any of the following characters: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- The name \"History\" is reserved by Excel and cannot be used.\n": "\nThe new name for the worksheet. The name must adhere to the following rules:\n- Cannot be blank.\n- Cannot exceed 31 characters.\n- Must not contain any of the following characters: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- The name \"History\" is reserved by Excel and cannot be used.\n",
|
||||
"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 PDFs, les images, etc.",
|
||||
"All (Contents and Formatting)": "Tout (contenu et mise en forme)",
|
||||
"Contents Only": "Contenu uniquement",
|
||||
"Formats Only": "Formats seulement",
|
||||
"GET": "OBTENIR",
|
||||
"POST": "POSTER",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "EFFACER",
|
||||
"DELETE": "SUPPRIMER",
|
||||
"HEAD": "TÊTE",
|
||||
"New Row": "Nouvelle ligne",
|
||||
"New Row in Table": "Nouvelle ligne dans la table",
|
||||
"New Worksheet": "Nouvelle feuille de travail",
|
||||
"Updated Row": "Ligne mise à jour",
|
||||
"Trigger when a new row is added, and it can include existing rows as well.": "Déclenche quand une nouvelle ligne est ajoutée, et peut également inclure des lignes existantes.",
|
||||
"Fires when a new row is added to a table within a worksheet.": "Se déclenche lorsqu'une nouvelle ligne est ajoutée à une table dans une feuille de travail.",
|
||||
"Fires when a new worksheet is created in a workbook.": "Déclenche lorsqu'une nouvelle feuille de travail est créée dans un classeur.",
|
||||
"Fires when a row (in a worksheet) is added or updated.": "Déclenche lorsqu'une ligne (dans une feuille de travail) est ajoutée ou mise à jour.",
|
||||
"Max Rows to Poll": "Nombre maximum de lignes au sondage",
|
||||
"My table has headers": "Mon tableau a des en-têtes",
|
||||
"First row has headers": "La première ligne a des en-têtes",
|
||||
"The maximum number of rows to poll, the rest will be polled on the next run.": "Le nombre maximum de lignes à voter, le reste sera sondé lors de la prochaine exécution.",
|
||||
"Enable this if the first row of your table is a header row.": "Activer cette option si la première ligne de votre table est une ligne d'en-tête.",
|
||||
"Enable this if the first row of your worksheet should be treated as headers.": "Activer cette option si la première ligne de votre feuille de travail doit être traitée comme des en-têtes."
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"Microsoft Excel 365": "Microsoft Excel 365",
|
||||
"Spreadsheet software by Microsoft": "Spreadsheet software by Microsoft",
|
||||
"Authentication for Microsoft Excel 365": "Authentication for Microsoft Excel 365",
|
||||
"Append Row to Worksheet": "Append Row to Worksheet",
|
||||
"Get Worksheets": "Get Worksheets",
|
||||
"Get Worksheet Rows": "Get Worksheet Rows",
|
||||
"Update Worksheet Rows": "Update Worksheet Rows",
|
||||
"Clear Worksheet": "Clear Worksheet",
|
||||
"Delete Worksheet": "Delete Worksheet",
|
||||
"Get Workbooks": "Get Workbooks",
|
||||
"Delete Workbook": "Delete Workbook",
|
||||
"Add a Worksheet to a Workbook": "Add a Worksheet to a Workbook",
|
||||
"Get Table Rows": "Get Table Rows",
|
||||
"Get Table Columns": "Get Table Columns",
|
||||
"Create Table": "Create Table",
|
||||
"Delete Table": "Delete Table",
|
||||
"Lookup Table Column": "Lookup Table Column",
|
||||
"Append Rows to a Table": "Append Rows to a Table",
|
||||
"Convert to Range": "Convert to Range",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Append row of values to a worksheet": "Append row of values to a worksheet",
|
||||
"Retrieve worksheets from a workbook": "Retrieve worksheets from a workbook",
|
||||
"Retrieve rows from a worksheet": "Retrieve rows from a worksheet",
|
||||
"Update a row in a worksheet": "Update a row in a worksheet",
|
||||
"Clear a worksheet": "Clear a worksheet",
|
||||
"Delete a worksheet in a workbook": "Delete a worksheet in a workbook",
|
||||
"Retrieve a list of workbooks": "Retrieve a list of workbooks",
|
||||
"Delete a workbook": "Delete a workbook",
|
||||
"Add a worksheet to a workbook": "Add a worksheet to a workbook",
|
||||
"List rows of a table in a worksheet": "List rows of a table in a worksheet",
|
||||
"List columns of a table in a worksheet": "List columns of a table in a worksheet",
|
||||
"Create a table in a worksheet": "Create a table in a worksheet",
|
||||
"Delete a table from a worksheet": "Delete a table from a worksheet",
|
||||
"Lookup a value in a table column in a worksheet": "Lookup a value in a table column in a worksheet",
|
||||
"Append rows to a table": "Append rows to a table",
|
||||
"Converts a table to a range": "Converts a table to a range",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Workbook": "Workbook",
|
||||
"Worksheet": "Worksheet",
|
||||
"Does the first row contain headers?": "Does the first row contain headers?",
|
||||
"Values": "Values",
|
||||
"Return All": "Return All",
|
||||
"Limit": "Limit",
|
||||
"Range": "Range",
|
||||
"Header Row": "Header Row",
|
||||
"First Data Row": "First Data Row",
|
||||
"Row number": "Row number",
|
||||
"Worksheet Name": "Worksheet Name",
|
||||
"Table": "Table",
|
||||
"Select Range": "Select Range",
|
||||
"Has Headers": "Has Headers",
|
||||
"Lookup Column": "Lookup Column",
|
||||
"Lookup Value": "Lookup Value",
|
||||
"Return All Matches": "Return All Matches",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"If the first row is headers": "If the first row is headers",
|
||||
"The values to insert": "The values to insert",
|
||||
"If checked, all worksheets will be returned": "If checked, all worksheets will be returned",
|
||||
"Limit the number of worksheets returned": "Limit the number of worksheets returned",
|
||||
"Range of the rows to retrieve (e.g., A2:B2)": "Range of the rows to retrieve (e.g., A2:B2)",
|
||||
"Row number of the header": "Row number of the header",
|
||||
"Row number of the first data row": "Row number of the first data row",
|
||||
"The row number to update": "The row number to update",
|
||||
"The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet": "The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet",
|
||||
"Limits the number of workbooks returned, returns all workbooks if empty": "Limits the number of workbooks returned, returns all workbooks if empty",
|
||||
"The name of the new worksheet": "The name of the new worksheet",
|
||||
"Limit the number of rows retrieved": "Limit the number of rows retrieved",
|
||||
"Limit the number of columns retrieved": "Limit the number of columns retrieved",
|
||||
"How to select the range for the table": "How to select the range for the table",
|
||||
"The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table": "The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table",
|
||||
"Whether the range has column labels": "Whether the range has column labels",
|
||||
"The column name to lookup the value in": "The column name to lookup the value in",
|
||||
"The value to lookup": "The value to lookup",
|
||||
"If checked, all matching rows will be returned": "If checked, all matching rows will be returned",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Row": "New Row",
|
||||
"Trigger when a new row is added, and it can include existing rows as well.": "Trigger when a new row is added, and it can include existing rows as well.",
|
||||
"Max Rows to Poll": "Max Rows to Poll",
|
||||
"The maximum number of rows to poll, the rest will be polled on the next run.": "The maximum number of rows to poll, the rest will be polled on the next run."
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"Microsoft Excel 365": "Microsoft Excel 365",
|
||||
"Spreadsheet software by Microsoft": "Spreadsheet software by Microsoft",
|
||||
"Authentication for Microsoft Excel 365": "Authentication for Microsoft Excel 365",
|
||||
"Append Row to Worksheet": "Append Row to Worksheet",
|
||||
"Get Worksheets": "Get Worksheets",
|
||||
"Get Worksheet Rows": "Get Worksheet Rows",
|
||||
"Update Worksheet Rows": "Update Worksheet Rows",
|
||||
"Clear Worksheet": "Clear Worksheet",
|
||||
"Delete Worksheet": "Delete Worksheet",
|
||||
"Get Workbooks": "Get Workbooks",
|
||||
"Delete Workbook": "Delete Workbook",
|
||||
"Add a Worksheet to a Workbook": "Add a Worksheet to a Workbook",
|
||||
"Get Table Rows": "Get Table Rows",
|
||||
"Get Table Columns": "Get Table Columns",
|
||||
"Create Table": "Create Table",
|
||||
"Delete Table": "Delete Table",
|
||||
"Lookup Table Column": "Lookup Table Column",
|
||||
"Append Rows to a Table": "Append Rows to a Table",
|
||||
"Convert to Range": "Convert to Range",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Append row of values to a worksheet": "Append row of values to a worksheet",
|
||||
"Retrieve worksheets from a workbook": "Retrieve worksheets from a workbook",
|
||||
"Retrieve rows from a worksheet": "Retrieve rows from a worksheet",
|
||||
"Update a row in a worksheet": "Update a row in a worksheet",
|
||||
"Clear a worksheet": "Clear a worksheet",
|
||||
"Delete a worksheet in a workbook": "Delete a worksheet in a workbook",
|
||||
"Retrieve a list of workbooks": "Retrieve a list of workbooks",
|
||||
"Delete a workbook": "Delete a workbook",
|
||||
"Add a worksheet to a workbook": "Add a worksheet to a workbook",
|
||||
"List rows of a table in a worksheet": "List rows of a table in a worksheet",
|
||||
"List columns of a table in a worksheet": "List columns of a table in a worksheet",
|
||||
"Create a table in a worksheet": "Create a table in a worksheet",
|
||||
"Delete a table from a worksheet": "Delete a table from a worksheet",
|
||||
"Lookup a value in a table column in a worksheet": "Lookup a value in a table column in a worksheet",
|
||||
"Append rows to a table": "Append rows to a table",
|
||||
"Converts a table to a range": "Converts a table to a range",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Workbook": "Workbook",
|
||||
"Worksheet": "Worksheet",
|
||||
"Does the first row contain headers?": "Does the first row contain headers?",
|
||||
"Values": "Values",
|
||||
"Return All": "Return All",
|
||||
"Limit": "Limit",
|
||||
"Range": "Range",
|
||||
"Header Row": "Header Row",
|
||||
"First Data Row": "First Data Row",
|
||||
"Row number": "Row number",
|
||||
"Worksheet Name": "Worksheet Name",
|
||||
"Table": "Table",
|
||||
"Select Range": "Select Range",
|
||||
"Has Headers": "Has Headers",
|
||||
"Lookup Column": "Lookup Column",
|
||||
"Lookup Value": "Lookup Value",
|
||||
"Return All Matches": "Return All Matches",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"If the first row is headers": "If the first row is headers",
|
||||
"The values to insert": "The values to insert",
|
||||
"If checked, all worksheets will be returned": "If checked, all worksheets will be returned",
|
||||
"Limit the number of worksheets returned": "Limit the number of worksheets returned",
|
||||
"Range of the rows to retrieve (e.g., A2:B2)": "Range of the rows to retrieve (e.g., A2:B2)",
|
||||
"Row number of the header": "Row number of the header",
|
||||
"Row number of the first data row": "Row number of the first data row",
|
||||
"The row number to update": "The row number to update",
|
||||
"The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet": "The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet",
|
||||
"Limits the number of workbooks returned, returns all workbooks if empty": "Limits the number of workbooks returned, returns all workbooks if empty",
|
||||
"The name of the new worksheet": "The name of the new worksheet",
|
||||
"Limit the number of rows retrieved": "Limit the number of rows retrieved",
|
||||
"Limit the number of columns retrieved": "Limit the number of columns retrieved",
|
||||
"How to select the range for the table": "How to select the range for the table",
|
||||
"The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table": "The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table",
|
||||
"Whether the range has column labels": "Whether the range has column labels",
|
||||
"The column name to lookup the value in": "The column name to lookup the value in",
|
||||
"The value to lookup": "The value to lookup",
|
||||
"If checked, all matching rows will be returned": "If checked, all matching rows will be returned",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Row": "New Row",
|
||||
"Trigger when a new row is added, and it can include existing rows as well.": "Trigger when a new row is added, and it can include existing rows as well.",
|
||||
"Max Rows to Poll": "Max Rows to Poll",
|
||||
"The maximum number of rows to poll, the rest will be polled on the next run.": "The maximum number of rows to poll, the rest will be polled on the next run."
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"Spreadsheet software by Microsoft": "Microsoftによるスプレッドシートソフトウェア",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add ": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - Files.ReadWrite\n - offline_access\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Append Row to Worksheet": "行をワークシートに追加",
|
||||
"Get Worksheets": "ワークシートを取得",
|
||||
"Get Worksheet Rows": "ワークシート行を取得",
|
||||
"Update Worksheet Rows": "ワークシートの行を更新",
|
||||
"Clear Worksheet": "ワークシートをクリア",
|
||||
"Delete Worksheet": "ワークシートを削除",
|
||||
"Get Workbooks": "ワークブックを入手",
|
||||
"Delete Workbook": "ワークブックを削除",
|
||||
"Add a Worksheet to a Workbook": "ワークシートをワークブックに追加",
|
||||
"Get Table Rows": "表行の取得",
|
||||
"Get Table Columns": "テーブル列の取得",
|
||||
"Create Table": "テーブルを作成",
|
||||
"Delete Table": "テーブルの削除",
|
||||
"Lookup Table Column": "ルックアップテーブルの列",
|
||||
"Append Rows to a Table": "表に行を追加",
|
||||
"Convert to Range": "範囲に変換",
|
||||
"Create Workbook": "ワークブックを作成",
|
||||
"Clear Column by Index": "インデックスで列をクリア",
|
||||
"Clear Cells by Range": "範囲でセルをクリア",
|
||||
"Clear Row by ID": "IDで行をクリア",
|
||||
"Create Worksheet": "ワークシートを作成",
|
||||
"Find Row": "行を検索",
|
||||
"Get Cells in Range": "セル範囲を取得する",
|
||||
"Get Row by ID": "IDで行を取得",
|
||||
"Get Worksheet by ID": "ワークシートを ID で取得",
|
||||
"Rename Worksheet": "ワークシートの名前を変更",
|
||||
"Custom API Call": "カスタムAPI通話",
|
||||
"Append row of values to a worksheet": "ワークシートに値の行を追加",
|
||||
"Retrieve worksheets from a workbook": "ワークブックからワークシートを取得",
|
||||
"Retrieve rows from a worksheet": "ワークシートから行を取得",
|
||||
"Update a row in a worksheet": "ワークシートの行を更新",
|
||||
"Clear a worksheet": "ワークシートをクリア",
|
||||
"Delete a worksheet in a workbook": "ワークブック内のワークシートを削除",
|
||||
"Retrieve a list of workbooks": "ワークブックの一覧を取得",
|
||||
"Delete a workbook": "ブックを削除する",
|
||||
"Add a worksheet to a workbook": "ワークシートをワークブックに追加",
|
||||
"List rows of a table in a worksheet": "ワークシート内のテーブルの行の一覧",
|
||||
"List columns of a table in a worksheet": "ワークシート内のテーブルの列のリスト",
|
||||
"Create a table in a worksheet": "ワークシートにテーブルを作成",
|
||||
"Delete a table from a worksheet": "ワークシートからテーブルを削除",
|
||||
"Lookup a value in a table column in a worksheet": "ワークシート内のテーブル列の値を参照する",
|
||||
"Append rows to a table": "テーブルに行を追加",
|
||||
"Converts a table to a range": "テーブルを範囲に変換します",
|
||||
"Create a new workbook at the specified location": "指定された場所に新しいブックを作成",
|
||||
"Clear contents/formatting of a column by its index.": "インデックスで列の内容/書式をクリアします。",
|
||||
"Clear a block of cells (range) content or formatting.": "セル(範囲)の内容や書式設定のブロックをクリアします。",
|
||||
"Clear contents/formatting of an entire row by its ID.": "行全体の内容/書式を ID でクリアします。",
|
||||
"Add a new worksheet (tab) to an existing workbook with optional default headers.": "新しいワークシート(タブ)を既存のワークブックに追加します。",
|
||||
"Locate a row by specifying a lookup column and value (e.g. find a row where “ID” = 123).": "検索列と値を指定して行を探します(例えば、「ID」=123の行を探します)。",
|
||||
"Retrieve the values in a given cell range (e.g., “A1:C10”).": "指定されたセル範囲の値を取得します (例: A1:C10)。",
|
||||
" Retrieve the entire content of a row by its row ID.": " 行IDで行全体の内容を取得します。",
|
||||
"Retrieve metadata of a worksheet by its ID.": "IDでワークシートのメタデータを取得します。",
|
||||
"Change the name of an existing worksheet.": "既存のワークシートの名前を変更します。",
|
||||
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
|
||||
"Workbook": "ワークブック",
|
||||
"Worksheet": "ワークシート",
|
||||
"Does the first row contain headers?": "最初の行にはヘッダーが含まれていますか?",
|
||||
"Values": "値",
|
||||
"Return All": "すべて戻る",
|
||||
"Limit": "制限",
|
||||
"Range": "Range",
|
||||
"Header Row": "ヘッダー行",
|
||||
"First Data Row": "最初のデータ行",
|
||||
"Row number": "行番号",
|
||||
"Worksheet Name": "ワークシート名",
|
||||
"Table": "表",
|
||||
"Select Range": "範囲の選択",
|
||||
"Has Headers": "ヘッダーがあります",
|
||||
"Lookup Column": "検索列",
|
||||
"Lookup Value": "ルックアップの値",
|
||||
"Return All Matches": "すべての一致を返す",
|
||||
"Name": "名前",
|
||||
"Parent Folder": "親フォルダ",
|
||||
"Column Index": "列のインデックス",
|
||||
"Clear Type": "タイプをクリア",
|
||||
"Row Number": "行番号",
|
||||
"Headers": "ヘッダー",
|
||||
"Row ID (Index)": "行 ID (インデックス)",
|
||||
"New Worksheet Name": "新しいワークシート名",
|
||||
"Method": "方法",
|
||||
"Query Parameters": "クエリパラメータ",
|
||||
"Body": "本文",
|
||||
"Response is Binary ?": "応答はバイナリですか?",
|
||||
"No Error on Failure": "失敗時にエラーはありません",
|
||||
"Timeout (in seconds)": "タイムアウト(秒)",
|
||||
"If the first row is headers": "最初の行がヘッダーの場合",
|
||||
"The values to insert": "挿入する値",
|
||||
"If checked, all worksheets will be returned": "チェックされている場合、すべてのワークシートが返されます",
|
||||
"Limit the number of worksheets returned": "返されるワークシートの数を制限する",
|
||||
"Range of the rows to retrieve (e.g., A2:B2)": "取得する行の範囲 (例: A2:B2)",
|
||||
"Row number of the header": "ヘッダーの行番号",
|
||||
"Row number of the first data row": "最初のデータ行の行番号",
|
||||
"The row number to update": "更新する行番号",
|
||||
"The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet": "A1 表記の範囲 (例: A2:B2) が指定されていない場合、ワークシート全体をクリアします",
|
||||
"Limits the number of workbooks returned, returns all workbooks if empty": "返されたワークブックの数を制限します。空の場合はすべてのワークブックを返します。",
|
||||
"The name of the new worksheet": "新しいワークシートの名前",
|
||||
"Limit the number of rows retrieved": "取得した行数を制限する",
|
||||
"Limit the number of columns retrieved": "取得した列の数を制限する",
|
||||
"How to select the range for the table": "表の範囲を選択する方法",
|
||||
"The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table": "A1表記のセル範囲 (例:A2:B2) がテーブルに変換されます。",
|
||||
"Whether the range has column labels": "範囲に列ラベルがあるかどうか",
|
||||
"The column name to lookup the value in": "値を検索する列名",
|
||||
"The value to lookup": "検索する値",
|
||||
"If checked, all matching rows will be returned": "チェックされている場合、一致するすべての行が返されます",
|
||||
"The name of the new workbook": "新しいブックの名前",
|
||||
"The parent folder to use": "使用する親フォルダ",
|
||||
"The 1-based index of the column to be cleared (e.g., 1 for column A, 2 for column B).": "クリアする列の1ベースのインデックス(例えば、Aの場合は1、Bの場合は2)です。",
|
||||
"Specify what to clear from the column.": "列から消去するものを指定します。",
|
||||
"The range of cells to clear, in A1 notation (e.g., \"A1:C5\").": "A1表記(例:A1:C5)でクリアするセルの範囲。",
|
||||
"Specify what to clear from the range.": "範囲からクリアするものを指定します。",
|
||||
"The number of the row to be cleared (e.g., 5 for the 5th row).": "クリアする行の数(例:5行目)。",
|
||||
"Specify what to clear from the row.": "行からクリアする項目を指定します。",
|
||||
"The name for the new worksheet. If not provided, a default name like 'Sheet1' will be assigned.": "新しいワークシートの名前。指定されていない場合は、'Sheet1' のようなデフォルトの名前が割り当てられます。",
|
||||
"Optional: A list of headers to add to the first row. A table will be created from these headers.": "オプション: 最初の行に追加するヘッダーのリスト。これらのヘッダーからテーブルが作成されます。",
|
||||
"The column to search in.": "検索するカラム。",
|
||||
"The value to find in the lookup column.": "ルックアップ列で検索する値。",
|
||||
"The range of cells to retrieve, in A1 notation (e.g., \"A1:C10\").": "取得するセルの範囲(例:A1:C10\")。",
|
||||
"The zero-based index of the row to retrieve (e.g., 0 for the first row, 1 for the second).": "取得する行のゼロベースのインデックス(最初の行の場合は0、2番目の行の場合は1)です。",
|
||||
"\nThe new name for the worksheet. The name must adhere to the following rules:\n- Cannot be blank.\n- Cannot exceed 31 characters.\n- Must not contain any of the following characters: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- The name \"History\" is reserved by Excel and cannot be used.\n": "\nThe new name for the worksheet. The name must adhere to the following rules:\n- Cannot be blank.\n- Cannot exceed 31 characters.\n- Must not contain any of the following characters: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- The name \"History\" is reserved by Excel and cannot be used.\n",
|
||||
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
|
||||
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
|
||||
"All (Contents and Formatting)": "すべて(内容と書式設定)",
|
||||
"Contents Only": "内容のみ",
|
||||
"Formats Only": "書式のみ",
|
||||
"GET": "取得",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "削除",
|
||||
"HEAD": "頭",
|
||||
"New Row": "新しい行",
|
||||
"New Row in Table": "新しい行",
|
||||
"New Worksheet": "新しいワークシート",
|
||||
"Updated Row": "更新行",
|
||||
"Trigger when a new row is added, and it can include existing rows as well.": "新しい行が追加されたときにトリガーされ、既存の行も含めることができます。",
|
||||
"Fires when a new row is added to a table within a worksheet.": "ワークシート内のテーブルに新しい行が追加されたときに発生します。",
|
||||
"Fires when a new worksheet is created in a workbook.": "ワークブックに新しいワークシートが作成されたときに発火します。",
|
||||
"Fires when a row (in a worksheet) is added or updated.": "行(ワークシート内)が追加または更新されたときに発火します。",
|
||||
"Max Rows to Poll": "アンケートへの最大行",
|
||||
"My table has headers": "私のテーブルにはヘッダーがあります",
|
||||
"First row has headers": "最初の行にヘッダーがあります",
|
||||
"The maximum number of rows to poll, the rest will be polled on the next run.": "アンケートする行の最大数。残りは次の実行時にポーリングされます。",
|
||||
"Enable this if the first row of your table is a header row.": "テーブルの最初の行がヘッダー行の場合、これを有効にします。",
|
||||
"Enable this if the first row of your worksheet should be treated as headers.": "ワークシートの最初の行をヘッダーとして扱う場合は、これを有効にします。"
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"Spreadsheet software by Microsoft": "Spreadsheet software van Microsoft",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add ": "\n1. Log in bij [Microsoft Azure Portal](https://portal.azure.com/).\n. Ga naar **Microsoft Enfra ID**.\n3. Onder **Beheren**, klik op **App registraties**.\n4. Klik op de **Nieuwe registratie** knop.\n5. Voer een **Naam** in voor uw app.\n6. Voor **Ondersteunde accounttypen**, kies keuze:\n - **Accounts in elke map van de organisatie (Any Microsoft Entra ID-tenant - Multitenant) en persoonlijke Microsoft accounts**\n - Of selecteer gebaseerd op uw vereiste.\n7. In **Redirect URI** selecteer **Web** en voeg de opgegeven URL toe.\n8. Klik op **Register**.\n9. Na registratie wordt u doorverwezen naar de overzichtspagina. Kopieer de **Applicatie (client) ID**.\n10. Vanuit het linkermenu ga naar **Certificaten & geheimen**.\n - Klik onder **Client geheimen** op **Nieuwe client geheim**.\n - Geef een beschrijving, verloop, en klik **Toevoegen**.\n - Kopieer de **Waarde** van de client secret (dit zal niet meer worden getoond).\n11. Ga naar **API-rechten** vanuit het linkermenu.\n - Klik **Een machtiging toevoegen**.\n - Selecteer **Microsoft Graph** → **gedelegeerde machtigingen**.\n - Voeg de volgende toepassingsgebieden toe:\n - Bestanden. eadWrite\n - offline_access \n - Klik **Permissies toevoegen**.\n12. Kopieer uw **Client ID** en **Client Secret**.\n",
|
||||
"Append Row to Worksheet": "Rij toevoegen aan werkblad",
|
||||
"Get Worksheets": "Haal werkbladen op",
|
||||
"Get Worksheet Rows": "Werkblad Regels ophalen",
|
||||
"Update Worksheet Rows": "Werkblad Regels bijwerken",
|
||||
"Clear Worksheet": "Verwijder werkblad",
|
||||
"Delete Worksheet": "Werkblad verwijderen",
|
||||
"Get Workbooks": "Werkboeken ophalen",
|
||||
"Delete Workbook": "Werkboek verwijderen",
|
||||
"Add a Worksheet to a Workbook": "Voeg een werkblad toe aan een werkboek",
|
||||
"Get Table Rows": "Verkrijg Tafelregels",
|
||||
"Get Table Columns": "Tabel kolommen ophalen",
|
||||
"Create Table": "Tabel maken",
|
||||
"Delete Table": "Tabel verwijderen",
|
||||
"Lookup Table Column": "Tabel kolom opzoeken",
|
||||
"Append Rows to a Table": "Rijen toevoegen aan een tabel",
|
||||
"Convert to Range": "Converteren naar Bereik",
|
||||
"Create Workbook": "Takenboek aanmaken",
|
||||
"Clear Column by Index": "Kolom wissen op index",
|
||||
"Clear Cells by Range": "Wis antennes per bereik",
|
||||
"Clear Row by ID": "Rij wissen via ID",
|
||||
"Create Worksheet": "Werkblad aanmaken",
|
||||
"Find Row": "Rij zoeken",
|
||||
"Get Cells in Range": "Krijg Cellen in bereik",
|
||||
"Get Row by ID": "Krijg Rij op ID",
|
||||
"Get Worksheet by ID": "Haal het werkblad op via ID",
|
||||
"Rename Worksheet": "Werkblad hernoemen",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Append row of values to a worksheet": "Voeg rij van waarden toe aan een werkblad",
|
||||
"Retrieve worksheets from a workbook": "Werkbladen ophalen uit een werkboek",
|
||||
"Retrieve rows from a worksheet": "Ophalen rijen van een werkblad",
|
||||
"Update a row in a worksheet": "Een rij in een werkblad bijwerken",
|
||||
"Clear a worksheet": "Wis een werkblad",
|
||||
"Delete a worksheet in a workbook": "Verwijder een werkblad in een werkboek",
|
||||
"Retrieve a list of workbooks": "Haal een lijst op met workbooks",
|
||||
"Delete a workbook": "Een werkboek verwijderen",
|
||||
"Add a worksheet to a workbook": "Een werkblad toevoegen aan een werkboek",
|
||||
"List rows of a table in a worksheet": "Rijen van een tabel in een werkblad weergeven",
|
||||
"List columns of a table in a worksheet": "Kolommen weergeven van een tabel in een werkblad",
|
||||
"Create a table in a worksheet": "Tabel aanmaken in een werkblad",
|
||||
"Delete a table from a worksheet": "Een tabel uit een werkblad verwijderen",
|
||||
"Lookup a value in a table column in a worksheet": "Zoek een waarde in een tabelkolom in een werkblad",
|
||||
"Append rows to a table": "Rijen toevoegen aan een tabel",
|
||||
"Converts a table to a range": "Zet een tabel om naar een bereik",
|
||||
"Create a new workbook at the specified location": "Maak een nieuw werkboek op de opgegeven locatie",
|
||||
"Clear contents/formatting of a column by its index.": "Verwijder content/opmaak van een kolom door de index.",
|
||||
"Clear a block of cells (range) content or formatting.": "Wis een blok van cellen (bereik) inhoud of formattering.",
|
||||
"Clear contents/formatting of an entire row by its ID.": "Verwijder content/formattering van een hele rij via zijn ID.",
|
||||
"Add a new worksheet (tab) to an existing workbook with optional default headers.": "Voeg een nieuw werkblad (tab) toe aan een bestaand werkboek met optionele standaard headers.",
|
||||
"Locate a row by specifying a lookup column and value (e.g. find a row where “ID” = 123).": "Zoek een rij door een kolom en waarde op te geven (bijv. zoek een rij waar \"ID\" = 123).",
|
||||
"Retrieve the values in a given cell range (e.g., “A1:C10”).": "Haal de waarden op in een bepaald bereik (bv. \"A1:C10\").",
|
||||
" Retrieve the entire content of a row by its row ID.": " Haal de gehele inhoud van een rij op met zijn rij ID.",
|
||||
"Retrieve metadata of a worksheet by its ID.": "Haal metadata van een werkblad op met de ID ervan.",
|
||||
"Change the name of an existing worksheet.": "Wijzig de naam van een bestaand werkblad.",
|
||||
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
|
||||
"Workbook": "Werkboek",
|
||||
"Worksheet": "Werkblad",
|
||||
"Does the first row contain headers?": "Bevat de eerste rij headers?",
|
||||
"Values": "Waarden",
|
||||
"Return All": "Retourneer alles",
|
||||
"Limit": "Limiet",
|
||||
"Range": "Range",
|
||||
"Header Row": "Kopregel rij",
|
||||
"First Data Row": "Eerste Data Rij",
|
||||
"Row number": "Rij nummer",
|
||||
"Worksheet Name": "Werkblad naam",
|
||||
"Table": "Tabel",
|
||||
"Select Range": "Selecteer bereik",
|
||||
"Has Headers": "Heeft headers",
|
||||
"Lookup Column": "Kolom opzoeken",
|
||||
"Lookup Value": "Opzoeken Waarde",
|
||||
"Return All Matches": "Retourneer alle overeenkomsten",
|
||||
"Name": "Naam",
|
||||
"Parent Folder": "Bovenliggende map",
|
||||
"Column Index": "Kolom Index",
|
||||
"Clear Type": "Type leegmaken",
|
||||
"Row Number": "Rij nummer",
|
||||
"Headers": "Kopteksten",
|
||||
"Row ID (Index)": "Rij ID (Index)",
|
||||
"New Worksheet Name": "Naam nieuwe werkblad",
|
||||
"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)",
|
||||
"If the first row is headers": "Als de eerste rij headers zijn",
|
||||
"The values to insert": "De waarden om in te voegen",
|
||||
"If checked, all worksheets will be returned": "Indien aangevinkt, worden alle werkbladen teruggestuurd",
|
||||
"Limit the number of worksheets returned": "Beperk het aantal terugkerende werkbladen",
|
||||
"Range of the rows to retrieve (e.g., A2:B2)": "Bereik van de op te halen rijen (bijv. A2:B2)",
|
||||
"Row number of the header": "Rij nummer van de header",
|
||||
"Row number of the first data row": "Rij nummer van de eerste gegevensrij",
|
||||
"The row number to update": "Het rij nummer om te updaten",
|
||||
"The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet": "Het bereik van A1 notatie (bijv. A2:B2) om het werkblad te wissen, indien niet opgegeven, wis het volledige werkblad",
|
||||
"Limits the number of workbooks returned, returns all workbooks if empty": "Beperkt het aantal geretourneerde werkboeken, retourneert alle werkboeken indien leeg",
|
||||
"The name of the new worksheet": "De naam van het nieuwe werkblad",
|
||||
"Limit the number of rows retrieved": "Limiteer het aantal rijen die opgehaald zijn",
|
||||
"Limit the number of columns retrieved": "Limiteer het aantal opgehaalde kolommen",
|
||||
"How to select the range for the table": "Hoe het bereik van de tabel te selecteren",
|
||||
"The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table": "Het bereik van cellen in A1 notatie (bijv. A2:B2) die worden geconverteerd naar een tabel",
|
||||
"Whether the range has column labels": "Of het bereik kolomlabels heeft",
|
||||
"The column name to lookup the value in": "De kolomnaam om de waarde in te zoeken",
|
||||
"The value to lookup": "De waarde om op te zoeken",
|
||||
"If checked, all matching rows will be returned": "Indien aangevinkt, worden alle overeenkomende rijen teruggestuurd",
|
||||
"The name of the new workbook": "De naam van het nieuwe werkboek",
|
||||
"The parent folder to use": "De te gebruiken bovenliggende map",
|
||||
"The 1-based index of the column to be cleared (e.g., 1 for column A, 2 for column B).": "De 1-gebaseerde index van de op te ruimen kolom (bijv. 1 voor kolom A, 2 voor kolom B).",
|
||||
"Specify what to clear from the column.": "Geef aan wat uit de kolom moet worden gewist.",
|
||||
"The range of cells to clear, in A1 notation (e.g., \"A1:C5\").": "Het bereik van cellen om te tonen, in A1 notatie (bijv. \"A1:C5\").",
|
||||
"Specify what to clear from the range.": "Geef aan wat je moet wissen vanuit het bereik.",
|
||||
"The number of the row to be cleared (e.g., 5 for the 5th row).": "Het nummer van de rij die moet worden gewist (bijv. 5 voor de 5e rij).",
|
||||
"Specify what to clear from the row.": "Geef aan wat je van rij moet opruimen.",
|
||||
"The name for the new worksheet. If not provided, a default name like 'Sheet1' will be assigned.": "De naam voor het nieuwe werkblad. Indien niet opgegeven, zal er een standaardnaam zoals 'Sheet1' worden toegewezen.",
|
||||
"Optional: A list of headers to add to the first row. A table will be created from these headers.": "Optioneel: een lijst van koppen om toe te voegen aan de eerste rij. Een tabel zal worden gemaakt op basis van deze headers.",
|
||||
"The column to search in.": "De kolom om in te zoeken.",
|
||||
"The value to find in the lookup column.": "De waarde te vinden in de zoek kolom.",
|
||||
"The range of cells to retrieve, in A1 notation (e.g., \"A1:C10\").": "Het bereik van cellen om op te halen, in A1 notatie (bijv. \"A1:C10\").",
|
||||
"The zero-based index of the row to retrieve (e.g., 0 for the first row, 1 for the second).": "De op nul gebaseerde index van de rij op te halen (vb. 0 voor de eerste rij, 1 voor de tweede).",
|
||||
"\nThe new name for the worksheet. The name must adhere to the following rules:\n- Cannot be blank.\n- Cannot exceed 31 characters.\n- Must not contain any of the following characters: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- The name \"History\" is reserved by Excel and cannot be used.\n": "\nDe nieuwe naam voor het werkblad. De naam moet zich houden aan de volgende regels:\n- mag niet leeg zijn.\n- mag niet langer zijn dan 31 tekens.\n- Moet geen van de volgende tekens bevatten: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- De naam \"Geschiedenis\" is gereserveerd door Excel en kan niet worden gebruikt.\n",
|
||||
"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..",
|
||||
"All (Contents and Formatting)": "Alle (inhoud en formaten)",
|
||||
"Contents Only": "Alleen inhoud",
|
||||
"Formats Only": "Alleen formaten",
|
||||
"GET": "KRIJG",
|
||||
"POST": "POSTE",
|
||||
"PATCH": "BEKIJK",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "VERWIJDEREN",
|
||||
"HEAD": "HOOFD",
|
||||
"New Row": "Nieuwe rij",
|
||||
"New Row in Table": "Nieuwe rij in tafel",
|
||||
"New Worksheet": "Nieuw werkblad",
|
||||
"Updated Row": "Bijgewerkt Rij",
|
||||
"Trigger when a new row is added, and it can include existing rows as well.": "Trigger wanneer een nieuwe rij wordt toegevoegd, en het kan ook bestaande rijen bevatten.",
|
||||
"Fires when a new row is added to a table within a worksheet.": "Vuurt wanneer een nieuwe rij wordt toegevoegd aan een tafel binnen een werkblad.",
|
||||
"Fires when a new worksheet is created in a workbook.": "Vuurt af wanneer een nieuwe werkblad in een werkboek wordt gemaakt.",
|
||||
"Fires when a row (in a worksheet) is added or updated.": "Vuurt wanneer een rij (in een werkblad) is toegevoegd of bijgewerkt.",
|
||||
"Max Rows to Poll": "Maximaal aantal rijen naar Poll",
|
||||
"My table has headers": "Mijn tabel heeft headers",
|
||||
"First row has headers": "Eerste rij heeft headers",
|
||||
"The maximum number of rows to poll, the rest will be polled on the next run.": "Het maximum aantal rijen om te politeren, de rest zal worden opgevraagd bij de volgende uitvoer.",
|
||||
"Enable this if the first row of your table is a header row.": "Schakel dit in als de eerste rij van de tabel een kopregel is.",
|
||||
"Enable this if the first row of your worksheet should be treated as headers.": "Schakel dit in als de eerste rij van uw werkblad als koppen behandeld moet worden."
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"Spreadsheet software by Microsoft": "Software de planilha da Microsoft",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add ": "\n1. Entre no [Microsoft Azure Portal](https://portal.azure.com/).\n. Na barra lateral esquerda, vá até **Microsoft Enfra ID**.\n3. Sob **Gerenciar**, clique em **Aplicativos registrados**.\n4. Clique no botão **Novo registro**.\n5. Digite um **Nome** para o seu aplicativo.\n6. Para **Tipos de conta suportados**, escolha:\n - **Contas em qualquer diretório organizacional (qualquer inquilino de ID da Microsoft Entra - Multitenant) e contas pessoais da Microsoft**\n - Ou selecione com base nos seus requisitos.\n7. Em **URI de redirecionamento**, selecione **Web** e adicione a URL fornecida.\n8. Clique em **Registrar**.\n9. Após o registro, você será redirecionado para a página de visão geral do aplicativo. Copie o **aplicativo (cliente) ID**.\n10. Do menu à esquerda, vá para **Certificados e segredos**.\n - Em **Segredos do Cliente**, clique em **Novo segredo do Cliente**.\n - Fornece uma descrição, define um vencimento e clique em **Adicionar**.\n - Copiar o **Valor** do segredo do cliente (não será mostrado novamente).\n11. Vá para **Permissões da API** no menu à esquerda.\n - Clique em **Adicionar permissão**.\n - Selecione **Microsoft Graph** → **Delegated permissions**.\n - Adicione os seguintes escopos:\n - Arquivos. eadWrite\n - offline_access \n - Clique em **Adicionar permissões**.\n12. Copie seu **ID do Cliente** e **Segredo do Cliente**.\n",
|
||||
"Append Row to Worksheet": "Acrescentar linha à planilha",
|
||||
"Get Worksheets": "Obter planilhas",
|
||||
"Get Worksheet Rows": "Obter Linhas de Planilha",
|
||||
"Update Worksheet Rows": "Atualizar Planilha Rows",
|
||||
"Clear Worksheet": "Limpar planilha",
|
||||
"Delete Worksheet": "Excluir planilha",
|
||||
"Get Workbooks": "Obter Workbooks",
|
||||
"Delete Workbook": "Excluir Atividades",
|
||||
"Add a Worksheet to a Workbook": "Adicionar uma planilha ao workbook",
|
||||
"Get Table Rows": "Obter Linhas da Tabela",
|
||||
"Get Table Columns": "Obter colunas da Tabela",
|
||||
"Create Table": "Criar tabela",
|
||||
"Delete Table": "Excluir Tabela",
|
||||
"Lookup Table Column": "Procurar Coluna da Tabela",
|
||||
"Append Rows to a Table": "Acrescentar linhas a uma tabela",
|
||||
"Convert to Range": "Converter em gama",
|
||||
"Create Workbook": "Criar Workbook",
|
||||
"Clear Column by Index": "Limpar coluna por índice",
|
||||
"Clear Cells by Range": "Limpar células por faixa",
|
||||
"Clear Row by ID": "Limpar Linha por ID",
|
||||
"Create Worksheet": "Criar planilha",
|
||||
"Find Row": "Encontrar linha",
|
||||
"Get Cells in Range": "Obtenha Células ao longo do alcance",
|
||||
"Get Row by ID": "Obter linha por ID",
|
||||
"Get Worksheet by ID": "Obter planilha por ID",
|
||||
"Rename Worksheet": "Renomear planilha",
|
||||
"Custom API Call": "Chamada de API personalizada",
|
||||
"Append row of values to a worksheet": "Acrescentar a linha de valores a uma planilha",
|
||||
"Retrieve worksheets from a workbook": "Recuperar planilhas de um livro de trabalho",
|
||||
"Retrieve rows from a worksheet": "Recuperar linhas de uma planilha",
|
||||
"Update a row in a worksheet": "Atualizar uma linha em uma planilha",
|
||||
"Clear a worksheet": "Limpar uma planilha",
|
||||
"Delete a worksheet in a workbook": "Excluir uma planilha no workbook",
|
||||
"Retrieve a list of workbooks": "Recuperar uma lista de livros de trabalho",
|
||||
"Delete a workbook": "Excluir uma pasta de trabalho",
|
||||
"Add a worksheet to a workbook": "Adicionar uma planilha para um caderno",
|
||||
"List rows of a table in a worksheet": "Lista linhas de uma tabela em uma planilha",
|
||||
"List columns of a table in a worksheet": "Lista de colunas de uma tabela em uma planilha",
|
||||
"Create a table in a worksheet": "Criar uma tabela em uma folha de atividade",
|
||||
"Delete a table from a worksheet": "Apagar uma tabela de uma planilha",
|
||||
"Lookup a value in a table column in a worksheet": "Pesquisa um valor em uma coluna de tabela em uma planilha",
|
||||
"Append rows to a table": "Acrescentar linhas a uma tabela",
|
||||
"Converts a table to a range": "Converte uma tabela em uma faixa",
|
||||
"Create a new workbook at the specified location": "Criar uma nova pasta de trabalho no local especificado",
|
||||
"Clear contents/formatting of a column by its index.": "Limpar conteúdo/formatação de uma coluna pelo seu índice.",
|
||||
"Clear a block of cells (range) content or formatting.": "Limpa um bloco de conteúdo de células (de alcance) ou formatação.",
|
||||
"Clear contents/formatting of an entire row by its ID.": "Limpar conteúdos/formatação de uma linha inteira por sua ID.",
|
||||
"Add a new worksheet (tab) to an existing workbook with optional default headers.": "Adicionar uma nova planilha (guia) para um caderno de trabalho existente com cabeçalhos padrão opcional.",
|
||||
"Locate a row by specifying a lookup column and value (e.g. find a row where “ID” = 123).": "Localizar uma linha especificando uma coluna e um valor de pesquisa (por exemplo, encontra uma linha onde \"ID\" = 123).",
|
||||
"Retrieve the values in a given cell range (e.g., “A1:C10”).": "Recupere os valores em uma determinada faixa de células (por exemplo, \"A1:C10\").",
|
||||
" Retrieve the entire content of a row by its row ID.": " Recuperar todo o conteúdo da linha pela sua ID de linha.",
|
||||
"Retrieve metadata of a worksheet by its ID.": "Recuperar metadados de uma planilha por sua ID.",
|
||||
"Change the name of an existing worksheet.": "Mudar o nome de uma planilha existente.",
|
||||
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
|
||||
"Workbook": "Workbook",
|
||||
"Worksheet": "Planilha",
|
||||
"Does the first row contain headers?": "A primeira linha contém cabeçalhos?",
|
||||
"Values": "Valores",
|
||||
"Return All": "Devolver tudo",
|
||||
"Limit": "Limitar",
|
||||
"Range": "Range",
|
||||
"Header Row": "Linha do Cabeçalho",
|
||||
"First Data Row": "Primeira linha de dados",
|
||||
"Row number": "Número da linha",
|
||||
"Worksheet Name": "Nome da Planilha",
|
||||
"Table": "Classificações",
|
||||
"Select Range": "Selecione o intervalo",
|
||||
"Has Headers": "Possui cabeçalhos",
|
||||
"Lookup Column": "Coluna da Pesquisa",
|
||||
"Lookup Value": "Valor de pesquisa",
|
||||
"Return All Matches": "Retornar Todas as Partidas",
|
||||
"Name": "Nome",
|
||||
"Parent Folder": "Pasta pai",
|
||||
"Column Index": "Índice da coluna",
|
||||
"Clear Type": "Limpar Tipo",
|
||||
"Row Number": "Número da linha",
|
||||
"Headers": "Cabeçalhos",
|
||||
"Row ID (Index)": "ID da Linha (Índice)",
|
||||
"New Worksheet Name": "Nome da Nova Planilha",
|
||||
"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)",
|
||||
"If the first row is headers": "Se a primeira linha for o cabeçalho",
|
||||
"The values to insert": "Os valores a inserir",
|
||||
"If checked, all worksheets will be returned": "Se marcada, todas as planilhas serão retornadas",
|
||||
"Limit the number of worksheets returned": "Limitar o número de planilhas retornadas",
|
||||
"Range of the rows to retrieve (e.g., A2:B2)": "Intervalo das linhas a serem recuperadas (por exemplo, A2:B2)",
|
||||
"Row number of the header": "Número da linha do cabeçalho",
|
||||
"Row number of the first data row": "Número da linha de dados inicial",
|
||||
"The row number to update": "Número da linha a ser atualizado",
|
||||
"The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet": "O intervalo na notação A1 (por exemplo, A2:B2) para limpar na planilha, se não for fornecida, limpa a planilha inteira",
|
||||
"Limits the number of workbooks returned, returns all workbooks if empty": "Limita o número de livros de trabalho retornados, retorna todos os livros de trabalho se estiver vazio",
|
||||
"The name of the new worksheet": "O nome da nova planilha",
|
||||
"Limit the number of rows retrieved": "Limitar o número de linhas recuperadas",
|
||||
"Limit the number of columns retrieved": "Limitar o número de colunas recuperadas",
|
||||
"How to select the range for the table": "Como selecionar o intervalo para a tabela",
|
||||
"The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table": "O intervalo de células na notação A1 (por exemplo, A2:B2) que será convertido em uma tabela",
|
||||
"Whether the range has column labels": "Se o intervalo tem rótulos de coluna",
|
||||
"The column name to lookup the value in": "O nome da coluna em que pesquisa o valor",
|
||||
"The value to lookup": "O valor a pesquisar",
|
||||
"If checked, all matching rows will be returned": "Se marcada, todas as linhas correspondentes serão devolvidas",
|
||||
"The name of the new workbook": "O nome da nova pasta de trabalho",
|
||||
"The parent folder to use": "A pasta pai a ser usada",
|
||||
"The 1-based index of the column to be cleared (e.g., 1 for column A, 2 for column B).": "O índice de 1 na coluna a ser limpo (por exemplo, 1 para a coluna A, 2 para a coluna B).",
|
||||
"Specify what to clear from the column.": "Especifique o que limpar da coluna.",
|
||||
"The range of cells to clear, in A1 notation (e.g., \"A1:C5\").": "A variedade de células para limpar, na notação A1 (ex.: \"A1:C5\").",
|
||||
"Specify what to clear from the range.": "Especifique o que remover do intervalo.",
|
||||
"The number of the row to be cleared (e.g., 5 for the 5th row).": "O número da linha a ser limpa (por exemplo, 5 para a quinta linha).",
|
||||
"Specify what to clear from the row.": "Especifique o que limpar da linha.",
|
||||
"The name for the new worksheet. If not provided, a default name like 'Sheet1' will be assigned.": "O nome da nova planilha. Se não for fornecido, um nome padrão como 'Folha1' será atribuído.",
|
||||
"Optional: A list of headers to add to the first row. A table will be created from these headers.": "Opcional: Uma lista de cabeçalhos para adicionar à primeira linha. Uma tabela será criada a partir destes cabeçalhos.",
|
||||
"The column to search in.": "A coluna para pesquisar.",
|
||||
"The value to find in the lookup column.": "O valor a ser encontrado na coluna de pesquisa.",
|
||||
"The range of cells to retrieve, in A1 notation (e.g., \"A1:C10\").": "O intervalo de células a recuperar, na notação A1 (ex.: \"A1:C10\").",
|
||||
"The zero-based index of the row to retrieve (e.g., 0 for the first row, 1 for the second).": "O índice baseado em zero da linha a ser recuperada (por exemplo, 0 para a primeira linha, 1 para o segundo).",
|
||||
"\nThe new name for the worksheet. The name must adhere to the following rules:\n- Cannot be blank.\n- Cannot exceed 31 characters.\n- Must not contain any of the following characters: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- The name \"History\" is reserved by Excel and cannot be used.\n": "\nThe new name for the worksheet. The name must adhere to the following rules:\n- Cannot be blank.\n- Cannot exceed 31 characters.\n- Must not contain any of the following characters: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- The name \"History\" is reserved by Excel and cannot be used.\n",
|
||||
"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..",
|
||||
"All (Contents and Formatting)": "Todos (Conteúdo e Formatação)",
|
||||
"Contents Only": "Apenas conteúdo",
|
||||
"Formats Only": "Apenas formatos",
|
||||
"GET": "OBTER",
|
||||
"POST": "POSTAR",
|
||||
"PATCH": "COMPRAR",
|
||||
"PUT": "COLOCAR",
|
||||
"DELETE": "EXCLUIR",
|
||||
"HEAD": "CABEÇA",
|
||||
"New Row": "Nova linha",
|
||||
"New Row in Table": "Nova linha na tabela",
|
||||
"New Worksheet": "Nova Planilha",
|
||||
"Updated Row": "Linha atualizada",
|
||||
"Trigger when a new row is added, and it can include existing rows as well.": "Disparar quando uma nova linha é adicionada, e pode incluir linhas existentes também.",
|
||||
"Fires when a new row is added to a table within a worksheet.": "Atira quando uma nova linha é adicionada a uma tabela dentro de uma planilha.",
|
||||
"Fires when a new worksheet is created in a workbook.": "Efetua quando uma nova planilha é criada em um livro de trabalho.",
|
||||
"Fires when a row (in a worksheet) is added or updated.": "Efetua quando uma linha (em planilha) é adicionada ou atualizada.",
|
||||
"Max Rows to Poll": "Máximo de linhas para enquete",
|
||||
"My table has headers": "Minha mesa tem cabeçalhos",
|
||||
"First row has headers": "Primeira linha tem cabeçalhos",
|
||||
"The maximum number of rows to poll, the rest will be polled on the next run.": "O número máximo de linhas para enquete, o resto será enquete na próxima execução.",
|
||||
"Enable this if the first row of your table is a header row.": "Ative esta opção se a primeira linha da sua tabela é uma linha de cabeçalho.",
|
||||
"Enable this if the first row of your worksheet should be treated as headers.": "Ative esta opção se a primeira linha da sua planilha deve ser tratada como cabeçalhos."
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
{
|
||||
"Microsoft Excel 365": "Microsoft Excel 365",
|
||||
"Spreadsheet software by Microsoft": "Программное обеспечение для таблиц Microsoft",
|
||||
"Authentication for Microsoft Excel 365": "Аутентификация для Microsoft Excel 365",
|
||||
"Append Row to Worksheet": "Добавить строку в таблицу",
|
||||
"Get Worksheets": "Получить рабочие таблицы",
|
||||
"Get Worksheet Rows": "Получить строки",
|
||||
"Update Worksheet Rows": "Обновить строки таблиц",
|
||||
"Clear Worksheet": "Очистить таблицу",
|
||||
"Delete Worksheet": "Удалить таблицу",
|
||||
"Get Workbooks": "Получить рабочие книги",
|
||||
"Delete Workbook": "Удалить Рабочую книгу",
|
||||
"Add a Worksheet to a Workbook": "Добавить Рабочую лист в Рабочую книгу",
|
||||
"Get Table Rows": "Получить строки таблиц",
|
||||
"Get Table Columns": "Получить колонки таблицы",
|
||||
"Create Table": "Создать таблицу",
|
||||
"Delete Table": "Удалить таблицу",
|
||||
"Lookup Table Column": "Столбец таблицы поиска",
|
||||
"Append Rows to a Table": "Добавить строки в таблицу",
|
||||
"Convert to Range": "Преобразовать в диапазон",
|
||||
"Create Workbook": "Создать Рабочую книгу",
|
||||
"Custom API Call": "Пользовательский вызов API",
|
||||
"Append row of values to a worksheet": "Добавить строку значений в таблицу",
|
||||
"Retrieve worksheets from a workbook": "Получение таблиц из книги",
|
||||
"Retrieve rows from a worksheet": "Получить строки из листа",
|
||||
"Update a row in a worksheet": "Обновить строку в листе",
|
||||
"Clear a worksheet": "Очистить таблицу",
|
||||
"Delete a worksheet in a workbook": "Удалить таблицу в рабочей книге",
|
||||
"Retrieve a list of workbooks": "Получить список книг",
|
||||
"Delete a workbook": "Удалить Рабочую книгу",
|
||||
"Add a worksheet to a workbook": "Добавить таблицу в Рабочую книгу",
|
||||
"List rows of a table in a worksheet": "Список строк таблицы в рабочей таблице",
|
||||
"List columns of a table in a worksheet": "Список столбцов таблицы в листе",
|
||||
"Create a table in a worksheet": "Создать таблицу в листе",
|
||||
"Delete a table from a worksheet": "Удалить таблицу из листа",
|
||||
"Lookup a value in a table column in a worksheet": "Поиск значения в столбце таблицы в листе",
|
||||
"Append rows to a table": "Добавить строки в таблицу",
|
||||
"Converts a table to a range": "Преобразует таблицу в диапазон",
|
||||
"Create a new workbook at the specified location": "Создать новую книгу в указанном месте",
|
||||
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
|
||||
"Workbook": "Рабочая книга",
|
||||
"Worksheet": "Рабочий лист",
|
||||
"Does the first row contain headers?": "Содержит ли первая строка заголовки?",
|
||||
"Values": "Значения",
|
||||
"Return All": "Вернуть все",
|
||||
"Limit": "Лимит",
|
||||
"Range": "Range",
|
||||
"Header Row": "Строка заголовка",
|
||||
"First Data Row": "Первая строка данных",
|
||||
"Row number": "Номер строки",
|
||||
"Worksheet Name": "Название рабочей таблицы",
|
||||
"Table": "Таблица",
|
||||
"Select Range": "Выберите диапазон",
|
||||
"Has Headers": "Имеет заголовки",
|
||||
"Lookup Column": "Столбец поиска",
|
||||
"Lookup Value": "Значение поиска",
|
||||
"Return All Matches": "Вернуть все матчи",
|
||||
"Name": "Наименование",
|
||||
"Parent Folder": "Родительская папка",
|
||||
"Method": "Метод",
|
||||
"Headers": "Заголовки",
|
||||
"Query Parameters": "Параметры запроса",
|
||||
"Body": "Тело",
|
||||
"No Error on Failure": "Нет ошибок при ошибке",
|
||||
"Timeout (in seconds)": "Таймаут (в секундах)",
|
||||
"If the first row is headers": "Если первая строка - заголовки",
|
||||
"The values to insert": "Значения для вставки",
|
||||
"If checked, all worksheets will be returned": "Если отмечено, все рабочие таблицы будут возвращены",
|
||||
"Limit the number of worksheets returned": "Ограничить количество возвращенных таблиц",
|
||||
"Range of the rows to retrieve (e.g., A2:B2)": "Диапазон строк для извлечения (например, A2:B2)",
|
||||
"Row number of the header": "Номер строки заголовка",
|
||||
"Row number of the first data row": "Номер строки первой строки данных",
|
||||
"The row number to update": "Номер строки для обновления",
|
||||
"The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet": "Диапазон в нотации A1 (например, A2:B2) для очистки в таблице, если она не предусмотрена, очистить всю таблицу",
|
||||
"Limits the number of workbooks returned, returns all workbooks if empty": "Ограничивает количество возвращенных книг, возвращает все книги, если пусто",
|
||||
"The name of the new worksheet": "Название новой рабочей таблицы",
|
||||
"Limit the number of rows retrieved": "Ограничить количество строк",
|
||||
"Limit the number of columns retrieved": "Ограничить количество полученных столбцов",
|
||||
"How to select the range for the table": "Как выбрать диапазон для таблицы",
|
||||
"The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table": "Диапазон ячеек в нотации А1 (например, A2:B2), который будет преобразован в таблицу",
|
||||
"Whether the range has column labels": "Содержит ли диапазон метки столбцов",
|
||||
"The column name to lookup the value in": "Название столбца для поиска значения в",
|
||||
"The value to lookup": "Значение поиска",
|
||||
"If checked, all matching rows will be returned": "Если отмечено, все соответствующие строки будут возвращены",
|
||||
"The name of the new workbook": "Название новой рабочей книги",
|
||||
"The parent folder to use": "Родительская папка для использования",
|
||||
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
|
||||
"GET": "ПОЛУЧИТЬ",
|
||||
"POST": "ПОСТ",
|
||||
"PATCH": "ПАТЧ",
|
||||
"PUT": "ПОКУПИТЬ",
|
||||
"DELETE": "УДАЛИТЬ",
|
||||
"HEAD": "HEAD",
|
||||
"New Row": "Новая строка",
|
||||
"Trigger when a new row is added, and it can include existing rows as well.": "Срабатывать при добавлении новой строки, она также может включать существующие строки.",
|
||||
"Max Rows to Poll": "Максимум строк для опроса",
|
||||
"The maximum number of rows to poll, the rest will be polled on the next run.": "Максимальное количество строк для опроса, остальные будут опрошены в следующем порядке."
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"Spreadsheet software by Microsoft": "Spreadsheet software by Microsoft",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add ": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - Files.ReadWrite\n - offline_access\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Append Row to Worksheet": "Append Row to Worksheet",
|
||||
"Get Worksheets": "Get Worksheets",
|
||||
"Get Worksheet Rows": "Get Worksheet Rows",
|
||||
"Update Worksheet Rows": "Update Worksheet Rows",
|
||||
"Clear Worksheet": "Clear Worksheet",
|
||||
"Delete Worksheet": "Delete Worksheet",
|
||||
"Get Workbooks": "Get Workbooks",
|
||||
"Delete Workbook": "Delete Workbook",
|
||||
"Add a Worksheet to a Workbook": "Add a Worksheet to a Workbook",
|
||||
"Get Table Rows": "Get Table Rows",
|
||||
"Get Table Columns": "Get Table Columns",
|
||||
"Create Table": "Create Table",
|
||||
"Delete Table": "Delete Table",
|
||||
"Lookup Table Column": "Lookup Table Column",
|
||||
"Append Rows to a Table": "Append Rows to a Table",
|
||||
"Convert to Range": "Convert to Range",
|
||||
"Create Workbook": "Create Workbook",
|
||||
"Clear Column by Index": "Clear Column by Index",
|
||||
"Clear Cells by Range": "Clear Cells by Range",
|
||||
"Clear Row by ID": "Clear Row by ID",
|
||||
"Create Worksheet": "Create Worksheet",
|
||||
"Find Row": "Find Row",
|
||||
"Get Cells in Range": "Get Cells in Range",
|
||||
"Get Row by ID": "Get Row by ID",
|
||||
"Get Worksheet by ID": "Get Worksheet by ID",
|
||||
"Rename Worksheet": "Rename Worksheet",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Append row of values to a worksheet": "Append row of values to a worksheet",
|
||||
"Retrieve worksheets from a workbook": "Retrieve worksheets from a workbook",
|
||||
"Retrieve rows from a worksheet": "Retrieve rows from a worksheet",
|
||||
"Update a row in a worksheet": "Update a row in a worksheet",
|
||||
"Clear a worksheet": "Clear a worksheet",
|
||||
"Delete a worksheet in a workbook": "Delete a worksheet in a workbook",
|
||||
"Retrieve a list of workbooks": "Retrieve a list of workbooks",
|
||||
"Delete a workbook": "Delete a workbook",
|
||||
"Add a worksheet to a workbook": "Add a worksheet to a workbook",
|
||||
"List rows of a table in a worksheet": "List rows of a table in a worksheet",
|
||||
"List columns of a table in a worksheet": "List columns of a table in a worksheet",
|
||||
"Create a table in a worksheet": "Create a table in a worksheet",
|
||||
"Delete a table from a worksheet": "Delete a table from a worksheet",
|
||||
"Lookup a value in a table column in a worksheet": "Lookup a value in a table column in a worksheet",
|
||||
"Append rows to a table": "Append rows to a table",
|
||||
"Converts a table to a range": "Converts a table to a range",
|
||||
"Create a new workbook at the specified location": "Create a new workbook at the specified location",
|
||||
"Clear contents/formatting of a column by its index.": "Clear contents/formatting of a column by its index.",
|
||||
"Clear a block of cells (range) content or formatting.": "Clear a block of cells (range) content or formatting.",
|
||||
"Clear contents/formatting of an entire row by its ID.": "Clear contents/formatting of an entire row by its ID.",
|
||||
"Add a new worksheet (tab) to an existing workbook with optional default headers.": "Add a new worksheet (tab) to an existing workbook with optional default headers.",
|
||||
"Locate a row by specifying a lookup column and value (e.g. find a row where “ID” = 123).": "Locate a row by specifying a lookup column and value (e.g. find a row where “ID” = 123).",
|
||||
"Retrieve the values in a given cell range (e.g., “A1:C10”).": "Retrieve the values in a given cell range (e.g., “A1:C10”).",
|
||||
" Retrieve the entire content of a row by its row ID.": " Retrieve the entire content of a row by its row ID.",
|
||||
"Retrieve metadata of a worksheet by its ID.": "Retrieve metadata of a worksheet by its ID.",
|
||||
"Change the name of an existing worksheet.": "Change the name of an existing worksheet.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Workbook": "Workbook",
|
||||
"Worksheet": "Worksheet",
|
||||
"Does the first row contain headers?": "Does the first row contain headers?",
|
||||
"Values": "Values",
|
||||
"Return All": "Return All",
|
||||
"Limit": "Limit",
|
||||
"Range": "Range",
|
||||
"Header Row": "Header Row",
|
||||
"First Data Row": "First Data Row",
|
||||
"Row number": "Row number",
|
||||
"Worksheet Name": "Worksheet Name",
|
||||
"Table": "Table",
|
||||
"Select Range": "Select Range",
|
||||
"Has Headers": "Has Headers",
|
||||
"Lookup Column": "Lookup Column",
|
||||
"Lookup Value": "Lookup Value",
|
||||
"Return All Matches": "Return All Matches",
|
||||
"Name": "Name",
|
||||
"Parent Folder": "Parent Folder",
|
||||
"Column Index": "Column Index",
|
||||
"Clear Type": "Clear Type",
|
||||
"Row Number": "Row Number",
|
||||
"Headers": "Headers",
|
||||
"Row ID (Index)": "Row ID (Index)",
|
||||
"New Worksheet Name": "New Worksheet Name",
|
||||
"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)",
|
||||
"If the first row is headers": "If the first row is headers",
|
||||
"The values to insert": "The values to insert",
|
||||
"If checked, all worksheets will be returned": "If checked, all worksheets will be returned",
|
||||
"Limit the number of worksheets returned": "Limit the number of worksheets returned",
|
||||
"Range of the rows to retrieve (e.g., A2:B2)": "Range of the rows to retrieve (e.g., A2:B2)",
|
||||
"Row number of the header": "Row number of the header",
|
||||
"Row number of the first data row": "Row number of the first data row",
|
||||
"The row number to update": "The row number to update",
|
||||
"The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet": "The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet",
|
||||
"Limits the number of workbooks returned, returns all workbooks if empty": "Limits the number of workbooks returned, returns all workbooks if empty",
|
||||
"The name of the new worksheet": "The name of the new worksheet",
|
||||
"Limit the number of rows retrieved": "Limit the number of rows retrieved",
|
||||
"Limit the number of columns retrieved": "Limit the number of columns retrieved",
|
||||
"How to select the range for the table": "How to select the range for the table",
|
||||
"The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table": "The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table",
|
||||
"Whether the range has column labels": "Whether the range has column labels",
|
||||
"The column name to lookup the value in": "The column name to lookup the value in",
|
||||
"The value to lookup": "The value to lookup",
|
||||
"If checked, all matching rows will be returned": "If checked, all matching rows will be returned",
|
||||
"The name of the new workbook": "The name of the new workbook",
|
||||
"The parent folder to use": "The parent folder to use",
|
||||
"The 1-based index of the column to be cleared (e.g., 1 for column A, 2 for column B).": "The 1-based index of the column to be cleared (e.g., 1 for column A, 2 for column B).",
|
||||
"Specify what to clear from the column.": "Specify what to clear from the column.",
|
||||
"The range of cells to clear, in A1 notation (e.g., \"A1:C5\").": "The range of cells to clear, in A1 notation (e.g., \"A1:C5\").",
|
||||
"Specify what to clear from the range.": "Specify what to clear from the range.",
|
||||
"The number of the row to be cleared (e.g., 5 for the 5th row).": "The number of the row to be cleared (e.g., 5 for the 5th row).",
|
||||
"Specify what to clear from the row.": "Specify what to clear from the row.",
|
||||
"The name for the new worksheet. If not provided, a default name like 'Sheet1' will be assigned.": "The name for the new worksheet. If not provided, a default name like 'Sheet1' will be assigned.",
|
||||
"Optional: A list of headers to add to the first row. A table will be created from these headers.": "Optional: A list of headers to add to the first row. A table will be created from these headers.",
|
||||
"The column to search in.": "The column to search in.",
|
||||
"The value to find in the lookup column.": "The value to find in the lookup column.",
|
||||
"The range of cells to retrieve, in A1 notation (e.g., \"A1:C10\").": "The range of cells to retrieve, in A1 notation (e.g., \"A1:C10\").",
|
||||
"The zero-based index of the row to retrieve (e.g., 0 for the first row, 1 for the second).": "The zero-based index of the row to retrieve (e.g., 0 for the first row, 1 for the second).",
|
||||
"\nThe new name for the worksheet. The name must adhere to the following rules:\n- Cannot be blank.\n- Cannot exceed 31 characters.\n- Must not contain any of the following characters: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- The name \"History\" is reserved by Excel and cannot be used.\n": "\nThe new name for the worksheet. The name must adhere to the following rules:\n- Cannot be blank.\n- Cannot exceed 31 characters.\n- Must not contain any of the following characters: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- The name \"History\" is reserved by Excel and cannot be used.\n",
|
||||
"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..",
|
||||
"All (Contents and Formatting)": "All (Contents and Formatting)",
|
||||
"Contents Only": "Contents Only",
|
||||
"Formats Only": "Formats Only",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Row": "New Row",
|
||||
"New Row in Table": "New Row in Table",
|
||||
"New Worksheet": "New Worksheet",
|
||||
"Updated Row": "Updated Row",
|
||||
"Trigger when a new row is added, and it can include existing rows as well.": "Trigger when a new row is added, and it can include existing rows as well.",
|
||||
"Fires when a new row is added to a table within a worksheet.": "Fires when a new row is added to a table within a worksheet.",
|
||||
"Fires when a new worksheet is created in a workbook.": "Fires when a new worksheet is created in a workbook.",
|
||||
"Fires when a row (in a worksheet) is added or updated.": "Fires when a row (in a worksheet) is added or updated.",
|
||||
"Max Rows to Poll": "Max Rows to Poll",
|
||||
"My table has headers": "My table has headers",
|
||||
"First row has headers": "First row has headers",
|
||||
"The maximum number of rows to poll, the rest will be polled on the next run.": "The maximum number of rows to poll, the rest will be polled on the next run.",
|
||||
"Enable this if the first row of your table is a header row.": "Enable this if the first row of your table is a header row.",
|
||||
"Enable this if the first row of your worksheet should be treated as headers.": "Enable this if the first row of your worksheet should be treated as headers."
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
{
|
||||
"Microsoft Excel 365": "Microsoft Excel 365",
|
||||
"Spreadsheet software by Microsoft": "Spreadsheet software by Microsoft",
|
||||
"Authentication for Microsoft Excel 365": "Authentication for Microsoft Excel 365",
|
||||
"Append Row to Worksheet": "Append Row to Worksheet",
|
||||
"Get Worksheets": "Get Worksheets",
|
||||
"Get Worksheet Rows": "Get Worksheet Rows",
|
||||
"Update Worksheet Rows": "Update Worksheet Rows",
|
||||
"Clear Worksheet": "Clear Worksheet",
|
||||
"Delete Worksheet": "Delete Worksheet",
|
||||
"Get Workbooks": "Get Workbooks",
|
||||
"Delete Workbook": "Delete Workbook",
|
||||
"Add a Worksheet to a Workbook": "Add a Worksheet to a Workbook",
|
||||
"Get Table Rows": "Get Table Rows",
|
||||
"Get Table Columns": "Get Table Columns",
|
||||
"Create Table": "Create Table",
|
||||
"Delete Table": "Delete Table",
|
||||
"Lookup Table Column": "Lookup Table Column",
|
||||
"Append Rows to a Table": "Append Rows to a Table",
|
||||
"Convert to Range": "Convert to Range",
|
||||
"Create Workbook": "Create Workbook",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Append row of values to a worksheet": "Append row of values to a worksheet",
|
||||
"Retrieve worksheets from a workbook": "Retrieve worksheets from a workbook",
|
||||
"Retrieve rows from a worksheet": "Retrieve rows from a worksheet",
|
||||
"Update a row in a worksheet": "Update a row in a worksheet",
|
||||
"Clear a worksheet": "Clear a worksheet",
|
||||
"Delete a worksheet in a workbook": "Delete a worksheet in a workbook",
|
||||
"Retrieve a list of workbooks": "Retrieve a list of workbooks",
|
||||
"Delete a workbook": "Delete a workbook",
|
||||
"Add a worksheet to a workbook": "Add a worksheet to a workbook",
|
||||
"List rows of a table in a worksheet": "List rows of a table in a worksheet",
|
||||
"List columns of a table in a worksheet": "List columns of a table in a worksheet",
|
||||
"Create a table in a worksheet": "Create a table in a worksheet",
|
||||
"Delete a table from a worksheet": "Delete a table from a worksheet",
|
||||
"Lookup a value in a table column in a worksheet": "Lookup a value in a table column in a worksheet",
|
||||
"Append rows to a table": "Append rows to a table",
|
||||
"Converts a table to a range": "Converts a table to a range",
|
||||
"Create a new workbook at the specified location": "Create a new workbook at the specified location",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Workbook": "Workbook",
|
||||
"Worksheet": "Worksheet",
|
||||
"Does the first row contain headers?": "Does the first row contain headers?",
|
||||
"Values": "Values",
|
||||
"Return All": "Return All",
|
||||
"Limit": "Limit",
|
||||
"Range": "Range",
|
||||
"Header Row": "Header Row",
|
||||
"First Data Row": "First Data Row",
|
||||
"Row number": "Row number",
|
||||
"Worksheet Name": "Worksheet Name",
|
||||
"Table": "Table",
|
||||
"Select Range": "Select Range",
|
||||
"Has Headers": "Has Headers",
|
||||
"Lookup Column": "Lookup Column",
|
||||
"Lookup Value": "Lookup Value",
|
||||
"Return All Matches": "Return All Matches",
|
||||
"Name": "Name",
|
||||
"Parent Folder": "Parent Folder",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"If the first row is headers": "If the first row is headers",
|
||||
"The values to insert": "The values to insert",
|
||||
"If checked, all worksheets will be returned": "If checked, all worksheets will be returned",
|
||||
"Limit the number of worksheets returned": "Limit the number of worksheets returned",
|
||||
"Range of the rows to retrieve (e.g., A2:B2)": "Range of the rows to retrieve (e.g., A2:B2)",
|
||||
"Row number of the header": "Row number of the header",
|
||||
"Row number of the first data row": "Row number of the first data row",
|
||||
"The row number to update": "The row number to update",
|
||||
"The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet": "The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet",
|
||||
"Limits the number of workbooks returned, returns all workbooks if empty": "Limits the number of workbooks returned, returns all workbooks if empty",
|
||||
"The name of the new worksheet": "The name of the new worksheet",
|
||||
"Limit the number of rows retrieved": "Limit the number of rows retrieved",
|
||||
"Limit the number of columns retrieved": "Limit the number of columns retrieved",
|
||||
"How to select the range for the table": "How to select the range for the table",
|
||||
"The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table": "The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table",
|
||||
"Whether the range has column labels": "Whether the range has column labels",
|
||||
"The column name to lookup the value in": "The column name to lookup the value in",
|
||||
"The value to lookup": "The value to lookup",
|
||||
"If checked, all matching rows will be returned": "If checked, all matching rows will be returned",
|
||||
"The name of the new workbook": "The name of the new workbook",
|
||||
"The parent folder to use": "The parent folder to use",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Row": "New Row",
|
||||
"Trigger when a new row is added, and it can include existing rows as well.": "Trigger when a new row is added, and it can include existing rows as well.",
|
||||
"Max Rows to Poll": "Max Rows to Poll",
|
||||
"The maximum number of rows to poll, the rest will be polled on the next run.": "The maximum number of rows to poll, the rest will be polled on the next run."
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"Spreadsheet software by Microsoft": "Spreadsheet software by Microsoft",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add ": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - Files.ReadWrite\n - offline_access\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Append Row to Worksheet": "Append Row to Worksheet",
|
||||
"Get Worksheets": "Get Worksheets",
|
||||
"Get Worksheet Rows": "Get Worksheet Rows",
|
||||
"Update Worksheet Rows": "Update Worksheet Rows",
|
||||
"Clear Worksheet": "Clear Worksheet",
|
||||
"Delete Worksheet": "Delete Worksheet",
|
||||
"Get Workbooks": "Get Workbooks",
|
||||
"Delete Workbook": "Delete Workbook",
|
||||
"Add a Worksheet to a Workbook": "Add a Worksheet to a Workbook",
|
||||
"Get Table Rows": "Get Table Rows",
|
||||
"Get Table Columns": "Get Table Columns",
|
||||
"Create Table": "Create Table",
|
||||
"Delete Table": "Delete Table",
|
||||
"Lookup Table Column": "Lookup Table Column",
|
||||
"Append Rows to a Table": "Append Rows to a Table",
|
||||
"Convert to Range": "Convert to Range",
|
||||
"Create Workbook": "Create Workbook",
|
||||
"Clear Column by Index": "Clear Column by Index",
|
||||
"Clear Cells by Range": "Clear Cells by Range",
|
||||
"Clear Row by ID": "Clear Row by ID",
|
||||
"Create Worksheet": "创建工作表",
|
||||
"Find Row": "Find Row",
|
||||
"Get Cells in Range": "Get Cells in Range",
|
||||
"Get Row by ID": "Get Row by ID",
|
||||
"Get Worksheet by ID": "Get Worksheet by ID",
|
||||
"Rename Worksheet": "Rename Worksheet",
|
||||
"Custom API Call": "自定义 API 呼叫",
|
||||
"Append row of values to a worksheet": "Append row of values to a worksheet",
|
||||
"Retrieve worksheets from a workbook": "Retrieve worksheets from a workbook",
|
||||
"Retrieve rows from a worksheet": "Retrieve rows from a worksheet",
|
||||
"Update a row in a worksheet": "Update a row in a worksheet",
|
||||
"Clear a worksheet": "Clear a worksheet",
|
||||
"Delete a worksheet in a workbook": "Delete a worksheet in a workbook",
|
||||
"Retrieve a list of workbooks": "Retrieve a list of workbooks",
|
||||
"Delete a workbook": "Delete a workbook",
|
||||
"Add a worksheet to a workbook": "Add a worksheet to a workbook",
|
||||
"List rows of a table in a worksheet": "List rows of a table in a worksheet",
|
||||
"List columns of a table in a worksheet": "List columns of a table in a worksheet",
|
||||
"Create a table in a worksheet": "Create a table in a worksheet",
|
||||
"Delete a table from a worksheet": "Delete a table from a worksheet",
|
||||
"Lookup a value in a table column in a worksheet": "Lookup a value in a table column in a worksheet",
|
||||
"Append rows to a table": "Append rows to a table",
|
||||
"Converts a table to a range": "Converts a table to a range",
|
||||
"Create a new workbook at the specified location": "Create a new workbook at the specified location",
|
||||
"Clear contents/formatting of a column by its index.": "Clear contents/formatting of a column by its index.",
|
||||
"Clear a block of cells (range) content or formatting.": "Clear a block of cells (range) content or formatting.",
|
||||
"Clear contents/formatting of an entire row by its ID.": "Clear contents/formatting of an entire row by its ID.",
|
||||
"Add a new worksheet (tab) to an existing workbook with optional default headers.": "Add a new worksheet (tab) to an existing workbook with optional default headers.",
|
||||
"Locate a row by specifying a lookup column and value (e.g. find a row where “ID” = 123).": "Locate a row by specifying a lookup column and value (e.g. find a row where “ID” = 123).",
|
||||
"Retrieve the values in a given cell range (e.g., “A1:C10”).": "Retrieve the values in a given cell range (e.g., “A1:C10”).",
|
||||
" Retrieve the entire content of a row by its row ID.": " Retrieve the entire content of a row by its row ID.",
|
||||
"Retrieve metadata of a worksheet by its ID.": "Retrieve metadata of a worksheet by its ID.",
|
||||
"Change the name of an existing worksheet.": "Change the name of an existing worksheet.",
|
||||
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
|
||||
"Workbook": "Workbook",
|
||||
"Worksheet": "Worksheet",
|
||||
"Does the first row contain headers?": "第一行是否包含标题?",
|
||||
"Values": "值",
|
||||
"Return All": "Return All",
|
||||
"Limit": "Limit",
|
||||
"Range": "Range",
|
||||
"Header Row": "Header Row",
|
||||
"First Data Row": "First Data Row",
|
||||
"Row number": "Row number",
|
||||
"Worksheet Name": "Worksheet Name",
|
||||
"Table": "表",
|
||||
"Select Range": "Select Range",
|
||||
"Has Headers": "Has Headers",
|
||||
"Lookup Column": "Lookup Column",
|
||||
"Lookup Value": "Lookup Value",
|
||||
"Return All Matches": "Return All Matches",
|
||||
"Name": "名称",
|
||||
"Parent Folder": "父文件夹",
|
||||
"Column Index": "列索引",
|
||||
"Clear Type": "Clear Type",
|
||||
"Row Number": "行号",
|
||||
"Headers": "信头",
|
||||
"Row ID (Index)": "Row ID (Index)",
|
||||
"New Worksheet Name": "New Worksheet Name",
|
||||
"Method": "方法",
|
||||
"Query Parameters": "查询参数",
|
||||
"Body": "正文内容",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "失败时没有错误",
|
||||
"Timeout (in seconds)": "超时(秒)",
|
||||
"If the first row is headers": "如果第一行是头部",
|
||||
"The values to insert": "要插入的值",
|
||||
"If checked, all worksheets will be returned": "If checked, all worksheets will be returned",
|
||||
"Limit the number of worksheets returned": "Limit the number of worksheets returned",
|
||||
"Range of the rows to retrieve (e.g., A2:B2)": "Range of the rows to retrieve (e.g., A2:B2)",
|
||||
"Row number of the header": "Row number of the header",
|
||||
"Row number of the first data row": "Row number of the first data row",
|
||||
"The row number to update": "要更新的行数",
|
||||
"The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet": "The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet",
|
||||
"Limits the number of workbooks returned, returns all workbooks if empty": "Limits the number of workbooks returned, returns all workbooks if empty",
|
||||
"The name of the new worksheet": "The name of the new worksheet",
|
||||
"Limit the number of rows retrieved": "Limit the number of rows retrieved",
|
||||
"Limit the number of columns retrieved": "Limit the number of columns retrieved",
|
||||
"How to select the range for the table": "How to select the range for the table",
|
||||
"The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table": "The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table",
|
||||
"Whether the range has column labels": "Whether the range has column labels",
|
||||
"The column name to lookup the value in": "The column name to lookup the value in",
|
||||
"The value to lookup": "The value to lookup",
|
||||
"If checked, all matching rows will be returned": "If checked, all matching rows will be returned",
|
||||
"The name of the new workbook": "The name of the new workbook",
|
||||
"The parent folder to use": "The parent folder to use",
|
||||
"The 1-based index of the column to be cleared (e.g., 1 for column A, 2 for column B).": "The 1-based index of the column to be cleared (e.g., 1 for column A, 2 for column B).",
|
||||
"Specify what to clear from the column.": "Specify what to clear from the column.",
|
||||
"The range of cells to clear, in A1 notation (e.g., \"A1:C5\").": "The range of cells to clear, in A1 notation (e.g., \"A1:C5\").",
|
||||
"Specify what to clear from the range.": "Specify what to clear from the range.",
|
||||
"The number of the row to be cleared (e.g., 5 for the 5th row).": "The number of the row to be cleared (e.g., 5 for the 5th row).",
|
||||
"Specify what to clear from the row.": "Specify what to clear from the row.",
|
||||
"The name for the new worksheet. If not provided, a default name like 'Sheet1' will be assigned.": "The name for the new worksheet. If not provided, a default name like 'Sheet1' will be assigned.",
|
||||
"Optional: A list of headers to add to the first row. A table will be created from these headers.": "Optional: A list of headers to add to the first row. A table will be created from these headers.",
|
||||
"The column to search in.": "The column to search in.",
|
||||
"The value to find in the lookup column.": "The value to find in the lookup column.",
|
||||
"The range of cells to retrieve, in A1 notation (e.g., \"A1:C10\").": "The range of cells to retrieve, in A1 notation (e.g., \"A1:C10\").",
|
||||
"The zero-based index of the row to retrieve (e.g., 0 for the first row, 1 for the second).": "The zero-based index of the row to retrieve (e.g., 0 for the first row, 1 for the second).",
|
||||
"\nThe new name for the worksheet. The name must adhere to the following rules:\n- Cannot be blank.\n- Cannot exceed 31 characters.\n- Must not contain any of the following characters: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- The name \"History\" is reserved by Excel and cannot be used.\n": "\nThe new name for the worksheet. The name must adhere to the following rules:\n- Cannot be blank.\n- Cannot exceed 31 characters.\n- Must not contain any of the following characters: `/`, `\\`, `?`, `*`, `:`, `[`, `]`.\n- The name \"History\" is reserved by Excel and cannot be used.\n",
|
||||
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"All (Contents and Formatting)": "All (Contents and Formatting)",
|
||||
"Contents Only": "Contents Only",
|
||||
"Formats Only": "Formats Only",
|
||||
"GET": "获取",
|
||||
"POST": "帖子",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "弹出",
|
||||
"DELETE": "删除",
|
||||
"HEAD": "黑色",
|
||||
"New Row": "New Row",
|
||||
"New Row in Table": "New Row in Table",
|
||||
"New Worksheet": "新建工作表",
|
||||
"Updated Row": "Updated Row",
|
||||
"Trigger when a new row is added, and it can include existing rows as well.": "Trigger when a new row is added, and it can include existing rows as well.",
|
||||
"Fires when a new row is added to a table within a worksheet.": "Fires when a new row is added to a table within a worksheet.",
|
||||
"Fires when a new worksheet is created in a workbook.": "Fires when a new worksheet is created in a workbook.",
|
||||
"Fires when a row (in a worksheet) is added or updated.": "Fires when a row (in a worksheet) is added or updated.",
|
||||
"Max Rows to Poll": "Max Rows to Poll",
|
||||
"My table has headers": "My table has headers",
|
||||
"First row has headers": "First row has headers",
|
||||
"The maximum number of rows to poll, the rest will be polled on the next run.": "The maximum number of rows to poll, the rest will be polled on the next run.",
|
||||
"Enable this if the first row of your table is a header row.": "Enable this if the first row of your table is a header row.",
|
||||
"Enable this if the first row of your worksheet should be treated as headers.": "Enable this if the first row of your worksheet should be treated as headers."
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
import { createCustomApiCallAction } from '@activepieces/pieces-common';
|
||||
import {
|
||||
createPiece,
|
||||
OAuth2PropertyValue,
|
||||
PieceAuth
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { PieceCategory } from '@activepieces/shared';
|
||||
|
||||
import { addWorksheetAction } from './lib/actions/add-worksheet';
|
||||
import { appendRowAction } from './lib/actions/append-row';
|
||||
import { appendTableRowsAction } from './lib/actions/append-table-rows';
|
||||
import { clearWorksheetAction } from './lib/actions/clear-worksheet';
|
||||
import { convertToRangeAction } from './lib/actions/convert-to-range';
|
||||
import { createTableAction } from './lib/actions/create-table';
|
||||
import { createWorkbook } from './lib/actions/create-workbook';
|
||||
import { deleteTableAction } from './lib/actions/delete-table';
|
||||
import { deleteWorkbookAction } from './lib/actions/delete-workbook';
|
||||
import { deleteWorksheetAction } from './lib/actions/delete-worksheet';
|
||||
import { getTableColumnsAction } from './lib/actions/get-table-columns';
|
||||
import { getTableRowsAction } from './lib/actions/get-table-rows';
|
||||
import { getWorkbooksAction } from './lib/actions/get-workbooks';
|
||||
import { getWorksheetRowsAction } from './lib/actions/get-worksheet-rows';
|
||||
import { getWorksheetsAction } from './lib/actions/get-worksheets';
|
||||
import { lookupTableColumnAction } from './lib/actions/lookup-table-column';
|
||||
import { updateRowAction } from './lib/actions/update-row';
|
||||
|
||||
import { clearRangeAction } from './lib/actions/clear-cells-by-range';
|
||||
import { clearColumnAction } from './lib/actions/clear-column-by-index';
|
||||
import { clearRowAction } from './lib/actions/clear-row-by-id';
|
||||
import { createWorksheetAction } from './lib/actions/create-worksheet';
|
||||
import { findRowAction } from './lib/actions/find-row';
|
||||
import { getRangeAction } from './lib/actions/get-cells-in-range';
|
||||
import { getRowAction } from './lib/actions/get-row-by-id';
|
||||
import { getWorksheetAction } from './lib/actions/get-worksheet-by-id';
|
||||
import { renameWorksheetAction } from './lib/actions/rename-worksheet';
|
||||
|
||||
import { readNewRows } from './lib/trigger/new-row-added';
|
||||
|
||||
import { newRowInTableTrigger } from './lib/trigger/new-row-in-table';
|
||||
import { newWorksheetTrigger } from './lib/trigger/new-worksheet';
|
||||
import { updatedRowTrigger } from './lib/trigger/updated-row';
|
||||
|
||||
import { excelCommon } from './lib/common/common';
|
||||
import { get } from 'http';
|
||||
|
||||
const authDesc = `
|
||||
1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).
|
||||
2. From the left sidebar, go to **Microsoft Enfra ID**.
|
||||
3. Under **Manage**, click on **App registrations**.
|
||||
4. Click the **New registration** button.
|
||||
5. Enter a **Name** for your app.
|
||||
6. For **Supported account types**, choose:
|
||||
- **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**
|
||||
- Or select based on your requirement.
|
||||
7. In **Redirect URI**, select **Web** and add the given URL.
|
||||
8. Click **Register**.
|
||||
9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.
|
||||
10. From the left menu, go to **Certificates & secrets**.
|
||||
- Under **Client secrets**, click **New client secret**.
|
||||
- Provide a description, set an expiry, and click **Add**.
|
||||
- Copy the **Value** of the client secret (this will not be shown again).
|
||||
11. Go to **API permissions** from the left menu.
|
||||
- Click **Add a permission**.
|
||||
- Select **Microsoft Graph** → **Delegated permissions**.
|
||||
- Add the following scopes:
|
||||
- Files.ReadWrite
|
||||
- offline_access
|
||||
- Click **Add permissions**.
|
||||
12. Copy your **Client ID** and **Client Secret**.
|
||||
`;
|
||||
|
||||
export const excelAuth = PieceAuth.OAuth2({
|
||||
description: authDesc,
|
||||
authUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
|
||||
tokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
|
||||
required: true,
|
||||
scope: ['Files.ReadWrite', 'offline_access'],
|
||||
prompt: 'omit'
|
||||
});
|
||||
|
||||
export const microsoftExcel = createPiece({
|
||||
displayName: 'Microsoft Excel 365',
|
||||
description: 'Spreadsheet software by Microsoft',
|
||||
|
||||
auth: excelAuth,
|
||||
minimumSupportedRelease: '0.30.0',
|
||||
logoUrl: 'https://cdn.activepieces.com/pieces/microsoft-excel-365.png',
|
||||
categories: [PieceCategory.PRODUCTIVITY],
|
||||
authors: ['BastienMe', 'kishanprmr', 'MoShizzle', 'abuaboud', 'Pranith124', 'onyedikachi-david'],
|
||||
actions: [
|
||||
appendRowAction,
|
||||
getWorksheetsAction,
|
||||
getWorksheetRowsAction,
|
||||
updateRowAction,
|
||||
clearWorksheetAction,
|
||||
deleteWorksheetAction,
|
||||
getWorkbooksAction,
|
||||
deleteWorkbookAction,
|
||||
addWorksheetAction,
|
||||
getTableRowsAction,
|
||||
getTableColumnsAction,
|
||||
createTableAction,
|
||||
deleteTableAction,
|
||||
lookupTableColumnAction,
|
||||
appendTableRowsAction,
|
||||
convertToRangeAction,
|
||||
createWorkbook,
|
||||
clearColumnAction,
|
||||
clearRangeAction,
|
||||
clearRowAction,
|
||||
createWorksheetAction,
|
||||
findRowAction,
|
||||
getRangeAction,
|
||||
getRowAction,
|
||||
getWorksheetAction,
|
||||
renameWorksheetAction,
|
||||
createCustomApiCallAction({
|
||||
baseUrl: () => excelCommon.baseUrl,
|
||||
auth: excelAuth,
|
||||
authMapping: async (auth) => ({
|
||||
Authorization: `Bearer ${(auth as OAuth2PropertyValue).access_token}`
|
||||
})
|
||||
})
|
||||
],
|
||||
triggers: [
|
||||
readNewRows,
|
||||
newRowInTableTrigger,
|
||||
newWorksheetTrigger,
|
||||
updatedRowTrigger
|
||||
]
|
||||
});
|
||||
@@ -0,0 +1,45 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
HttpRequest,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const addWorksheetAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'add_worksheet',
|
||||
description: 'Add a worksheet to a workbook',
|
||||
displayName: 'Add a Worksheet to a Workbook',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_name: Property.ShortText({
|
||||
displayName: 'Worksheet Name',
|
||||
description: 'The name of the new worksheet',
|
||||
required: false,
|
||||
defaultValue: 'Sheet',
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const workbook_id = propsValue['workbook_id'];
|
||||
const worksheet_name = propsValue['worksheet_name'];
|
||||
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.POST,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/worksheets`,
|
||||
body: {
|
||||
name: worksheet_name,
|
||||
},
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest(request);
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,66 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
HttpRequest,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon, objectToArray } from '../common/common';
|
||||
|
||||
export const appendRowAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'append_row',
|
||||
description: 'Append row of values to a worksheet',
|
||||
displayName: 'Append Row to Worksheet',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
first_row_headers: Property.Checkbox({
|
||||
displayName: 'Does the first row contain headers?',
|
||||
description: 'If the first row is headers',
|
||||
required: true,
|
||||
defaultValue: false,
|
||||
}),
|
||||
values: excelCommon.values,
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const workbookId = propsValue['workbook_id'];
|
||||
const worksheetId = propsValue['worksheet_id'];
|
||||
const values = propsValue.first_row_headers
|
||||
? objectToArray(propsValue['values'])
|
||||
: Object.values(propsValue['values'])[0];
|
||||
|
||||
const lastUsedRow = await excelCommon.getLastUsedRow(
|
||||
workbookId,
|
||||
worksheetId,
|
||||
auth['access_token'],
|
||||
);
|
||||
const lastUsedColumn = excelCommon.numberToColumnName(Object.values(values).length);
|
||||
|
||||
const rangeFrom = `A${lastUsedRow + 1}`;
|
||||
const rangeTo = `${lastUsedColumn}${lastUsedRow + 1}`;
|
||||
|
||||
const url = `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/range(address='${rangeFrom}:${rangeTo}')`;
|
||||
|
||||
const requestBody = {
|
||||
values: [values],
|
||||
};
|
||||
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.PATCH,
|
||||
url: url,
|
||||
body: requestBody,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest(request);
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,41 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../..';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const appendTableRowsAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'append_table_rows',
|
||||
description: 'Append rows to a table',
|
||||
displayName: 'Append Rows to a Table',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
table_id: excelCommon.table_id,
|
||||
values: excelCommon.table_values,
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const workbookId = propsValue['workbook_id'];
|
||||
const worksheetId = propsValue['worksheet_id'];
|
||||
const tableId = propsValue['table_id'];
|
||||
const valuesToAppend = [Object.values(propsValue['values'])];
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/tables/${tableId}/rows`,
|
||||
body: {
|
||||
values: valuesToAppend,
|
||||
},
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,70 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const clearRangeAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'clear_range',
|
||||
displayName: 'Clear Cells by Range',
|
||||
description: 'Clear a block of cells (range) content or formatting.',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
range: Property.ShortText({
|
||||
displayName: 'Range',
|
||||
description:
|
||||
'The range of cells to clear, in A1 notation (e.g., "A1:C5").',
|
||||
required: true
|
||||
}),
|
||||
applyTo: Property.StaticDropdown({
|
||||
displayName: 'Clear Type',
|
||||
description: 'Specify what to clear from the range.',
|
||||
required: true,
|
||||
defaultValue: 'All',
|
||||
options: {
|
||||
options: [
|
||||
{
|
||||
label: 'All (Contents and Formatting)',
|
||||
value: 'All'
|
||||
},
|
||||
{
|
||||
label: 'Contents Only',
|
||||
value: 'Contents'
|
||||
},
|
||||
{
|
||||
label: 'Formats Only',
|
||||
value: 'Formats'
|
||||
}
|
||||
]
|
||||
}
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const { workbook_id, worksheet_id, range, applyTo } = context.propsValue;
|
||||
const { access_token } = context.auth;
|
||||
|
||||
if (!/^[A-Z]+[1-9][0-9]*(:[A-Z]+[1-9][0-9]*)?$/.test(range as string)) {
|
||||
throw new Error('Invalid range format. Please use A1 notation (e.g., "A1" or "A1:C5").');
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/worksheets/${worksheet_id}/range(address='${range}')/clear`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: access_token
|
||||
},
|
||||
body: {
|
||||
applyTo: applyTo
|
||||
}
|
||||
});
|
||||
|
||||
// A successful request returns a 200 OK with no body.
|
||||
return response.body;
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,81 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const clearColumnAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'clear_column',
|
||||
displayName: 'Clear Column by Index',
|
||||
description: 'Clear contents/formatting of a column by its index.',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
column_index: Property.Number({
|
||||
displayName: 'Column Index',
|
||||
description:
|
||||
'The 1-based index of the column to be cleared (e.g., 1 for column A, 2 for column B).',
|
||||
required: true
|
||||
}),
|
||||
applyTo: Property.StaticDropdown({
|
||||
displayName: 'Clear Type',
|
||||
description: 'Specify what to clear from the column.',
|
||||
required: true,
|
||||
defaultValue: 'All',
|
||||
options: {
|
||||
options: [
|
||||
{
|
||||
label: 'All (Contents and Formatting)',
|
||||
value: 'All'
|
||||
},
|
||||
{
|
||||
label: 'Contents Only',
|
||||
value: 'Contents'
|
||||
},
|
||||
{
|
||||
label: 'Formats Only',
|
||||
value: 'Formats'
|
||||
}
|
||||
]
|
||||
}
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const { workbook_id, worksheet_id, column_index, applyTo } =
|
||||
context.propsValue;
|
||||
const { access_token } = context.auth;
|
||||
|
||||
if (
|
||||
typeof column_index !== 'number' ||
|
||||
!Number.isInteger(column_index) ||
|
||||
column_index < 1
|
||||
) {
|
||||
throw new Error('Column index must be a positive integer.');
|
||||
}
|
||||
|
||||
// Convert 1-based index to Excel column letter (e.g., 1 -> 'A')
|
||||
const columnLetter = excelCommon.numberToColumnName(column_index);
|
||||
|
||||
// Construct the range address for the entire column, e.g., 'C:C'
|
||||
const columnAddress = `${columnLetter}:${columnLetter}`;
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/worksheets/${worksheet_id}/range(address='${columnAddress}')/clear`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: access_token
|
||||
},
|
||||
body: {
|
||||
applyTo: applyTo
|
||||
}
|
||||
});
|
||||
|
||||
// A successful request returns a 200 OK with no body.
|
||||
return response.body;
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,69 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod, AuthenticationType } from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const clearRowAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'clear_row',
|
||||
displayName: 'Clear Row by ID',
|
||||
description: 'Clear contents/formatting of an entire row by its ID.',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
row_id: Property.Number({
|
||||
displayName: 'Row Number',
|
||||
description: 'The number of the row to be cleared (e.g., 5 for the 5th row).',
|
||||
required: true,
|
||||
}),
|
||||
applyTo: Property.StaticDropdown({
|
||||
displayName: "Clear Type",
|
||||
description: "Specify what to clear from the row.",
|
||||
required: true,
|
||||
defaultValue: 'All',
|
||||
options: {
|
||||
options: [
|
||||
{
|
||||
label: 'All (Contents and Formatting)',
|
||||
value: 'All'
|
||||
},
|
||||
{
|
||||
label: 'Contents Only',
|
||||
value: 'Contents'
|
||||
},
|
||||
{
|
||||
label: 'Formats Only',
|
||||
value: 'Formats'
|
||||
}
|
||||
]
|
||||
}
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const { workbook_id, worksheet_id, row_id, applyTo } = context.propsValue;
|
||||
const { access_token } = context.auth;
|
||||
|
||||
if (typeof row_id !== 'number' || !Number.isInteger(row_id) || row_id < 1) {
|
||||
throw new Error('Row index must be a positive integer.');
|
||||
}
|
||||
|
||||
|
||||
// Construct the range address for the entire row, e.g., '5:5'
|
||||
const rowAddress = `${row_id}:${row_id}`;
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/worksheets/${worksheet_id}/range(address='${rowAddress}')/clear`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: access_token,
|
||||
},
|
||||
body: {
|
||||
applyTo: applyTo,
|
||||
},
|
||||
});
|
||||
|
||||
// A successful request returns a 200 OK with no body.
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,54 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const clearWorksheetAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'clear_worksheet',
|
||||
description: 'Clear a worksheet',
|
||||
displayName: 'Clear Worksheet',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
range: Property.ShortText({
|
||||
displayName: 'Range',
|
||||
description:
|
||||
'The range in A1 notation (e.g., A2:B2) to clear in the worksheet, if not provided, clear the entire worksheet',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const workbookId = propsValue['workbook_id'];
|
||||
const worksheetId = propsValue['worksheet_id'];
|
||||
const range = propsValue['range'];
|
||||
|
||||
let url = `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/`;
|
||||
|
||||
// If range is not provided, clear the entire worksheet
|
||||
if (!range) {
|
||||
url += 'usedRange(valuesOnly=true)/clear';
|
||||
} else {
|
||||
url += `range(address = '${range}')/clear`;
|
||||
}
|
||||
|
||||
const request = {
|
||||
method: HttpMethod.POST,
|
||||
url: url,
|
||||
body: {
|
||||
applyTo: 'contents',
|
||||
},
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN as const,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest(request);
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,36 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelCommon } from '../common/common';
|
||||
import { excelAuth } from '../../index';
|
||||
|
||||
export const convertToRangeAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'convert_to_range',
|
||||
description: 'Converts a table to a range',
|
||||
displayName: 'Convert to Range',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
table_id: excelCommon.table_id,
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const workbookId = propsValue['workbook_id'];
|
||||
const worksheetId = propsValue['worksheet_id'];
|
||||
const tableId = propsValue['table_id'];
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/tables/${tableId}/convertToRange`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,94 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const createTableAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'create_table',
|
||||
description: 'Create a table in a worksheet',
|
||||
displayName: 'Create Table',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
selectRange: Property.Dropdown({
|
||||
auth: excelAuth,
|
||||
displayName: 'Select Range',
|
||||
description: 'How to select the range for the table',
|
||||
required: true,
|
||||
options: async () => {
|
||||
return {
|
||||
disabled: false,
|
||||
options: [
|
||||
{
|
||||
label: 'Automatically',
|
||||
value: 'auto',
|
||||
},
|
||||
{
|
||||
label: 'Manually',
|
||||
value: 'manual',
|
||||
},
|
||||
],
|
||||
defaultValue: 'auto',
|
||||
};
|
||||
},
|
||||
refreshers: [],
|
||||
}),
|
||||
range: Property.ShortText({
|
||||
displayName: 'Range',
|
||||
description:
|
||||
'The range of cells in A1 notation (e.g., A2:B2) that will be converted to a table',
|
||||
required: false,
|
||||
defaultValue: 'A1:B2',
|
||||
}),
|
||||
hasHeaders: Property.Checkbox({
|
||||
displayName: 'Has Headers',
|
||||
description: 'Whether the range has column labels',
|
||||
required: true,
|
||||
defaultValue: true,
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const workbookId = propsValue['workbook_id'];
|
||||
const worksheetId = propsValue['worksheet_id'];
|
||||
const selectRange = propsValue['selectRange'];
|
||||
const hasHeaders = propsValue['hasHeaders'];
|
||||
|
||||
let range: string | undefined;
|
||||
if (selectRange === 'auto') {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/usedRange`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
queryParams: {
|
||||
select: 'address',
|
||||
},
|
||||
});
|
||||
range = response.body['address'].split('!')[1];
|
||||
} else {
|
||||
range = propsValue['range'];
|
||||
}
|
||||
|
||||
const result = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/tables/add`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
body: {
|
||||
address: range,
|
||||
hasHeaders,
|
||||
},
|
||||
});
|
||||
|
||||
return result.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,45 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
|
||||
export const createWorkbook = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'createWorkbook',
|
||||
displayName: 'Create Workbook',
|
||||
description: 'Create a new workbook at the specified location',
|
||||
props: {
|
||||
name: Property.ShortText({
|
||||
displayName: "Name",
|
||||
description: "The name of the new workbook",
|
||||
required: true
|
||||
}),
|
||||
parentFolder: excelCommon.parent_folder
|
||||
},
|
||||
async run(context) {
|
||||
const { name, parentFolder } = context.propsValue
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${excelCommon.baseUrl}/${parentFolder === 'root' ? '' : 'items/'}${parentFolder}/children`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth['access_token'],
|
||||
},
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: {
|
||||
file: {},
|
||||
name: name.endsWith('.xlsx') ? name : `${name}.xlsx`,
|
||||
'@microsoft.graph.conflictBehavior': 'rename'
|
||||
}
|
||||
})
|
||||
|
||||
return response
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,102 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType
|
||||
} from '@activepieces/pieces-common';
|
||||
|
||||
// Define the response type for creating a worksheet for better type-safety
|
||||
interface CreateWorksheetResponse {
|
||||
id: string;
|
||||
name: string;
|
||||
position: number;
|
||||
visibility: string;
|
||||
}
|
||||
|
||||
export const createWorksheetAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'create_worksheet',
|
||||
displayName: 'Create Worksheet',
|
||||
description:
|
||||
'Add a new worksheet (tab) to an existing workbook with optional default headers.',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
name: Property.ShortText({
|
||||
displayName: 'Worksheet Name',
|
||||
description:
|
||||
"The name for the new worksheet. If not provided, a default name like 'Sheet1' will be assigned.",
|
||||
required: false
|
||||
}),
|
||||
headers: Property.Array({
|
||||
displayName: 'Headers',
|
||||
description:
|
||||
'Optional: A list of headers to add to the first row. A table will be created from these headers.',
|
||||
required: false
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const { workbook_id, name, headers } = context.propsValue;
|
||||
const { access_token } = context.auth;
|
||||
|
||||
// Step 1: Create the new worksheet
|
||||
const createWorksheetResponse =
|
||||
await httpClient.sendRequest<CreateWorksheetResponse>({
|
||||
method: HttpMethod.POST,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/worksheets/add`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: access_token
|
||||
},
|
||||
body: {
|
||||
// Conditionally add the name property to the request body if it exists
|
||||
...(name ? { name } : {})
|
||||
}
|
||||
});
|
||||
|
||||
const newWorksheetName = createWorksheetResponse.body.name;
|
||||
|
||||
// Step 2: If headers are provided, add them and create a table from them
|
||||
if (headers && Array.isArray(headers) && headers.length > 0) {
|
||||
const headersArray = headers as string[];
|
||||
|
||||
// Calculate the table range, e.g., "A1:C1" for 3 headers
|
||||
const endColumn = excelCommon.numberToColumnName(headersArray.length);
|
||||
const address = `A1:${endColumn}1`;
|
||||
|
||||
// Add the header values to the first row of the new worksheet
|
||||
await httpClient.sendRequest({
|
||||
method: HttpMethod.PATCH,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/worksheets/${newWorksheetName}/range(address='${address}')`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: access_token
|
||||
},
|
||||
body: {
|
||||
values: [headersArray] // Values must be a 2D array
|
||||
}
|
||||
});
|
||||
|
||||
// Create a table from the newly added header range
|
||||
const createTableResponse = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/worksheets/${newWorksheetName}/tables/add`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: access_token
|
||||
},
|
||||
body: {
|
||||
address: address,
|
||||
hasHeaders: true
|
||||
}
|
||||
});
|
||||
|
||||
// Return the result of the table creation
|
||||
return createTableResponse.body;
|
||||
}
|
||||
|
||||
// If no headers were provided, return the result of the worksheet creation
|
||||
return createWorksheetResponse.body;
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,36 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const deleteTableAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'delete_table',
|
||||
description: 'Delete a table from a worksheet',
|
||||
displayName: 'Delete Table',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
table_id: excelCommon.table_id,
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const workbookId = propsValue['workbook_id'];
|
||||
const worksheetId = propsValue['worksheet_id'];
|
||||
const tableId = propsValue['table_id'];
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.DELETE,
|
||||
url: `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/tables/${tableId}`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,35 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
HttpRequest,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const deleteWorkbookAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'delete_workbook',
|
||||
description: 'Delete a workbook',
|
||||
displayName: 'Delete Workbook',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const workbookId = propsValue['workbook_id'];
|
||||
const accessToken = auth['access_token'];
|
||||
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.DELETE,
|
||||
url: `${excelCommon.baseUrl}/items/${workbookId}`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: accessToken,
|
||||
},
|
||||
};
|
||||
|
||||
await httpClient.sendRequest(request);
|
||||
return { success: true };
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,35 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const deleteWorksheetAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'delete_worksheet',
|
||||
description: 'Delete a worksheet in a workbook',
|
||||
displayName: 'Delete Worksheet',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const workbookId = propsValue['workbook_id'];
|
||||
const worksheetId = propsValue['worksheet_id'];
|
||||
|
||||
const request = {
|
||||
method: HttpMethod.DELETE,
|
||||
url: `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN as const,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest(request);
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,121 @@
|
||||
import {
|
||||
createAction,
|
||||
Property,
|
||||
OAuth2PropertyValue
|
||||
} from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const findRowAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'find_row',
|
||||
displayName: 'Find Row',
|
||||
description:
|
||||
'Locate a row by specifying a lookup column and value (e.g. find a row where “ID” = 123).',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
table_id: excelCommon.table_id,
|
||||
lookup_column: Property.Dropdown({
|
||||
auth: excelAuth,
|
||||
displayName: 'Lookup Column',
|
||||
description: 'The column to search in.',
|
||||
required: true,
|
||||
refreshers: ['workbook_id', 'table_id'],
|
||||
options: async ({ auth, workbook_id, table_id }) => {
|
||||
if (!auth || !workbook_id || !table_id) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please select a workbook and table first.'
|
||||
};
|
||||
}
|
||||
const authProp = auth as OAuth2PropertyValue;
|
||||
const response = await httpClient.sendRequest<{
|
||||
value: { id: string; name: string }[];
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/tables/${table_id}/columns`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: authProp.access_token
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: response.body.value.map((column) => ({
|
||||
label: column.name,
|
||||
value: column.id
|
||||
}))
|
||||
};
|
||||
}
|
||||
}),
|
||||
lookup_value: Property.ShortText({
|
||||
displayName: 'Lookup Value',
|
||||
description: 'The value to find in the lookup column.',
|
||||
required: true
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const { workbook_id, table_id, lookup_column, lookup_value } =
|
||||
context.propsValue;
|
||||
const { access_token } = context.auth;
|
||||
const columnId = lookup_column;
|
||||
|
||||
const sanitizedValue = (lookup_value as string).replace(/'/g, "''");
|
||||
|
||||
// Define the URL to clear the filter, which will be used in the 'finally' block
|
||||
const clearFilterUrl = `${excelCommon.baseUrl}/items/${workbook_id}/workbook/tables/${table_id}/columns/${columnId}/filter/clear`;
|
||||
|
||||
try {
|
||||
// Step 1: Apply the filter to the specified column
|
||||
await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/tables/${table_id}/columns/${columnId}/filter/apply`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: access_token
|
||||
},
|
||||
body: {
|
||||
criteria: {
|
||||
criterion1: `=${sanitizedValue}`,
|
||||
filterOn: 'Custom'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Step 2: Get the visible rows (i.e., the filtered results)
|
||||
const foundRowsResponse = await httpClient.sendRequest<{
|
||||
value: unknown[];
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/tables/${table_id}/range/visibleView/rows`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: access_token
|
||||
}
|
||||
});
|
||||
|
||||
// The result is the array of rows that matched the filter
|
||||
return foundRowsResponse.body.value;
|
||||
} finally {
|
||||
// Step 3: Clear the filter to restore the table to its original state.
|
||||
// This runs regardless of whether the previous steps succeeded or failed.
|
||||
await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: clearFilterUrl,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: access_token
|
||||
},
|
||||
body: {} // Clear action does not require a body
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,48 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const getRangeAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'get_range',
|
||||
displayName: 'Get Cells in Range',
|
||||
description: 'Retrieve the values in a given cell range (e.g., “A1:C10”).',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
range: Property.ShortText({
|
||||
displayName: 'Range',
|
||||
description:
|
||||
'The range of cells to retrieve, in A1 notation (e.g., "A1:C10").',
|
||||
required: true
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const { workbook_id, worksheet_id, range } = context.propsValue;
|
||||
const { access_token } = context.auth;
|
||||
|
||||
if (!/^[A-Z]+[1-9][0-9]*(:[A-Z]+[1-9][0-9]*)?$/.test(range as string)) {
|
||||
throw new Error(
|
||||
'Invalid range format. Please use A1 notation (e.g., "A1" or "A1:C5").'
|
||||
);
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/worksheets/${worksheet_id}/range(address='${range}')`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: access_token
|
||||
}
|
||||
});
|
||||
|
||||
// The response body contains the workbookRange object with details
|
||||
// like values, text, formulas, rowCount, etc.
|
||||
return response.body;
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,67 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
HttpError
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
||||
|
||||
export const getRowAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'getRowById',
|
||||
displayName: 'Get Row by ID',
|
||||
description: ' Retrieve the entire content of a row by its row ID.',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
table_id: excelCommon.table_id,
|
||||
row_id: Property.Number({
|
||||
displayName: 'Row ID (Index)',
|
||||
description:
|
||||
'The zero-based index of the row to retrieve (e.g., 0 for the first row, 1 for the second).',
|
||||
required: true
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const { workbook_id, table_id, row_id } = context.propsValue;
|
||||
const { access_token } = context.auth;
|
||||
|
||||
const maxRetries = 3;
|
||||
let attempt = 0;
|
||||
|
||||
while (attempt < maxRetries) {
|
||||
try {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/tables/${table_id}/rows/itemAt(index=${row_id})`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: access_token
|
||||
}
|
||||
});
|
||||
return response.body;
|
||||
} catch (error) {
|
||||
const httpError = error as HttpError;
|
||||
if (httpError.response?.status === 503 && attempt < maxRetries - 1) {
|
||||
const delayMs = 2 ** attempt * 1000;
|
||||
console.warn(
|
||||
`Excel API is unavailable (503). Retrying after ${delayMs}ms... (Attempt ${
|
||||
attempt + 1
|
||||
}/${maxRetries})`
|
||||
);
|
||||
await delay(delayMs);
|
||||
attempt++;
|
||||
} else {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
throw new Error(
|
||||
'Failed to retrieve row after multiple retries due to API unavailability.'
|
||||
);
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,52 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { excelCommon } from '../common/common';
|
||||
import { excelAuth } from '../..';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
|
||||
export const getTableColumnsAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'get_table_columns',
|
||||
description: 'List columns of a table in a worksheet',
|
||||
displayName: 'Get Table Columns',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
table: excelCommon.table_id,
|
||||
limit: Property.Number({
|
||||
displayName: 'Limit',
|
||||
description: 'Limit the number of columns retrieved',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const workbookId = propsValue['workbook_id'];
|
||||
const worksheetId = propsValue['worksheet_id'];
|
||||
const tableId = propsValue['table'];
|
||||
const limit = propsValue['limit'];
|
||||
|
||||
let url = `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/tables/${tableId}/columns`;
|
||||
|
||||
if (limit) {
|
||||
url += `?$top=${limit}`;
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: url,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
});
|
||||
|
||||
const columnNames = response.body['value'].map(
|
||||
(column: { name: any }) => column.name
|
||||
);
|
||||
|
||||
return columnNames;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,52 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { excelCommon } from '../common/common';
|
||||
import { excelAuth } from '../..';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
|
||||
export const getTableRowsAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'get_table_rows',
|
||||
description: 'List rows of a table in a worksheet',
|
||||
displayName: 'Get Table Rows',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
table: excelCommon.table_id,
|
||||
limit: Property.Number({
|
||||
displayName: 'Limit',
|
||||
description: 'Limit the number of rows retrieved',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const workbookId = propsValue['workbook_id'];
|
||||
const worksheetId = propsValue['worksheet_id'];
|
||||
const tableId = propsValue['table'];
|
||||
const limit = propsValue['limit'];
|
||||
|
||||
let url = `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/tables/${tableId}/rows`;
|
||||
|
||||
if (limit) {
|
||||
url += `?$top=${limit}`;
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: url,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
});
|
||||
|
||||
const rowsValues = response.body['value'].map(
|
||||
(row: { values: any[] }) => row.values[0]
|
||||
);
|
||||
|
||||
return rowsValues;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,56 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const getWorkbooksAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'get_workbooks',
|
||||
description: 'Retrieve a list of workbooks',
|
||||
displayName: 'Get Workbooks',
|
||||
props: {
|
||||
limit: Property.Number({
|
||||
displayName: 'Limit',
|
||||
description:
|
||||
'Limits the number of workbooks returned, returns all workbooks if empty',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const limit = propsValue['limit'];
|
||||
|
||||
const queryParams: any = {
|
||||
$filter:
|
||||
"file ne null and file/mimeType eq 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'",
|
||||
};
|
||||
|
||||
if (limit !== null && limit !== undefined) {
|
||||
queryParams.$top = limit.toString();
|
||||
}
|
||||
|
||||
const request = {
|
||||
method: HttpMethod.GET,
|
||||
url: `${excelCommon.baseUrl}/root/search(q='.xlsx')`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN as const,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
queryParams: queryParams,
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest(request);
|
||||
const workbooks = response.body['value'].map(
|
||||
(item: { id: any; name: any; webUrl: any }) => ({
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
webUrl: item.webUrl,
|
||||
})
|
||||
);
|
||||
|
||||
return workbooks;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,33 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod, AuthenticationType } from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const getWorksheetAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'get_worksheet',
|
||||
displayName: 'Get Worksheet by ID',
|
||||
description: 'Retrieve metadata of a worksheet by its ID.',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id, // This dropdown provides the worksheet name as its value
|
||||
},
|
||||
async run(context) {
|
||||
const { workbook_id, worksheet_id } = context.propsValue;
|
||||
const { access_token } = context.auth;
|
||||
|
||||
// The worksheet_id prop from excelCommon returns the worksheet's name,
|
||||
// which can be used to identify it in the API URL as per the documentation ({id|name}).
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/worksheets/${worksheet_id}`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: access_token,
|
||||
},
|
||||
});
|
||||
|
||||
// The response body contains the workbookWorksheet object with its metadata.
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,73 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelCommon } from '../common/common';
|
||||
import { excelAuth } from '../../index';
|
||||
|
||||
export const getWorksheetRowsAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'get_worksheet_rows',
|
||||
description: 'Retrieve rows from a worksheet',
|
||||
displayName: 'Get Worksheet Rows',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
range: Property.ShortText({
|
||||
displayName: 'Range',
|
||||
description: 'Range of the rows to retrieve (e.g., A2:B2)',
|
||||
required: false,
|
||||
}),
|
||||
headerRow: Property.Number({
|
||||
displayName: 'Header Row',
|
||||
description: 'Row number of the header',
|
||||
required: false,
|
||||
}),
|
||||
firstDataRow: Property.Number({
|
||||
displayName: 'First Data Row',
|
||||
description: 'Row number of the first data row',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const workbookId = propsValue['workbook_id'];
|
||||
const worksheetId = propsValue['worksheet_id'];
|
||||
const range = propsValue['range'];
|
||||
const headerRow = propsValue['headerRow'];
|
||||
const firstDataRow = propsValue['firstDataRow'];
|
||||
|
||||
let url = `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/`;
|
||||
|
||||
if (!range) {
|
||||
url += 'usedRange(valuesOnly=true)';
|
||||
} else {
|
||||
url += `range(address = '${range}')`;
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: url,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
});
|
||||
|
||||
const rows = response.body['values'];
|
||||
if (headerRow && firstDataRow) {
|
||||
return rows.slice(firstDataRow - 1).map((row: any[]) => {
|
||||
const obj: { [key: string]: any } = {};
|
||||
rows[headerRow - 1].forEach(
|
||||
(header: any, colIndex: string | number) => {
|
||||
obj[String(header)] = row[Number(colIndex)];
|
||||
}
|
||||
);
|
||||
return obj;
|
||||
});
|
||||
}
|
||||
|
||||
return rows;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,59 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const getWorksheetsAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'get_worksheets',
|
||||
description: 'Retrieve worksheets from a workbook',
|
||||
displayName: 'Get Worksheets',
|
||||
props: {
|
||||
workbook: excelCommon.workbook_id,
|
||||
returnAll: Property.Checkbox({
|
||||
displayName: 'Return All',
|
||||
description: 'If checked, all worksheets will be returned',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
limit: Property.Number({
|
||||
displayName: 'Limit',
|
||||
description: 'Limit the number of worksheets returned',
|
||||
required: false,
|
||||
defaultValue: 10,
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const workbookId = propsValue['workbook'];
|
||||
const returnAll = propsValue['returnAll'];
|
||||
const limit = propsValue['limit'];
|
||||
|
||||
const endpoint = `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets`;
|
||||
const headers = {
|
||||
Authorization: `Bearer ${auth['access_token']}`,
|
||||
'Content-Type': 'application/json',
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: endpoint,
|
||||
headers: headers,
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to retrieve worksheet: ${response.body}`);
|
||||
}
|
||||
|
||||
const worksheets = response.body['value'];
|
||||
|
||||
if (returnAll) {
|
||||
return worksheets;
|
||||
} else {
|
||||
const limitedWorksheets = [];
|
||||
for (let i = 0; i < Math.min(worksheets['length'], limit ?? 0); i++) {
|
||||
limitedWorksheets.push(worksheets[i]);
|
||||
}
|
||||
return limitedWorksheets;
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,88 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../..';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
export const lookupTableColumnAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'lookup_table_column',
|
||||
description: 'Lookup a value in a table column in a worksheet',
|
||||
displayName: 'Lookup Table Column',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
table_id: excelCommon.table_id,
|
||||
lookup_column: Property.ShortText({
|
||||
displayName: 'Lookup Column',
|
||||
description: 'The column name to lookup the value in',
|
||||
required: true,
|
||||
}),
|
||||
lookup_value: Property.ShortText({
|
||||
displayName: 'Lookup Value',
|
||||
description: 'The value to lookup',
|
||||
required: true,
|
||||
}),
|
||||
return_all_matches: Property.Checkbox({
|
||||
displayName: 'Return All Matches',
|
||||
description: 'If checked, all matching rows will be returned',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const workbookId = propsValue['workbook_id'];
|
||||
const worksheetId = propsValue['worksheet_id'];
|
||||
const tableName = propsValue['table_id'];
|
||||
const lookupColumn = propsValue['lookup_column'];
|
||||
const lookupValue = propsValue['lookup_value'];
|
||||
const returnAllMatches = propsValue['return_all_matches'];
|
||||
|
||||
const rowsUrl = `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/tables/${tableName}/rows`;
|
||||
const rowsResponse = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: rowsUrl,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
});
|
||||
|
||||
const columnsUrl = `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/tables/${tableName}/columns`;
|
||||
const columnsResponse = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: columnsUrl,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
});
|
||||
|
||||
const columns = columnsResponse.body['value'];
|
||||
const columnIndex = columns.findIndex(
|
||||
(column: any) => column.name === lookupColumn
|
||||
);
|
||||
|
||||
if (columnIndex === -1) {
|
||||
throw new Error(`Column "${lookupColumn}" not found in the table.`);
|
||||
}
|
||||
|
||||
const rows = rowsResponse.body['value'];
|
||||
const matchedRows = rows.filter(
|
||||
(row: any) => row.values[0][columnIndex] === lookupValue
|
||||
);
|
||||
|
||||
const matchedValues = matchedRows.map(
|
||||
(row: { values: any[] }) => row.values[0]
|
||||
);
|
||||
|
||||
if (returnAllMatches) {
|
||||
return matchedValues;
|
||||
} else {
|
||||
return matchedValues[0] || null;
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,52 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType
|
||||
} from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon } from '../common/common';
|
||||
|
||||
const namingRules = `
|
||||
The new name for the worksheet. The name must adhere to the following rules:
|
||||
- Cannot be blank.
|
||||
- Cannot exceed 31 characters.
|
||||
- Must not contain any of the following characters: \`/\`, \`\\\`, \`?\`, \`*\`, \`:\`, \`[\`, \`]\`.
|
||||
- The name "History" is reserved by Excel and cannot be used.
|
||||
`;
|
||||
|
||||
export const renameWorksheetAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'rename_worksheet',
|
||||
displayName: 'Rename Worksheet',
|
||||
description: 'Change the name of an existing worksheet.',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
new_name: Property.ShortText({
|
||||
displayName: 'New Worksheet Name',
|
||||
description: namingRules,
|
||||
required: true
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const { workbook_id, worksheet_id, new_name } = context.propsValue;
|
||||
const { access_token } = context.auth;
|
||||
|
||||
// The worksheet_id prop from excelCommon returns the worksheet's current name,
|
||||
// which can be used to identify it in the API URL.
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.PATCH,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/worksheets/${worksheet_id}`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: access_token
|
||||
},
|
||||
body: {
|
||||
name: new_name
|
||||
}
|
||||
});
|
||||
|
||||
return response.body;
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,58 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod, AuthenticationType } from '@activepieces/pieces-common';
|
||||
import { excelAuth } from '../../index';
|
||||
import { excelCommon, objectToArray } from '../common/common';
|
||||
|
||||
export const updateRowAction = createAction({
|
||||
auth: excelAuth,
|
||||
name: 'update_row',
|
||||
description: 'Update a row in a worksheet',
|
||||
displayName: 'Update Worksheet Rows',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
row_number: 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: excelCommon.values,
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const workbookId = propsValue['workbook_id'];
|
||||
const worksheetId = propsValue['worksheet_id'];
|
||||
const rowNumber = propsValue['row_number'];
|
||||
const values = propsValue.first_row_headers
|
||||
? objectToArray(propsValue['values'])
|
||||
: Object.values(propsValue['values']);
|
||||
|
||||
const requestBody = {
|
||||
values: [values],
|
||||
};
|
||||
|
||||
const lastUsedColumn = excelCommon.numberToColumnName(Object.values(values).length);
|
||||
|
||||
const rangeFrom = `A${rowNumber}`;
|
||||
const rangeTo = `${lastUsedColumn}${rowNumber}`;
|
||||
|
||||
const request = {
|
||||
method: HttpMethod.PATCH,
|
||||
url: `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/range(address='${rangeFrom}:${rangeTo}')`,
|
||||
body: requestBody,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN as const,
|
||||
token: auth['access_token'],
|
||||
},
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest(request);
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,407 @@
|
||||
import { Property, OAuth2PropertyValue } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
HttpRequest
|
||||
} from '@activepieces/pieces-common';
|
||||
import { isNil } from '@activepieces/shared';
|
||||
import { excelAuth } from '../..';
|
||||
|
||||
export const excelCommon = {
|
||||
baseUrl: 'https://graph.microsoft.com/v1.0/me/drive',
|
||||
workbook_id: Property.Dropdown({
|
||||
auth: excelAuth,
|
||||
displayName: 'Workbook',
|
||||
required: true,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please authenticate first'
|
||||
};
|
||||
}
|
||||
const authProp: OAuth2PropertyValue = auth as OAuth2PropertyValue;
|
||||
const workbooks: { id: string; name: string }[] = (
|
||||
await httpClient.sendRequest<{ value: { id: string; name: string }[] }>(
|
||||
{
|
||||
method: HttpMethod.GET,
|
||||
url: `${excelCommon.baseUrl}/items/root/search(q='.xlsx')?$select=id,name`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: authProp['access_token']
|
||||
}
|
||||
}
|
||||
)
|
||||
).body.value;
|
||||
return {
|
||||
disabled: false,
|
||||
options: workbooks.map((workbook: { id: string; name: string }) => {
|
||||
return {
|
||||
label: workbook.name,
|
||||
value: workbook.id
|
||||
};
|
||||
})
|
||||
};
|
||||
},
|
||||
refreshers: []
|
||||
}),
|
||||
worksheet_id: Property.Dropdown({
|
||||
auth: excelAuth,
|
||||
displayName: 'Worksheet',
|
||||
required: true,
|
||||
refreshers: ['workbook_id'],
|
||||
options: async ({ auth, workbook_id }) => {
|
||||
if (!auth || !workbook_id) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please select a workbook first'
|
||||
};
|
||||
}
|
||||
const authProp: OAuth2PropertyValue = auth as OAuth2PropertyValue;
|
||||
const worksheets: { id: string; name: string }[] = (
|
||||
await httpClient.sendRequest<{ value: { id: string; name: string }[] }>(
|
||||
{
|
||||
method: HttpMethod.GET,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/worksheets?$select=id,name`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: authProp['access_token']
|
||||
}
|
||||
}
|
||||
)
|
||||
).body.value;
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: worksheets.map((worksheet: { id: string; name: string }) => {
|
||||
return {
|
||||
label: worksheet.name,
|
||||
value: worksheet.name
|
||||
};
|
||||
})
|
||||
};
|
||||
}
|
||||
}),
|
||||
table_id: Property.Dropdown({
|
||||
auth: excelAuth,
|
||||
displayName: 'Table',
|
||||
required: true,
|
||||
refreshers: ['workbook_id', 'worksheet_id'],
|
||||
options: async ({ auth, workbook_id, worksheet_id }) => {
|
||||
if (!auth || !workbook_id || !worksheet_id) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please select a workbook and worksheet first'
|
||||
};
|
||||
}
|
||||
const authProp: OAuth2PropertyValue = auth as OAuth2PropertyValue;
|
||||
const tables: { id: string; name: string }[] = (
|
||||
await httpClient.sendRequest<{ value: { id: string; name: string }[] }>(
|
||||
{
|
||||
method: HttpMethod.GET,
|
||||
url: `${excelCommon.baseUrl}/items/${workbook_id}/workbook/worksheets/${worksheet_id}/tables`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: authProp['access_token']
|
||||
}
|
||||
}
|
||||
)
|
||||
).body.value;
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: tables.map((table: { id: string; name: string }) => {
|
||||
return {
|
||||
label: table.name,
|
||||
value: table.id
|
||||
};
|
||||
})
|
||||
};
|
||||
}
|
||||
}),
|
||||
values: Property.DynamicProperties({
|
||||
auth: excelAuth,
|
||||
displayName: 'Values',
|
||||
description: 'The values to insert',
|
||||
required: true,
|
||||
refreshers: ['workbook_id', 'worksheet_id', 'first_row_headers'],
|
||||
props: async ({ auth, workbook_id, worksheet_id, first_row_headers }) => {
|
||||
if (
|
||||
!auth ||
|
||||
(workbook_id ?? '').toString().length === 0 ||
|
||||
(worksheet_id ?? '').toString().length === 0
|
||||
) {
|
||||
return {};
|
||||
}
|
||||
|
||||
const authProp: OAuth2PropertyValue = auth as OAuth2PropertyValue;
|
||||
|
||||
if (!first_row_headers) {
|
||||
return {
|
||||
values: Property.Array({
|
||||
displayName: 'Values',
|
||||
required: true
|
||||
})
|
||||
};
|
||||
}
|
||||
const firstRow = await excelCommon.getHeaders(
|
||||
workbook_id as unknown as string,
|
||||
authProp['access_token'],
|
||||
worksheet_id as unknown as string
|
||||
);
|
||||
|
||||
const properties: {
|
||||
[key: string]: any;
|
||||
} = {};
|
||||
for (const key in firstRow) {
|
||||
properties[key] = Property.ShortText({
|
||||
displayName: firstRow[key].toString(),
|
||||
description: firstRow[key].toString(),
|
||||
required: false,
|
||||
defaultValue: ''
|
||||
});
|
||||
}
|
||||
return properties;
|
||||
}
|
||||
}),
|
||||
table_values: Property.DynamicProperties({
|
||||
auth: excelAuth,
|
||||
displayName: 'Values',
|
||||
description: 'The values to insert',
|
||||
required: true,
|
||||
refreshers: ['workbook_id', 'worksheet_id', 'table_id'],
|
||||
props: async ({ auth, workbook_id, worksheet_id, table_id }) => {
|
||||
if (
|
||||
!auth ||
|
||||
(workbook_id ?? '').toString().length === 0 ||
|
||||
(worksheet_id ?? '').toString().length === 0 ||
|
||||
(worksheet_id ?? '').toString().length === 0
|
||||
) {
|
||||
return {};
|
||||
}
|
||||
|
||||
const authProp: OAuth2PropertyValue = auth as OAuth2PropertyValue;
|
||||
|
||||
const headers = await excelCommon.getTableHeaders(
|
||||
workbook_id as unknown as string,
|
||||
authProp['access_token'],
|
||||
worksheet_id as unknown as string,
|
||||
table_id as unknown as string
|
||||
);
|
||||
|
||||
const properties: {
|
||||
[key: string]: any;
|
||||
} = {};
|
||||
for (const key in headers) {
|
||||
properties[key] = Property.ShortText({
|
||||
displayName: headers[key].toString(),
|
||||
description: headers[key].toString(),
|
||||
required: false,
|
||||
defaultValue: ''
|
||||
});
|
||||
}
|
||||
return properties;
|
||||
}
|
||||
}),
|
||||
parent_folder: Property.Dropdown({
|
||||
auth: excelAuth,
|
||||
displayName: 'Parent Folder',
|
||||
description: 'The parent folder to use',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please authenticate first'
|
||||
};
|
||||
}
|
||||
|
||||
const authProp: OAuth2PropertyValue = auth as OAuth2PropertyValue;
|
||||
|
||||
const rootFolderId = 'root';
|
||||
const allFolders: { id: string; name: string }[] =
|
||||
await excelCommon.getAllFolders(
|
||||
rootFolderId,
|
||||
authProp['access_token'],
|
||||
''
|
||||
);
|
||||
allFolders.unshift({
|
||||
id: rootFolderId,
|
||||
name: '/'
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: allFolders.map((table: { id: string; name: string }) => {
|
||||
return {
|
||||
label: table.name,
|
||||
value: table.id
|
||||
};
|
||||
})
|
||||
};
|
||||
}
|
||||
}),
|
||||
getHeaders: async function (
|
||||
workbookId: string,
|
||||
accessToken: string,
|
||||
worksheetId: string
|
||||
) {
|
||||
const response = await httpClient.sendRequest<{
|
||||
values: (string | number | boolean)[][];
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/usedRange(valuesOnly=true)`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: accessToken
|
||||
}
|
||||
});
|
||||
|
||||
return response.body.values?.[0] ?? [];
|
||||
},
|
||||
getTableHeaders: async function (
|
||||
workbookId: string,
|
||||
accessToken: string,
|
||||
worksheetId: string,
|
||||
tableId: string
|
||||
) {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/tables/${tableId}/columns`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: accessToken
|
||||
}
|
||||
});
|
||||
|
||||
const columnNames = response.body['value'].map(
|
||||
(column: { name: any }) => column.name
|
||||
);
|
||||
return columnNames;
|
||||
},
|
||||
getLastUsedRow: async function (
|
||||
workbookId: string,
|
||||
worksheetId: string,
|
||||
accessToken: string
|
||||
): Promise<number> {
|
||||
const url = `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/usedRange`;
|
||||
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.GET,
|
||||
url: url,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: accessToken
|
||||
}
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest(request);
|
||||
const usedRange = response.body['address'].split('!')[1];
|
||||
const lastCell = usedRange.indexOf(':') != -1 ? usedRange.split(':')[1] : usedRange;
|
||||
const lastRow = parseInt(lastCell.match(/\d+/)[0], 10);
|
||||
|
||||
return lastRow;
|
||||
},
|
||||
getLastUsedColumn: async function (
|
||||
workbookId: string,
|
||||
worksheetId: string,
|
||||
accessToken: string
|
||||
): Promise<string> {
|
||||
const url = `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/usedRange`;
|
||||
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.GET,
|
||||
url: url,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: accessToken
|
||||
}
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest(request);
|
||||
const usedRange = response.body['address'].split('!')[1];
|
||||
const [, lastCell] = usedRange.split(':');
|
||||
const lastColumnLetter = lastCell.match(/[A-Z]+/)[0];
|
||||
|
||||
return lastColumnLetter;
|
||||
},
|
||||
getAllRows: async function (
|
||||
workbookId: string,
|
||||
worksheetId: string,
|
||||
accessToken: string
|
||||
): Promise<(string | number | boolean)[][]> {
|
||||
const response = await httpClient.sendRequest<{
|
||||
values: (string | number | boolean)[][];
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets/${worksheetId}/usedRange(valuesOnly=true)`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: accessToken
|
||||
}
|
||||
});
|
||||
|
||||
return response.body['values'] ?? [];
|
||||
},
|
||||
numberToColumnName: function (num: number): string {
|
||||
let columnName = '';
|
||||
while (num > 0) {
|
||||
const modulo = (num - 1) % 26;
|
||||
columnName = String.fromCharCode(65 + modulo) + columnName;
|
||||
num = Math.floor((num - modulo) / 26);
|
||||
}
|
||||
return columnName;
|
||||
},
|
||||
getAllFolders: async function (
|
||||
folderId: string,
|
||||
authToken: string,
|
||||
currentPath: string
|
||||
): Promise<{ id: string; name: string }[]> {
|
||||
const apiUrl = `${excelCommon.baseUrl}/items/${folderId}/children?$filter=folder ne null`;
|
||||
const response = await httpClient.sendRequest<{
|
||||
value: { id: string; name: string; folder?: unknown }[];
|
||||
}>({
|
||||
url: apiUrl,
|
||||
method: HttpMethod.GET,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: authToken
|
||||
}
|
||||
});
|
||||
|
||||
if (!response.body || !response.body.value) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const folders = response.body.value.map((folder) => ({
|
||||
id: `${folder.id}`,
|
||||
name: `${currentPath}/${folder.name}`
|
||||
}));
|
||||
let allSubFolders: { id: string; name: string }[] = [...folders];
|
||||
|
||||
for (const folder of folders) {
|
||||
const subFolders = await excelCommon.getAllFolders(
|
||||
folder.id,
|
||||
authToken,
|
||||
folder.name
|
||||
);
|
||||
allSubFolders = allSubFolders.concat(subFolders);
|
||||
}
|
||||
return allSubFolders;
|
||||
}
|
||||
};
|
||||
|
||||
export function objectToArray(obj: { [x: string]: any }) {
|
||||
const maxIndex = Math.max(...Object.keys(obj).map(Number));
|
||||
const arr = new Array(maxIndex + 1).fill(null);
|
||||
for (const key in obj) {
|
||||
arr[Number(key)] = obj[key];
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
import {
|
||||
AppConnectionValueForAuthProperty,
|
||||
Property,
|
||||
createTrigger,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { excelCommon } from '../common/common';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { isNil } from '@activepieces/shared';
|
||||
import { excelAuth } from '../..';
|
||||
|
||||
const polling: Polling<
|
||||
AppConnectionValueForAuthProperty<typeof excelAuth>,
|
||||
{
|
||||
workbook_id: string;
|
||||
worksheet_id: string;
|
||||
max_rows_to_poll: number | undefined;
|
||||
}
|
||||
> = {
|
||||
strategy: DedupeStrategy.LAST_ITEM,
|
||||
items: async ({ auth, propsValue, lastItemId }) => {
|
||||
const fetchedValues =
|
||||
(await excelCommon.getAllRows(
|
||||
propsValue.workbook_id,
|
||||
propsValue.worksheet_id,
|
||||
auth.access_token
|
||||
)) ?? [];
|
||||
|
||||
const currentValues = fetchedValues.map((row: any[], rowIndex: number) => {
|
||||
const rowObject: any = {};
|
||||
row.forEach((cell: any, cellIndex: number) => {
|
||||
const columnName = String.fromCharCode(65 + cellIndex);
|
||||
rowObject[columnName] = cell;
|
||||
});
|
||||
return {
|
||||
row: rowIndex + 1,
|
||||
values: rowObject,
|
||||
};
|
||||
});
|
||||
|
||||
const items = currentValues
|
||||
.filter((f: any) => Object.keys(f.values).length > 0)
|
||||
.map((item: any, index: number) => ({
|
||||
id: index + 1,
|
||||
data: item,
|
||||
}))
|
||||
.filter(
|
||||
(f: any) => isNil(lastItemId) || f.data.row > (lastItemId as number)
|
||||
);
|
||||
|
||||
return items.reverse();
|
||||
},
|
||||
};
|
||||
|
||||
export const readNewRows = createTrigger({
|
||||
auth: excelAuth,
|
||||
name: 'new_row',
|
||||
displayName: 'New Row',
|
||||
description:
|
||||
'Trigger when a new row is added, and it can include existing rows as well.',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
max_rows_to_poll: Property.Number({
|
||||
displayName: 'Max Rows to Poll',
|
||||
description:
|
||||
'The maximum number of rows to poll, the rest will be polled on the next run.',
|
||||
required: false,
|
||||
defaultValue: 10,
|
||||
}),
|
||||
},
|
||||
type: TriggerStrategy.POLLING,
|
||||
sampleData: {},
|
||||
onEnable: async (context) => {
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
onDisable: async (context) => {
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
run: async (context) => {
|
||||
return await pollingHelper.poll(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
maxItemsToPoll: Math.max(
|
||||
1,
|
||||
Math.min(10, context.propsValue.max_rows_to_poll ?? 10)
|
||||
),
|
||||
propsValue: context.propsValue,
|
||||
files: context.files,
|
||||
});
|
||||
},
|
||||
test: async (context) => {
|
||||
return await pollingHelper.test(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
files: context.files,
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,170 @@
|
||||
import {
|
||||
AppConnectionValueForAuthProperty,
|
||||
OAuth2PropertyValue,
|
||||
Property,
|
||||
createTrigger,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { excelCommon } from '../common/common';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType
|
||||
} from '@activepieces/pieces-common';
|
||||
import { isNil } from '@activepieces/shared';
|
||||
import { excelAuth } from '../..';
|
||||
|
||||
interface TableRow {
|
||||
index: number;
|
||||
values: [[string | number | boolean]];
|
||||
}
|
||||
|
||||
// Helper function to get all rows from a specific table
|
||||
async function getTableRows(auth: OAuth2PropertyValue, workbookId: string, tableId: string): Promise<TableRow[]> {
|
||||
try {
|
||||
const response = await httpClient.sendRequest<{ value: TableRow[] }>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${excelCommon.baseUrl}/items/${workbookId}/workbook/tables/${encodeURIComponent(tableId)}/rows`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: auth.access_token,
|
||||
},
|
||||
});
|
||||
return response.body.value ?? [];
|
||||
} catch (error) {
|
||||
throw new Error(`Failed to fetch table rows: ${error}`);
|
||||
}
|
||||
}
|
||||
|
||||
const polling: Polling<
|
||||
AppConnectionValueForAuthProperty<typeof excelAuth>,
|
||||
{
|
||||
workbook_id: string;
|
||||
worksheet_id: string;
|
||||
table_id: string;
|
||||
has_headers: boolean;
|
||||
}
|
||||
> = {
|
||||
strategy: DedupeStrategy.LAST_ITEM,
|
||||
items: async ({ auth, propsValue, lastItemId, store }) => {
|
||||
const rows = await getTableRows(auth, propsValue.workbook_id, propsValue.table_id);
|
||||
|
||||
if (rows.length === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const cachedHeaders = await store.get<string[]>('table_headers');
|
||||
let headers: string[] = [];
|
||||
|
||||
if (cachedHeaders && cachedHeaders.length > 0) {
|
||||
headers = cachedHeaders
|
||||
} else {
|
||||
try {
|
||||
headers = await excelCommon.getTableHeaders(
|
||||
propsValue.workbook_id,
|
||||
auth.access_token,
|
||||
propsValue.worksheet_id,
|
||||
propsValue.table_id
|
||||
);
|
||||
await store.put('table_headers', headers);
|
||||
} catch (error) {
|
||||
headers = []
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const processedRows = rows.map(row => {
|
||||
let rowData: Record<string, unknown> = {};
|
||||
|
||||
if (propsValue.has_headers && headers.length > 0) {
|
||||
// Map values to header keys
|
||||
rowData = headers.reduce((acc, header, index) => {
|
||||
acc[header] = row.values[0]?.[index] ?? null;
|
||||
return acc;
|
||||
}, {} as Record<string, unknown>);
|
||||
} else {
|
||||
// Use default column letter keys (A, B, C...)
|
||||
rowData = row.values[0]?.reduce((acc, value, index) => {
|
||||
acc[excelCommon.numberToColumnName(index + 1)] = value;
|
||||
return acc;
|
||||
}, {} as Record<string, unknown>) ?? {};
|
||||
}
|
||||
|
||||
return {
|
||||
id: row.index, // The row's zero-based index is its unique ID
|
||||
data: {
|
||||
rowIndex: row.index,
|
||||
values: rowData
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
// The polling helper will filter for new rows where the ID (row.index) is greater than lastItemId
|
||||
const newItems = processedRows.filter(item => isNil(lastItemId) || item.id > (lastItemId as number));
|
||||
return newItems;
|
||||
}
|
||||
};
|
||||
|
||||
export const newRowInTableTrigger = createTrigger({
|
||||
auth: excelAuth,
|
||||
name: 'new_row_in_table',
|
||||
displayName: 'New Row in Table',
|
||||
description: 'Fires when a new row is added to a table within a worksheet.',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
table_id: excelCommon.table_id,
|
||||
has_headers: Property.Checkbox({
|
||||
displayName: "My table has headers",
|
||||
description: "Enable this if the first row of your table is a header row.",
|
||||
required: true,
|
||||
defaultValue: true,
|
||||
})
|
||||
},
|
||||
type: TriggerStrategy.POLLING,
|
||||
sampleData: {
|
||||
"rowIndex": 0,
|
||||
"values": {
|
||||
"ID": 1,
|
||||
"Name": "John Doe",
|
||||
"Email": "john.doe@example.com"
|
||||
}
|
||||
},
|
||||
|
||||
onEnable: async (context) => {
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
|
||||
onDisable: async (context) => {
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
|
||||
run: async (context) => {
|
||||
return await pollingHelper.poll(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
files: context.files,
|
||||
});
|
||||
},
|
||||
|
||||
test: async (context) => {
|
||||
return await pollingHelper.test(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
files: context.files,
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,118 @@
|
||||
import {
|
||||
AppConnectionValueForAuthProperty,
|
||||
OAuth2PropertyValue,
|
||||
createTrigger
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { excelCommon } from '../common/common';
|
||||
import { excelAuth } from '../..';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
DedupeStrategy
|
||||
} from '@activepieces/pieces-common';
|
||||
|
||||
interface Worksheet {
|
||||
id: string;
|
||||
name: string;
|
||||
position: number;
|
||||
visibility: string;
|
||||
}
|
||||
|
||||
async function getWorksheets(
|
||||
auth: OAuth2PropertyValue,
|
||||
workbookId: string
|
||||
): Promise<Worksheet[]> {
|
||||
if (!workbookId) return [];
|
||||
|
||||
try {
|
||||
const response = await httpClient.sendRequest<{ value: Worksheet[] }>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${excelCommon.baseUrl}/items/${workbookId}/workbook/worksheets`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: auth.access_token
|
||||
}
|
||||
});
|
||||
return response.body.value ?? [];
|
||||
} catch (error) {
|
||||
throw new Error(`Failed to fetch worksheets: ${error}`);
|
||||
}
|
||||
}
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof excelAuth>, { workbook_id: string }> = {
|
||||
strategy: DedupeStrategy.LAST_ITEM,
|
||||
items: async ({ auth, propsValue, store }) => {
|
||||
const worksheets = await getWorksheets(auth, propsValue.workbook_id);
|
||||
|
||||
const storedWorksheetIds = await store.get<string[]>('worksheet_ids') ?? [];
|
||||
|
||||
const newWorksheets = worksheets.filter(ws => !storedWorksheetIds.includes(ws.id));
|
||||
|
||||
const currentWorksheetIds = worksheets.map(ws => ws.id);
|
||||
await store.put('worksheet_ids', currentWorksheetIds);
|
||||
|
||||
const processedWorksheets = newWorksheets.map((worksheet) => ({
|
||||
id: worksheet.id,
|
||||
data: worksheet
|
||||
}));
|
||||
|
||||
return processedWorksheets;
|
||||
}
|
||||
};
|
||||
|
||||
export const newWorksheetTrigger = createTrigger({
|
||||
auth: excelAuth,
|
||||
name: 'new_worksheet',
|
||||
displayName: 'New Worksheet',
|
||||
description: 'Fires when a new worksheet is created in a workbook.',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id
|
||||
},
|
||||
type: TriggerStrategy.POLLING,
|
||||
sampleData: {
|
||||
'@odata.id':
|
||||
'/workbook/worksheets(%27%7B00000000-0001-0000-0100-000000000000%7D%27)',
|
||||
id: '{00000000-0001-0000-0100-000000000000}',
|
||||
name: 'Sheet2',
|
||||
position: 1,
|
||||
visibility: 'Visible'
|
||||
},
|
||||
|
||||
onEnable: async (context) => {
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue
|
||||
});
|
||||
},
|
||||
|
||||
onDisable: async (context) => {
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue
|
||||
});
|
||||
},
|
||||
|
||||
run: async (context) => {
|
||||
return await pollingHelper.poll(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
files: context.files
|
||||
});
|
||||
},
|
||||
|
||||
test: async (context) => {
|
||||
return await pollingHelper.test(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
files: context.files
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,155 @@
|
||||
import {
|
||||
AppConnectionValueForAuthProperty,
|
||||
Property,
|
||||
createTrigger,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { excelCommon } from '../common/common';
|
||||
import { excelAuth } from '../..';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { createHmac } from 'node:crypto';
|
||||
|
||||
const triggerName = 'updated_row';
|
||||
|
||||
function createRowHash(rowData: unknown[]): string {
|
||||
const rowString = JSON.stringify(rowData);
|
||||
return createHmac('sha1', 'activepieces').update(rowString).digest('hex');
|
||||
}
|
||||
|
||||
// Helper function to get all worksheet rows with error handling
|
||||
async function getWorksheetRows(auth: AppConnectionValueForAuthProperty<typeof excelAuth>, workbookId: string, worksheetId: string): Promise<(string | number | boolean)[][]> {
|
||||
try {
|
||||
return await excelCommon.getAllRows(workbookId, worksheetId, auth.access_token);
|
||||
} catch (error) {
|
||||
throw new Error(`Failed to fetch worksheet rows: ${error}`);
|
||||
}
|
||||
}
|
||||
|
||||
// Polling implementation using the framework's best practices
|
||||
const polling: Polling<
|
||||
AppConnectionValueForAuthProperty<typeof excelAuth>,
|
||||
{
|
||||
workbook_id: string;
|
||||
worksheet_id: string;
|
||||
has_headers: boolean;
|
||||
}
|
||||
> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, propsValue, store }) => {
|
||||
const allRows = await getWorksheetRows(auth, propsValue.workbook_id, propsValue.worksheet_id);
|
||||
|
||||
if (allRows.length === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
// Get stored row hashes from previous run
|
||||
const oldHashes = await store.get<Record<number, string>>('row_hashes') ?? {};
|
||||
|
||||
const headers = (propsValue.has_headers && allRows.length > 0) ? allRows[0] : [];
|
||||
const dataRows = (propsValue.has_headers && allRows.length > 0) ? allRows.slice(1) : allRows;
|
||||
|
||||
const currentHashes: Record<number, string> = {};
|
||||
const changedItems: Array<{ epochMilliSeconds: number; data: unknown }> = [];
|
||||
const currentTime = Date.now();
|
||||
|
||||
// Process each data row
|
||||
dataRows.forEach((row, index) => {
|
||||
const rowIndex = propsValue.has_headers ? index + 1 : index;
|
||||
const newHash = createRowHash(row);
|
||||
currentHashes[rowIndex] = newHash;
|
||||
|
||||
const oldHash = oldHashes[rowIndex];
|
||||
|
||||
// Row has changed or is new
|
||||
if (oldHash !== newHash) {
|
||||
const formattedRow: Record<string, unknown> = {};
|
||||
|
||||
if (propsValue.has_headers && headers.length > 0) {
|
||||
headers.forEach((header, colIndex) => {
|
||||
formattedRow[String(header)] = row[colIndex] ?? null;
|
||||
});
|
||||
} else {
|
||||
row.forEach((cell, colIndex) => {
|
||||
formattedRow[excelCommon.numberToColumnName(colIndex + 1)] = cell;
|
||||
});
|
||||
}
|
||||
|
||||
changedItems.push({
|
||||
epochMilliSeconds: currentTime,
|
||||
data: {
|
||||
rowIndex: rowIndex + 1, // Make it 1-based for user readability
|
||||
values: formattedRow,
|
||||
changeType: oldHash ? 'updated' : 'added'
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Update stored hashes for next run
|
||||
await store.put('row_hashes', currentHashes);
|
||||
|
||||
return changedItems;
|
||||
}
|
||||
};
|
||||
|
||||
export const updatedRowTrigger = createTrigger({
|
||||
auth: excelAuth,
|
||||
name: triggerName,
|
||||
displayName: 'Updated Row',
|
||||
description: 'Fires when a row (in a worksheet) is added or updated.',
|
||||
props: {
|
||||
workbook_id: excelCommon.workbook_id,
|
||||
worksheet_id: excelCommon.worksheet_id,
|
||||
has_headers: Property.Checkbox({
|
||||
displayName: "First row has headers",
|
||||
description: "Enable this if the first row of your worksheet should be treated as headers.",
|
||||
required: true,
|
||||
defaultValue: false,
|
||||
})
|
||||
},
|
||||
type: TriggerStrategy.POLLING,
|
||||
sampleData: {
|
||||
"rowIndex": 1,
|
||||
"values": { "ID": 101, "Product": "Widget", "Price": 19.99 }
|
||||
},
|
||||
|
||||
onEnable: async (context) => {
|
||||
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
|
||||
onDisable: async (context) => {
|
||||
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
|
||||
run: async (context) => {
|
||||
return await pollingHelper.poll(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
files: context.files,
|
||||
});
|
||||
},
|
||||
|
||||
test: async (context) => {
|
||||
return await pollingHelper.test(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
files: context.files,
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"extends": "../../../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"noImplicitOverride": true,
|
||||
"noPropertyAccessFromIndexSignature": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"importHelpers": true
|
||||
},
|
||||
"files": [],
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.lib.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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