התקציב כולל שלושה גיליונות עבודה, והמחלקה הפיננסית רוצה לשנות שני תאים בגיליון השני. מסירת כל חוברת העבודה לסוכן AI כדי “לעדכן את Q3” מזמינה אותו לבנות מחדש את שלושת הגיליונות. עם שרת GroupDocs.Editor MCP פועל מקומית, Claude, Cursor או Copilot מחלץ רק את הגיליון הזה כ‑HTML שניתן לעריכה, מבצע את השינויים שביקשת, ושומר אותו בחזרה בעותק של חוברת העבודה המקורית, כך שהגיליונות האחרים לעולם לא עוברים דרך המודל. המצגות פועלות באותו אופן:

ב‑budget.xlsx, בגיליון 2 (Q3), קבע את Travel ל‑12,500 ושנה את שם Training ל‑“Training (external)”. השאר את הגיליונות האחרים ללא שינוי.

הגרסה שלב‑אחר‑שלב נמצאת בתיעוד: כיצד לערוך גיליון עבודה אחד או שקף ולשלב אותו חזרה במקור.

למה לא למסור לסוכן את כל הקובץ?

כי מודל אינו יכול להכיל חוברת עבודה. הוא יכול להכיל טקסט. כל גיליון שאתה נותן לו הוא גיליון שהוא עשוי “בצורה מועילה” לשחזר: מספרים מעוצבים מחדש, נוסחה מומרת לערכה, עמודה שלא הבין מוסרת. גם כשלא קורה שום דבר לא נכון, אינך יכול לדעת זאת מהתגובה. הפתרון הוא להגביל את ההיקף: תן לסוכן בדיוק את החלק שנדרש לשנות ושמור את השאר מחוץ להישג ידו.

HTML הוא הצורה המתאימה לחלק זה. טבלאות, סגנונות, גופנים ותמונות נשמרים בו, מודלים קוראים וכותבים אותו היטב, והוא ממופה חזרה למבנה המקורי. טקסט פשוט היה מאבד את העיצוב; קובץ ה‑XML הגולמי של .xlsx הוא מבוך שאין סוכן לערוך.

המעבר הלולאתי

budget.xlsx  (3 worksheets: Summary, Q3, Q4)
   |-- extract_html {"file":{...},"worksheet":2} --> budget_worksheet2.html
   |        agent edits the HTML: Travel 9000 -> 12500,
   |        "Training" -> "Training (external)"
   '-- save_from_html {"htmlFile":{"filePath":"budget_worksheet2.html"},
                       "format":"xlsx",
                       "sourceFile":{"filePath":"budget.xlsx"},
                       "worksheet":2}
         --> budget-q3-revised.xlsx : worksheet 2 replaced, 1 and 3 untouched
evaluation mode: worksheets/slides 1-2 can be edited; the server refuses 3+

מה שהשרת החזיר

נתפס מ‑GroupDocs.Editor.Mcp גרסה 26.10.0 על תקציב סינתטי:

-> extract_html {"file":{"filePath":"budget.xlsx"},"worksheet":2}
<- Extracted worksheet 2 of 3 of 'budget.xlsx' as editable HTML
   Saved to: …/budget_worksheet2.html
   Next: edit the saved .html and call save_from_html to write it back
   as DOCX, XLSX, PPTX, PDF or another format.
   Preview (plain text): ... Cost centre Planned (EUR) Owner Hosting
   57600 IT Support 14400 IT Travel 9000 Sales Training 6000 HR

-> save_from_html {"htmlFile":{"filePath":"budget_worksheet2.html"},
     "format":"xlsx","sourceFile":{"filePath":"budget.xlsx"},
     "worksheet":2,"outputName":"budget-q3-revised.xlsx"}
<- Saved 'budget_worksheet2.html' into a copy of 'budget.xlsx',
   replacing worksheet 2 of 3 (XLSX)
   Saved to: …/budget-q3-revised.xlsx

פתיחת התוצאה מאשרת את ההיקף: ב‑Q3, Travel הוא 12500 והשורה מציגה “Training (external)”; Hosting ו‑Support אינם משתנים; Summary ו‑Q4 נשארים כפי שהיו. הקובץ המקורי budget.xlsx לא שונה.

הכלים מתייחסים לגיליונות עבודה ולשקפים לפי מספר, לא לפי שם; get_document_info מחזיר את הספירה, ולכן ההנחיה אומרת “worksheet 2 (Q3)”. תשובת ההוצאה כוללת תצוגה מקדימה בטקסט פשוט, כך שהסוכן יכול לבדוק שיש לו את הגיליון הנכון לפני שהוא מבצע עריכות, וקו “Next:” שמציין איזו קריאה תבצע לאחר מכן. סוכנים מקיימים את הרמזים הללו היטב. בשקף, התצוגה המקדימה עשויה להתחיל בטקסט המחליף של המאסטר (“Click to edit Master title style”), ולכן הסוכן צריך לבדוק את ה‑HTML עצמו.

שקפים, והכלל האחד למצגות

אותו זוג פקודות פועל על מצגת: extract_html עם "slide": 2, עריכה, save_from_html עם "slide": 2 והמקור כ‑sourceFile. בבדיקה שלנו, שקף 2 של מצגת ביקורת בת שלושה שקפים יוצא כ‑HTML, “12 percent” הפך ל‑“14 percent”, והוא חזר כ‑review-revised.pptx עם שקפים 1 ו‑3 ללא שינוי.

ב‑PowerPoint, sourceFile אינו אופציונלי. HTML לבדו אינו מכיל את מאסטר השקף, והשרת מודיע על כך במקום לייצר מצגת פגומה:

-> save_from_html {"htmlFile":{"filePath":"review_slide2.html"},
                   "format":"pptx"}
<- Save from HTML failed for 'review_slide2.html' (-> pptx): 'pptx' output
   cannot be created from HTML alone; pass the original document as
   'sourceFile'.

ההודעה מציינת את הפרמטר החסר, ולכן סוכן מתקן את הקריאה בעצמו.

מתי המעבר הלולאתי מנצח חיפוש‑והחלפה

replace_text הוא הנתיב הקצר יותר למילה או שם. המעבר הלולאתי משמש לכל השאר: שינוי של כמה תאים בבת אחת, שינוי ניסוח של תווית ומספר יחד, ארגון מחדש של טבלה בשקף, או ביטוי ש‑replace_text אינו רואה מכיוון שהוא מפוצל לשתי ריצות עיצוב. זה גם הדרך שבה הסוכן קורא חלק לפני שמחליט מה לשנות.

קריאה לפני כתיבה

החצי הראשון של המעבר הלולאתי שימושי בפני עצמו. סוכן שנשאל “מה מתוכנן לנסיעה ב‑Q3, ומי הבעלים?” יכול לחלץ את גיליון Q3 ולענות מה‑HTML מבלי לגעת במשהו, וסוכן שעומד לערוך צריך לעשות זאת תחילה: לקרוא את החלק, לציין את השינוי שהוא מתכוון לבצע, ואז לכתוב. הכנס סדר זה להוראות הפרויקט שלך כך שיהפוך לברירת המחדל:

To change a worksheet or slide, use the groupdocs-editor MCP server:
extract_html for that one part, edit the HTML, save_from_html with the
original as sourceFile and the same worksheet/slide number. Never rebuild
the whole workbook or deck. Say which cells or text you changed.

השורה האחרונה היא החשובה ביותר. “שיניתי את Travel מ‑9000 ל‑12500 ושיניתי את שם Training ב‑Q3” היא תשובה שהמבקר יכול לבדוק מול הקובץ תוך שניות.

מגבלות כנות

  • מצב הערכה ערוך רק את שני הגיליונות או השקפים הראשונים, והשרת מסרב לשלישי עם סיבה: “Evaluation mode edits only the first 2 visible worksheets of a workbook; worksheet 3 is beyond them.”
  • שמירות ללא רישיון הן טיוטות: הגיליון הערוך מקבל שורת באנר בראש והחוברת מקבלת גיליון נוסף בשם “Evaluation Warning”.
  • ה‑HTML המוחלץ מריצה ללא רישיון מתחיל באותה שורת הערכה (התצוגה המקדימה למעלה מראה זאת), ולכן הסוכן צריך לערוך את התאים, לא את השורה הזו.
  • מספרי הגיליונות והשקפים מתחילים מ‑1, כולל מוסתרים. שקף מוסתר דורש showHidden: true; גיליון עבודה מוסתר נדחה ללא קשר למה שמוגדר ב‑showHidden, ולכן יש לבטל את ההסתרה בחוברת העבודה תחילה.

שאלות נפוצות

האם עריכת גיליון אחד משנה את האחרים?
לא. ה‑HTML הערוך מחליף רק את הגיליון שציינת, בעותק של המקור; השאר מועבר מהקובץ המקורי.

האם ניתן לעשות זאת עם שקפי PowerPoint?
כן, עם "slide" במקום "worksheet", והמקור מועבר כ‑sourceFile, כפי שדורש פלט PowerPoint.

לאן הולך התוצאה?
לקובץ חדש בתיקיית האחסון, budget-q3-revised.xlsx כאן מכיוון שהעברנו outputName; המקור נשאר ללא שינוי.

להעמיק יותר