diff --git a/apps/sim/blocks/blocks/microsoft_excel.ts b/apps/sim/blocks/blocks/microsoft_excel.ts index 4d05101cbed..4312a5b370a 100644 --- a/apps/sim/blocks/blocks/microsoft_excel.ts +++ b/apps/sim/blocks/blocks/microsoft_excel.ts @@ -234,41 +234,6 @@ Return ONLY the JSON array - no explanations, no markdown, no extra text.`, ], condition: { field: 'operation', value: 'write' }, }, - { - id: 'values', - title: 'Values', - type: 'long-input', - placeholder: - 'Enter values as JSON array of arrays (e.g., [["A1", "B1"], ["A2", "B2"]]) or an array of objects (e.g., [{"name":"John", "age":30}, {"name":"Jane", "age":25}])', - condition: { field: 'operation', value: 'update' }, - required: true, - wandConfig: { - enabled: true, - prompt: `Generate Microsoft Excel data as a JSON array based on the user's description. - -Format options: -1. Array of arrays: [["Header1", "Header2"], ["Value1", "Value2"]] -2. Array of objects: [{"column1": "value1", "column2": "value2"}] - -Examples: -- "update with new prices" -> [["Product", "Price"], ["Widget A", 29.99], ["Widget B", 49.99]] -- "quarterly targets" -> [{"Q1": 10000, "Q2": 12000, "Q3": 15000, "Q4": 18000}] - -Return ONLY the JSON array - no explanations, no markdown, no extra text.`, - placeholder: 'Describe the data you want to update...', - generationType: 'json-object', - }, - }, - { - id: 'valueInputOption', - title: 'Value Input Option', - type: 'dropdown', - options: [ - { label: 'User Entered (Parse formulas)', id: 'USER_ENTERED' }, - { label: "Raw (Don't parse formulas)", id: 'RAW' }, - ], - condition: { field: 'operation', value: 'update' }, - }, { id: 'values', title: 'Values', diff --git a/apps/sim/tools/microsoft_excel/read.ts b/apps/sim/tools/microsoft_excel/read.ts index adf4ab53850..fe18103b563 100644 --- a/apps/sim/tools/microsoft_excel/read.ts +++ b/apps/sim/tools/microsoft_excel/read.ts @@ -7,6 +7,7 @@ import type { MicrosoftExcelV2ToolParams, } from '@/tools/microsoft_excel/types' import { + escapeODataString, getItemBasePath, getSpreadsheetWebUrl, parseGraphErrorMessage, @@ -79,7 +80,7 @@ export const readTool: ToolConfig { - const tableName = encodeURIComponent(params.tableName) - const basePath = getItemBasePath(params.spreadsheetId, params.driveId) - return `${basePath}/workbook/tables('${tableName}')/rows/add` + const spreadsheetId = params.spreadsheetId?.trim() + if (!spreadsheetId) { + throw new Error('Spreadsheet ID is required') + } + const tableName = params.tableName?.trim() + if (!tableName) { + throw new Error('Table name is required') + } + const basePath = getItemBasePath(spreadsheetId, params.driveId) + return `${basePath}/workbook/tables('${encodeURIComponent(escapeODataString(tableName))}')/rows/add` }, method: 'POST', - headers: (params) => ({ - Authorization: `Bearer ${params.accessToken}`, - 'Content-Type': 'application/json', - }), + headers: (params) => { + if (!params.accessToken) { + throw new Error('Access token is required') + } + return { + Authorization: `Bearer ${params.accessToken}`, + 'Content-Type': 'application/json', + } + }, body: (params) => { let processedValues: any = params.values || [] diff --git a/apps/sim/tools/microsoft_excel/types.ts b/apps/sim/tools/microsoft_excel/types.ts index a3d3bc42d34..ed5a3123587 100644 --- a/apps/sim/tools/microsoft_excel/types.ts +++ b/apps/sim/tools/microsoft_excel/types.ts @@ -4,8 +4,6 @@ import type { ToolResponse } from '@/tools/types' export type ExcelCellValue = string | number | boolean | null interface MicrosoftExcelRange { - sheetId?: number - sheetName?: string range: string values: ExcelCellValue[][] } @@ -13,14 +11,6 @@ interface MicrosoftExcelRange { interface MicrosoftExcelMetadata { spreadsheetId: string spreadsheetUrl?: string - title?: string - sheets?: { - sheetId: number - title: string - index: number - rowCount?: number - columnCount?: number - }[] } export interface MicrosoftExcelReadResponse extends ToolResponse { @@ -67,10 +57,7 @@ export interface MicrosoftExcelToolParams { range?: string values?: ExcelCellValue[][] valueInputOption?: 'RAW' | 'USER_ENTERED' - insertDataOption?: 'OVERWRITE' | 'INSERT_ROWS' includeValuesInResponse?: boolean - responseValueRenderOption?: 'FORMATTED_VALUE' | 'UNFORMATTED_VALUE' | 'FORMULA' - majorDimension?: 'ROWS' | 'COLUMNS' } export interface MicrosoftExcelTableToolParams { @@ -79,7 +66,6 @@ export interface MicrosoftExcelTableToolParams { driveId?: string tableName: string values: ExcelCellValue[][] - rowIndex?: number } export interface MicrosoftExcelWorksheetToolParams { @@ -217,7 +203,6 @@ export interface MicrosoftExcelV2ToolParams { values?: ExcelCellValue[][] valueInputOption?: 'RAW' | 'USER_ENTERED' includeValuesInResponse?: boolean - majorDimension?: 'ROWS' | 'COLUMNS' } export interface MicrosoftExcelV2ReadResponse extends ToolResponse { diff --git a/apps/sim/tools/microsoft_excel/write.ts b/apps/sim/tools/microsoft_excel/write.ts index 0420c753648..4c2ec1dc2b2 100644 --- a/apps/sim/tools/microsoft_excel/write.ts +++ b/apps/sim/tools/microsoft_excel/write.ts @@ -5,7 +5,11 @@ import type { MicrosoftExcelV2WriteResponse, MicrosoftExcelWriteResponse, } from '@/tools/microsoft_excel/types' -import { getItemBasePath, getSpreadsheetWebUrl } from '@/tools/microsoft_excel/utils' +import { + escapeODataString, + getItemBasePath, + getSpreadsheetWebUrl, +} from '@/tools/microsoft_excel/utils' import type { ToolConfig } from '@/tools/types' /** @@ -82,6 +86,11 @@ export const writeTool: ToolConfig { + const spreadsheetId = params.spreadsheetId?.trim() + if (!spreadsheetId) { + throw new Error('Spreadsheet ID is required') + } + const rangeInput = params.range?.trim() const match = rangeInput?.match(/^([^!]+)!(.+)$/) @@ -89,10 +98,10 @@ export const writeTool: ToolConfig = { - majorDimension: params.majorDimension || 'ROWS', + majorDimension: 'ROWS', values: processedValues, } @@ -173,10 +182,10 @@ export const writeTool: ToolConfig = { - majorDimension: params.majorDimension || 'ROWS', + majorDimension: 'ROWS', values: processedValues, }