n8n-nodes-excel-ai 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +618 -0
- package/README.zh-TW.md +613 -0
- package/dist/nodes/ExcelAI/ExcelAI.node.d.ts +27 -0
- package/dist/nodes/ExcelAI/ExcelAI.node.js +1111 -0
- package/dist/nodes/ExcelAI/ExcelAI.node.js.map +1 -0
- package/dist/nodes/ExcelAI/excel.svg +38 -0
- package/package.json +71 -0
package/README.zh-TW.md
ADDED
|
@@ -0,0 +1,613 @@
|
|
|
1
|
+
# n8n-nodes-excel-ai
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+

|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
一個強大的 n8n 社群節點,用於對 Excel 檔案執行 CRUD(新增、讀取、更新、刪除)操作,並支援 **AI Agent 整合**,可與 n8n AI Agents 無縫整合,實現自然語言的 Excel 操作。
|
|
8
|
+
|
|
9
|
+
## ✨ 功能特色
|
|
10
|
+
|
|
11
|
+
### 🤖 AI Agent 整合
|
|
12
|
+
- **原生 AI 支援**:可作為 AI Agent 工具使用(`usableAsTool: true`)
|
|
13
|
+
- **自然語言**:AI 可使用對話式查詢與 Excel 檔案互動
|
|
14
|
+
- **自動欄位映射**:自動偵測並映射試算表的欄位
|
|
15
|
+
- **智能資料處理**:接受 JSON 資料並進行智能欄位映射
|
|
16
|
+
|
|
17
|
+
### 📊 完整的 CRUD 操作
|
|
18
|
+
- **讀取**:使用篩選器和分頁查詢資料
|
|
19
|
+
- **新增**:使用自動欄位映射新增列
|
|
20
|
+
- **更新**:部分更新現有列
|
|
21
|
+
- **刪除**:依行號刪除列
|
|
22
|
+
- **搜尋**:使用進階匹配尋找行(精確匹配、包含、開頭/結尾匹配)
|
|
23
|
+
|
|
24
|
+
### 🗂️ 工作表管理
|
|
25
|
+
- **列出工作表**:取得活頁簿中的所有工作表
|
|
26
|
+
- **建立工作表**:新增工作表並可選擇初始資料
|
|
27
|
+
- **刪除工作表**:從活頁簿中移除工作表
|
|
28
|
+
- **重新命名工作表**:重新命名現有工作表
|
|
29
|
+
- **複製工作表**:複製工作表,包含所有資料和格式
|
|
30
|
+
- **取得工作表資訊**:取得工作表的詳細資訊,包括欄位設定
|
|
31
|
+
|
|
32
|
+
### 🔄 彈性的輸入模式
|
|
33
|
+
- **檔案路徑**:使用檔案系統中的 Excel 檔案
|
|
34
|
+
- **二進位資料**:處理來自上一個工作流程步驟的檔案
|
|
35
|
+
|
|
36
|
+
## 📦 安裝
|
|
37
|
+
|
|
38
|
+
### 選項 1:npm(推薦)
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# 導航到 n8n 自訂節點目錄
|
|
42
|
+
cd ~/.n8n/nodes
|
|
43
|
+
|
|
44
|
+
# 安裝套件
|
|
45
|
+
npm install n8n-nodes-excel-ai
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 選項 2:Docker
|
|
49
|
+
|
|
50
|
+
在您的 `docker-compose.yml` 中新增:
|
|
51
|
+
|
|
52
|
+
```yaml
|
|
53
|
+
version: '3.7'
|
|
54
|
+
|
|
55
|
+
services:
|
|
56
|
+
n8n:
|
|
57
|
+
image: n8nio/n8n
|
|
58
|
+
environment:
|
|
59
|
+
- NODE_FUNCTION_ALLOW_EXTERNAL=n8n-nodes-excel-ai
|
|
60
|
+
- N8N_CUSTOM_EXTENSIONS=/home/node/.n8n/custom
|
|
61
|
+
volumes:
|
|
62
|
+
- ~/.n8n/custom:/home/node/.n8n/custom
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
然後在容器內安裝:
|
|
66
|
+
```bash
|
|
67
|
+
docker exec -it <n8n-container> npm install n8n-nodes-excel-ai
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 選項 3:手動安裝
|
|
71
|
+
```bash
|
|
72
|
+
# 複製儲存庫
|
|
73
|
+
git clone https://github.com/code4Copilot/n8n-nodes-excel-ai.git
|
|
74
|
+
cd n8n-nodes-excel-ai
|
|
75
|
+
|
|
76
|
+
# 安裝相依套件
|
|
77
|
+
npm install
|
|
78
|
+
|
|
79
|
+
# 建置節點
|
|
80
|
+
npm run build
|
|
81
|
+
|
|
82
|
+
# 連結到 n8n
|
|
83
|
+
npm link
|
|
84
|
+
cd ~/.n8n/nodes
|
|
85
|
+
npm link n8n-nodes-excel-ai
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## 🚀 快速開始
|
|
89
|
+
|
|
90
|
+
### 基本使用
|
|
91
|
+
|
|
92
|
+
#### 1. 從 Excel 讀取資料
|
|
93
|
+
```javascript
|
|
94
|
+
// 節點設定
|
|
95
|
+
資源:列
|
|
96
|
+
操作:讀取列
|
|
97
|
+
檔案路徑:/data/customers.xlsx
|
|
98
|
+
工作表名稱:Customers
|
|
99
|
+
起始行:2
|
|
100
|
+
結束行:0(讀取全部)
|
|
101
|
+
|
|
102
|
+
// 輸出
|
|
103
|
+
[
|
|
104
|
+
{ "_rowNumber": 2, "Name": "張三", "Email": "zhang@example.com" },
|
|
105
|
+
{ "_rowNumber": 3, "Name": "李四", "Email": "li@example.com" }
|
|
106
|
+
]
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
#### 2. 新增列
|
|
110
|
+
```javascript
|
|
111
|
+
// 節點設定
|
|
112
|
+
資源:列
|
|
113
|
+
操作:附加列
|
|
114
|
+
檔案路徑:/data/customers.xlsx
|
|
115
|
+
工作表名稱:Customers
|
|
116
|
+
行資料:{"Name": "王五", "Email": "wang@example.com", "Status": "Active"}
|
|
117
|
+
|
|
118
|
+
// 輸出
|
|
119
|
+
{
|
|
120
|
+
"success": true,
|
|
121
|
+
"operation": "appendRow",
|
|
122
|
+
"rowNumber": 15,
|
|
123
|
+
"message": "Row added successfully at row 15"
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
#### 3. 尋找列
|
|
128
|
+
```javascript
|
|
129
|
+
// 節點設定
|
|
130
|
+
資源:列
|
|
131
|
+
操作:尋找列
|
|
132
|
+
檔案路徑:/data/customers.xlsx
|
|
133
|
+
工作表名稱:Customers
|
|
134
|
+
搜尋欄位:Status
|
|
135
|
+
搜尋值:Active
|
|
136
|
+
匹配類型:exact
|
|
137
|
+
|
|
138
|
+
// 輸出
|
|
139
|
+
[
|
|
140
|
+
{ "_rowNumber": 2, "Name": "張三", "Status": "Active" },
|
|
141
|
+
{ "_rowNumber": 5, "Name": "李四", "Status": "Active" }
|
|
142
|
+
]
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 🤖 AI Agent 使用範例
|
|
146
|
+
|
|
147
|
+
#### 範例 1:自然語言查詢
|
|
148
|
+
|
|
149
|
+
**使用者:** "顯示 customers.xlsx 檔案中的所有客戶"
|
|
150
|
+
|
|
151
|
+
**AI Agent 執行:**
|
|
152
|
+
```javascript
|
|
153
|
+
{
|
|
154
|
+
"operation": "readRows",
|
|
155
|
+
"filePath": "/data/customers.xlsx",
|
|
156
|
+
"sheetName": "Customers",
|
|
157
|
+
"startRow": 2,
|
|
158
|
+
"endRow": 0
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
#### 範例 2:透過 AI 新增資料
|
|
163
|
+
|
|
164
|
+
**使用者:** "新增一個名為 Sarah Johnson 的客戶,電子郵件是 sarah@example.com"
|
|
165
|
+
|
|
166
|
+
**AI Agent 執行:**
|
|
167
|
+
```javascript
|
|
168
|
+
{
|
|
169
|
+
"operation": "appendRow",
|
|
170
|
+
"filePath": "/data/customers.xlsx",
|
|
171
|
+
"sheetName": "Customers",
|
|
172
|
+
"rowData": {
|
|
173
|
+
"Name": "Sarah Johnson",
|
|
174
|
+
"Email": "sarah@example.com"
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
#### 範例 3:使用 AI 搜尋
|
|
180
|
+
|
|
181
|
+
**使用者:** "找出波士頓的所有活躍客戶"
|
|
182
|
+
|
|
183
|
+
**AI Agent 執行:**
|
|
184
|
+
```javascript
|
|
185
|
+
{
|
|
186
|
+
"operation": "findRows",
|
|
187
|
+
"filePath": "/data/customers.xlsx",
|
|
188
|
+
"sheetName": "Customers",
|
|
189
|
+
"searchColumn": "Status",
|
|
190
|
+
"searchValue": "Active",
|
|
191
|
+
"matchType": "exact"
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
然後在後續操作中按城市篩選。
|
|
196
|
+
|
|
197
|
+
## 📚 操作參考
|
|
198
|
+
|
|
199
|
+
### 列操作
|
|
200
|
+
|
|
201
|
+
#### 讀取列
|
|
202
|
+
- **用途**:從 Excel 檔案讀取資料
|
|
203
|
+
- **參數**:
|
|
204
|
+
- `startRow`:起始行號(預設:2)
|
|
205
|
+
- `endRow`:結束行號(0 = 所有列)
|
|
206
|
+
- **返回**:帶有 `_rowNumber` 欄位的列物件陣列
|
|
207
|
+
|
|
208
|
+
#### 附加列
|
|
209
|
+
- **用途**:在工作表末端新增列
|
|
210
|
+
- **參數**:
|
|
211
|
+
- `rowData`:包含欄位名稱和值的 JSON 物件
|
|
212
|
+
- **返回**:成功狀態和新列號
|
|
213
|
+
|
|
214
|
+
#### 插入列
|
|
215
|
+
- **用途**:在特定位置插入列
|
|
216
|
+
- **參數**:
|
|
217
|
+
- `rowNumber`:插入位置
|
|
218
|
+
- `rowData`:包含欄位名稱和值的 JSON 物件
|
|
219
|
+
- **返回**:成功狀態和列號
|
|
220
|
+
|
|
221
|
+
#### 更新列
|
|
222
|
+
- **用途**:更新現有列
|
|
223
|
+
- **參數**:
|
|
224
|
+
- `rowNumber`:要更新的列
|
|
225
|
+
- `updatedData`:包含要更新欄位的 JSON 物件
|
|
226
|
+
- **返回**:成功狀態和已更新的欄位
|
|
227
|
+
|
|
228
|
+
#### 刪除列
|
|
229
|
+
- **用途**:移除特定列
|
|
230
|
+
- **參數**:
|
|
231
|
+
- `rowNumber`:要刪除的列(不能是 1 - 標題列)
|
|
232
|
+
- **返回**:成功狀態
|
|
233
|
+
|
|
234
|
+
#### 尋找列
|
|
235
|
+
- **用途**:搜尋符合條件的列
|
|
236
|
+
- **參數**:
|
|
237
|
+
- `searchColumn`:要搜尋的欄位
|
|
238
|
+
- `searchValue`:要搜尋的值
|
|
239
|
+
- `matchType`:exact | contains | startsWith | endsWith
|
|
240
|
+
- `returnRowNumbers`:只返回列號(預設:false)
|
|
241
|
+
- **返回**:符合列的陣列或列號
|
|
242
|
+
|
|
243
|
+
### 工作表操作
|
|
244
|
+
|
|
245
|
+
#### 列出工作表
|
|
246
|
+
- **用途**:取得活頁簿中的所有工作表
|
|
247
|
+
- **參數**:
|
|
248
|
+
- `includeHidden`:包含隱藏工作表(預設:false)
|
|
249
|
+
- **返回**:工作表資訊陣列
|
|
250
|
+
|
|
251
|
+
#### 建立工作表
|
|
252
|
+
- **用途**:建立新工作表
|
|
253
|
+
- **參數**:
|
|
254
|
+
- `newSheetName`:新工作表的名稱
|
|
255
|
+
- `initialData`:可選的初始資料物件陣列
|
|
256
|
+
- **返回**:成功狀態和工作表資訊
|
|
257
|
+
|
|
258
|
+
#### 刪除工作表
|
|
259
|
+
- **用途**:從活頁簿移除工作表
|
|
260
|
+
- **參數**:
|
|
261
|
+
- `worksheetName`:要刪除的工作表名稱
|
|
262
|
+
- **返回**:成功狀態
|
|
263
|
+
|
|
264
|
+
#### 重新命名工作表
|
|
265
|
+
- **用途**:重新命名現有工作表
|
|
266
|
+
- **參數**:
|
|
267
|
+
- `worksheetName`:工作表的目前名稱
|
|
268
|
+
- `newSheetName`:工作表的新名稱
|
|
269
|
+
- **返回**:包含舊名稱和新名稱的成功狀態
|
|
270
|
+
|
|
271
|
+
**範例:**
|
|
272
|
+
```javascript
|
|
273
|
+
{
|
|
274
|
+
"worksheetOperation": "renameWorksheet",
|
|
275
|
+
"filePath": "/data/reports.xlsx",
|
|
276
|
+
"worksheetName": "Sheet1",
|
|
277
|
+
"newSheetName": "Sales_2024",
|
|
278
|
+
"autoSave": true
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
#### 複製工作表
|
|
283
|
+
- **用途**:複製工作表及其所有資料和格式
|
|
284
|
+
- **參數**:
|
|
285
|
+
- `worksheetName`:要複製的工作表名稱
|
|
286
|
+
- `newSheetName`:複製工作表的名稱
|
|
287
|
+
- **返回**:包含來源和新工作表名稱、列數的成功狀態
|
|
288
|
+
|
|
289
|
+
**範例:**
|
|
290
|
+
```javascript
|
|
291
|
+
{
|
|
292
|
+
"worksheetOperation": "copyWorksheet",
|
|
293
|
+
"filePath": "/data/templates.xlsx",
|
|
294
|
+
"worksheetName": "Template_2024",
|
|
295
|
+
"newSheetName": "Template_2025",
|
|
296
|
+
"autoSave": true
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
**輸出:**
|
|
301
|
+
```javascript
|
|
302
|
+
{
|
|
303
|
+
"success": true,
|
|
304
|
+
"operation": "copyWorksheet",
|
|
305
|
+
"sourceName": "Template_2024",
|
|
306
|
+
"newName": "Template_2025",
|
|
307
|
+
"rowCount": 50
|
|
308
|
+
}
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
#### 取得工作表資訊
|
|
312
|
+
- **用途**:取得工作表的詳細資訊
|
|
313
|
+
- **參數**:
|
|
314
|
+
- `worksheetName`:工作表名稱
|
|
315
|
+
- **返回**:包含欄位在內的詳細工作表資訊
|
|
316
|
+
|
|
317
|
+
**範例:**
|
|
318
|
+
```javascript
|
|
319
|
+
{
|
|
320
|
+
"worksheetOperation": "getWorksheetInfo",
|
|
321
|
+
"filePath": "/data/database.xlsx",
|
|
322
|
+
"worksheetName": "Users"
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
**輸出:**
|
|
327
|
+
```javascript
|
|
328
|
+
{
|
|
329
|
+
"operation": "getWorksheetInfo",
|
|
330
|
+
"sheetName": "Users",
|
|
331
|
+
"rowCount": 150,
|
|
332
|
+
"columnCount": 6,
|
|
333
|
+
"actualRowCount": 151,
|
|
334
|
+
"actualColumnCount": 6,
|
|
335
|
+
"state": "visible",
|
|
336
|
+
"columns": [
|
|
337
|
+
{
|
|
338
|
+
"index": 1,
|
|
339
|
+
"letter": "A",
|
|
340
|
+
"header": "UserID",
|
|
341
|
+
"width": 15
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"index": 2,
|
|
345
|
+
"letter": "B",
|
|
346
|
+
"header": "Name",
|
|
347
|
+
"width": 25
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"index": 3,
|
|
351
|
+
"letter": "C",
|
|
352
|
+
"header": "Email",
|
|
353
|
+
"width": 30
|
|
354
|
+
}
|
|
355
|
+
// ... 更多欄位
|
|
356
|
+
]
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
## 🤖 與 AI Agents 一起使用
|
|
361
|
+
|
|
362
|
+
### 設定
|
|
363
|
+
|
|
364
|
+
此節點設計為與 n8n AI Agents 無縫協作。該節點配置了 `usableAsTool: true`,使其自動可供 AI Agents 使用。
|
|
365
|
+
|
|
366
|
+
### 啟用 AI 參數
|
|
367
|
+
|
|
368
|
+
1. 在節點設定中,尋找帶有 ✨ 星號圖示的參數
|
|
369
|
+
2. 點擊任何參數旁邊的 ✨ 圖示以啟用 AI 自動填寫
|
|
370
|
+
3. AI Agent 現在可以自動設定該參數的值
|
|
371
|
+
|
|
372
|
+
### AI Agent 範例
|
|
373
|
+
|
|
374
|
+
#### 範例 1:自然語言資料操作
|
|
375
|
+
|
|
376
|
+
**工作流程設定:**
|
|
377
|
+
```
|
|
378
|
+
AI Agent → Excel AI 節點
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
**使用者查詢:** "從 Excel 檔案中取得所有客戶並顯示紐約的客戶"
|
|
382
|
+
|
|
383
|
+
**AI Agent 動作:**
|
|
384
|
+
1. 使用 Excel AI 讀取所有列
|
|
385
|
+
2. 篩選紐約客戶的結果
|
|
386
|
+
3. 返回格式化的結果
|
|
387
|
+
|
|
388
|
+
#### 範例 2:多步驟操作
|
|
389
|
+
|
|
390
|
+
**使用者查詢:** "複製 2024 範本工作表以建立 2025 版本,然後新增一月資料"
|
|
391
|
+
|
|
392
|
+
**AI Agent 動作:**
|
|
393
|
+
1. 使用 `copyWorksheet` 操作複製工作表
|
|
394
|
+
2. 使用 `appendRow` 新增資料列
|
|
395
|
+
3. 確認完成
|
|
396
|
+
|
|
397
|
+
#### 範例 3:資料分析
|
|
398
|
+
|
|
399
|
+
**使用者查詢:** "顯示 Users 工作表的結構"
|
|
400
|
+
|
|
401
|
+
**AI Agent 動作:**
|
|
402
|
+
1. 使用 `getWorksheetInfo` 取得欄位詳情
|
|
403
|
+
2. 格式化並呈現結構
|
|
404
|
+
3. 根據欄位建議資料操作
|
|
405
|
+
|
|
406
|
+
### AI 整合最佳實踐
|
|
407
|
+
|
|
408
|
+
1. **清晰的檔案路徑**:使用檔案的絕對路徑
|
|
409
|
+
2. **描述性工作表名稱**:清楚命名工作表以便 AI 理解
|
|
410
|
+
3. **一致的欄位標題**:使用清晰、描述性的欄位名稱
|
|
411
|
+
4. **啟用 AI 參數**:允許 AI 控制操作和工作表選擇
|
|
412
|
+
5. **錯誤上下文**:AI 將自然地處理和解釋錯誤
|
|
413
|
+
|
|
414
|
+
## 🔧 進階功能
|
|
415
|
+
|
|
416
|
+
### 自動欄位映射
|
|
417
|
+
|
|
418
|
+
節點會自動從標題列(第 1 列)偵測欄位,並相應地映射您的 JSON 資料:
|
|
419
|
+
|
|
420
|
+
```javascript
|
|
421
|
+
// Excel 標題:Name | Email | Phone | Status
|
|
422
|
+
|
|
423
|
+
// 您的輸入
|
|
424
|
+
{
|
|
425
|
+
"Name": "張三",
|
|
426
|
+
"Email": "zhang@example.com",
|
|
427
|
+
"Status": "Active"
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
// 自動映射到正確的欄位
|
|
431
|
+
// Phone 將保持空白
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
### 智能資料類型
|
|
435
|
+
|
|
436
|
+
- **字串**:自動處理
|
|
437
|
+
- **數字**:保留為數字類型
|
|
438
|
+
- **日期**:由 ExcelJS 處理
|
|
439
|
+
- **公式**:存在時保留
|
|
440
|
+
- **空儲存格**:返回為空字串
|
|
441
|
+
|
|
442
|
+
### 錯誤處理
|
|
443
|
+
|
|
444
|
+
```javascript
|
|
445
|
+
// 錯誤回應格式
|
|
446
|
+
{
|
|
447
|
+
"error": "Column 'InvalidColumn' not found",
|
|
448
|
+
"operation": "findRows",
|
|
449
|
+
"resource": "row"
|
|
450
|
+
}
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
在節點設定中啟用「失敗時繼續」以在工作流程中優雅地處理錯誤。
|
|
454
|
+
|
|
455
|
+
## ⚙️ 設定選項
|
|
456
|
+
|
|
457
|
+
### 檔案路徑 vs 二進位資料
|
|
458
|
+
|
|
459
|
+
**檔案路徑模式:**
|
|
460
|
+
- 最適合:伺服器端操作、排程工作流程
|
|
461
|
+
- 優點:直接檔案存取、自動儲存支援
|
|
462
|
+
- 缺點:需要檔案系統存取
|
|
463
|
+
|
|
464
|
+
**二進位資料模式:**
|
|
465
|
+
- 最適合:處理上傳的檔案、工作流程資料
|
|
466
|
+
- 優點:適用於任何檔案來源、可攜性
|
|
467
|
+
- 缺點:必須手動處理檔案儲存
|
|
468
|
+
|
|
469
|
+
### 自動儲存
|
|
470
|
+
|
|
471
|
+
啟用時(僅限檔案路徑模式):
|
|
472
|
+
- 變更會自動儲存到原始檔案
|
|
473
|
+
- 停用以在儲存前預覽/驗證
|
|
474
|
+
|
|
475
|
+
## 💡 範例
|
|
476
|
+
|
|
477
|
+
### 範例 1:資料匯入工作流程
|
|
478
|
+
|
|
479
|
+
```
|
|
480
|
+
HTTP 請求(上傳)→ Excel CRUD(附加列)→ Slack(通知)
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
### 範例 2:資料驗證
|
|
484
|
+
|
|
485
|
+
```
|
|
486
|
+
排程觸發器 → Excel CRUD(讀取列)→ If(驗證)→ Excel CRUD(更新列)
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
### 範例 3:AI 驅動的資料輸入
|
|
490
|
+
|
|
491
|
+
```
|
|
492
|
+
AI Agent 聊天 → Excel CRUD(多個操作)→ 回應
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
### 範例 4:報表生成
|
|
496
|
+
|
|
497
|
+
```
|
|
498
|
+
Excel CRUD(讀取列)→ 彙總 → Excel CRUD(建立工作表)→ 電子郵件
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
## 🧪 測試
|
|
502
|
+
|
|
503
|
+
```bash
|
|
504
|
+
# 執行所有測試
|
|
505
|
+
npm test
|
|
506
|
+
|
|
507
|
+
# 執行覆蓋率測試
|
|
508
|
+
npm test -- --coverage
|
|
509
|
+
|
|
510
|
+
# 監視模式
|
|
511
|
+
npm test -- --watch
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
## 🛠️ 開發
|
|
515
|
+
|
|
516
|
+
```bash
|
|
517
|
+
# 複製並安裝
|
|
518
|
+
git clone https://github.com/code4Copilot/n8n-nodes-excel-ai.git
|
|
519
|
+
cd n8n-nodes-excel-ai
|
|
520
|
+
npm install
|
|
521
|
+
|
|
522
|
+
# 建置
|
|
523
|
+
npm run build
|
|
524
|
+
|
|
525
|
+
# 開發的監視模式
|
|
526
|
+
npm run dev
|
|
527
|
+
|
|
528
|
+
# 程式碼檢查
|
|
529
|
+
npm run lint
|
|
530
|
+
npm run lintfix
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
## 📝 變更日誌
|
|
534
|
+
|
|
535
|
+
### v1.0.0(最新)
|
|
536
|
+
- ✨ 新增完整的 AI Agent 整合(`usableAsTool: true`)
|
|
537
|
+
- ✨ 自動欄位偵測和映射
|
|
538
|
+
- ✨ 增強的 JSON 資料處理
|
|
539
|
+
- 📝 改進 AI 的參數描述
|
|
540
|
+
- 🐛 更好的錯誤訊息
|
|
541
|
+
- 📚 全面的 AI 使用文件
|
|
542
|
+
- 新增工作表操作
|
|
543
|
+
- 二進位資料支援
|
|
544
|
+
- 自動儲存選項
|
|
545
|
+
- 尋找列操作
|
|
546
|
+
- 帶匹配類型的進階搜尋
|
|
547
|
+
- 插入列操作
|
|
548
|
+
- 初始版本
|
|
549
|
+
- 基本 CRUD 操作
|
|
550
|
+
- 檔案路徑支援
|
|
551
|
+
|
|
552
|
+
## 🤝 貢獻
|
|
553
|
+
|
|
554
|
+
歡迎貢獻!請隨時提交 Pull Request。
|
|
555
|
+
|
|
556
|
+
1. Fork 儲存庫
|
|
557
|
+
2. 建立您的功能分支(`git checkout -b feature/AmazingFeature`)
|
|
558
|
+
3. 提交您的變更(`git commit -m 'Add some AmazingFeature'`)
|
|
559
|
+
4. 推送到分支(`git push origin feature/AmazingFeature`)
|
|
560
|
+
5. 開啟一個 Pull Request
|
|
561
|
+
|
|
562
|
+
## 📄 授權
|
|
563
|
+
|
|
564
|
+
此專案採用 MIT 授權 - 詳情請參閱 [LICENSE](LICENSE) 檔案。
|
|
565
|
+
|
|
566
|
+
```
|
|
567
|
+
MIT License
|
|
568
|
+
|
|
569
|
+
Copyright (c) 2024 Your Name
|
|
570
|
+
|
|
571
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
572
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
573
|
+
in the Software without restriction, including without limitation the rights
|
|
574
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
575
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
576
|
+
furnished to do so, subject to the following conditions:
|
|
577
|
+
|
|
578
|
+
The above copyright notice and this permission notice shall be included in all
|
|
579
|
+
copies or substantial portions of the Software.
|
|
580
|
+
|
|
581
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
582
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
583
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
584
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
585
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
586
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
587
|
+
SOFTWARE.
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
## 🙏 致謝
|
|
591
|
+
|
|
592
|
+
- 為 [n8n](https://n8n.io) 工作流程自動化平台建立
|
|
593
|
+
- 使用 [ExcelJS](https://github.com/exceljs/exceljs) 進行 Excel 檔案處理
|
|
594
|
+
- 受 n8n 社群啟發
|
|
595
|
+
|
|
596
|
+
## 🆘 支援
|
|
597
|
+
|
|
598
|
+
- **問題**:[GitHub Issues](https://github.com/code4Copilot/n8n-nodes-excel-ai/issues)
|
|
599
|
+
- **討論**:[GitHub Discussions](https://github.com/code4Copilot/n8n-nodes-excel-ai/discussions)
|
|
600
|
+
- **n8n 社群**:[n8n 社群論壇](https://community.n8n.io)
|
|
601
|
+
|
|
602
|
+
## 💖 顯示您的支持
|
|
603
|
+
|
|
604
|
+
如果您覺得這個節點有用,請考慮:
|
|
605
|
+
- ⭐ 為儲存庫加星標
|
|
606
|
+
- 🐛 報告錯誤
|
|
607
|
+
- 💡 建議新功能
|
|
608
|
+
- 📝 改進文件
|
|
609
|
+
- 🔧 貢獻程式碼
|
|
610
|
+
|
|
611
|
+
---
|
|
612
|
+
|
|
613
|
+
**用 ❤️ 為 n8n 社群製作**
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { IExecuteFunctions, ILoadOptionsFunctions, INodeExecutionData, INodePropertyOptions, INodeType, INodeTypeDescription } from 'n8n-workflow';
|
|
2
|
+
export declare class ExcelAI implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
methods: {
|
|
5
|
+
loadOptions: {
|
|
6
|
+
getWorksheets(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
|
|
7
|
+
getColumns(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
11
|
+
private static getColumnMapping;
|
|
12
|
+
private static mapRowData;
|
|
13
|
+
private static parseJsonInput;
|
|
14
|
+
private static handleReadRows;
|
|
15
|
+
private static handleAppendRow;
|
|
16
|
+
private static handleInsertRow;
|
|
17
|
+
private static handleUpdateRow;
|
|
18
|
+
private static handleDeleteRow;
|
|
19
|
+
private static handleFindRows;
|
|
20
|
+
private static handleListWorksheets;
|
|
21
|
+
private static handleCreateWorksheet;
|
|
22
|
+
private static handleDeleteWorksheet;
|
|
23
|
+
private static handleRenameWorksheet;
|
|
24
|
+
private static handleCopyWorksheet;
|
|
25
|
+
private static handleGetWorksheetInfo;
|
|
26
|
+
private static columnNumberToLetter;
|
|
27
|
+
}
|