getSheetData.ts•2.54 kB
/**
* シートデータ取得ツール
*/
import { z } from "zod";
import { extractSpreadsheetId, getSpreadsheetInfo, getSheetData } from "../api/spreadsheet.js";
import { formatSheetData } from "../utils/format.js";
/**
* シートデータ取得ツール
* 指定されたスプレッドシートから特定のシートのデータを取得
*/
export const getSheetDataTool = {
name: "getSheetData",
description: "スプレッドシートの特定シートのデータを取得",
schema: {
url: z.string().describe("スプレッドシートのURL"),
sheetName: z.string().describe("取得するシート名")
},
handler: async ({ url, sheetName }: { url: string; sheetName: string }) => {
try {
const spreadsheetId = extractSpreadsheetId(url);
if (!spreadsheetId) {
return {
content: [
{
type: "text" as const,
text: "有効なスプレッドシートURLではありません。Google SpreadsheetのURLを入力してください。"
}
],
isError: true
};
}
// スプレッドシート情報を取得して、シート名が有効かチェック
const spreadsheetInfo = await getSpreadsheetInfo(spreadsheetId);
const isValidSheet = spreadsheetInfo.sheets.some(sheet => sheet.name === sheetName);
if (!isValidSheet) {
const availableSheets = spreadsheetInfo.sheets.map(sheet => sheet.name).join(", ");
return {
content: [
{
type: "text" as const,
text: `シート「${sheetName}」は存在しません。利用可能なシート: ${availableSheets}`
}
],
isError: true
};
}
// シートデータを取得
const sheetData = await getSheetData(spreadsheetId, sheetName);
// データをフォーマットして返す
const formattedResult = formatSheetData(sheetData, sheetName, spreadsheetInfo.name);
return {
content: [
{
type: "text" as const,
text: formattedResult
}
]
};
} catch (error) {
console.error("シートデータ取得エラー:", error);
return {
content: [
{
type: "text" as const,
text: `シートデータの取得中にエラーが発生しました: ${error instanceof Error ? error.message : String(error)}`
}
],
isError: true
};
}
}
};