src / tools / excelTools.ts
import ExcelJS from "exceljs";
import { existsSync } from "fs";
import { dirname } from "path";
import { ensureDirectory, resolveInsideBase } from "./constants";
export async function executeExcelTool(toolName: string, args: any): Promise<any> {
switch (toolName) {
case "readExcelSheet": {
const file = args?.file || "";
const sheet = args?.sheet;
const path = resolveInsideBase(file.endsWith(".xlsx") ? file : `${file}.xlsx`);
if (!existsSync(path)) return { success: false, error: `File not found` };
const wb = new ExcelJS.Workbook();
await wb.xlsx.readFile(path);
const ws = sheet ? wb.getWorksheet(sheet) : wb.worksheets[0];
if (!ws) return { success: false, error: `Sheet not found` };
const rows: any[] = [];
ws.eachRow((row) => {
const vals: any[] = [];
row.eachCell({ includeEmpty: true }, (cell) => vals.push(cell.value));
rows.push(vals);
});
return { success: true, rows, sheet: ws.name };
}
case "appendExcelRow": {
const file = args?.file || "";
const sheet = args?.sheet;
const row = Array.isArray(args?.row) ? args.row : [];
const path = resolveInsideBase(file.endsWith(".xlsx") ? file : `${file}.xlsx`);
const wb = new ExcelJS.Workbook();
if (existsSync(path)) await wb.xlsx.readFile(path);
let ws = sheet ? wb.getWorksheet(sheet) : wb.worksheets[0];
if (!ws) ws = wb.addWorksheet(sheet || "Sheet1");
ws.addRow(row);
await ensureDirectory(dirname(path));
await wb.xlsx.writeFile(path);
return { success: true, message: `Row appended to ${ws.name}` };
}
default:
return null;
}
}
src / tools / excelTools.ts
import ExcelJS from "exceljs";
import { existsSync } from "fs";
import { dirname } from "path";
import { ensureDirectory, resolveInsideBase } from "./constants";
export async function executeExcelTool(toolName: string, args: any): Promise<any> {
switch (toolName) {
case "readExcelSheet": {
const file = args?.file || "";
const sheet = args?.sheet;
const path = resolveInsideBase(file.endsWith(".xlsx") ? file : `${file}.xlsx`);
if (!existsSync(path)) return { success: false, error: `File not found` };
const wb = new ExcelJS.Workbook();
await wb.xlsx.readFile(path);
const ws = sheet ? wb.getWorksheet(sheet) : wb.worksheets[0];
if (!ws) return { success: false, error: `Sheet not found` };
const rows: any[] = [];
ws.eachRow((row) => {
const vals: any[] = [];
row.eachCell({ includeEmpty: true }, (cell) => vals.push(cell.value));
rows.push(vals);
});
return { success: true, rows, sheet: ws.name };
}
case "appendExcelRow": {
const file = args?.file || "";
const sheet = args?.sheet;
const row = Array.isArray(args?.row) ? args.row : [];
const path = resolveInsideBase(file.endsWith(".xlsx") ? file : `${file}.xlsx`);
const wb = new ExcelJS.Workbook();
if (existsSync(path)) await wb.xlsx.readFile(path);
let ws = sheet ? wb.getWorksheet(sheet) : wb.worksheets[0];
if (!ws) ws = wb.addWorksheet(sheet || "Sheet1");
ws.addRow(row);
await ensureDirectory(dirname(path));
await wb.xlsx.writeFile(path);
return { success: true, message: `Row appended to ${ws.name}` };
}
default:
return null;
}
}