כיצד ליצור ולהפעיל מאקרו ב-LibreOffice Calc ב-Linux

LibreOffice הוא התשובה של עולם ה-FOSS לחבילת ה-Microsoft Office הקניינית והקניינית. פותח על ידי מפתחי תוכנת Office Productivity מובילים ותורמים, הוא מציע תחליף מלא ל-Microsoft Office על מערכות הפעלה מרובות.

המקבילה לאפליקציית LibreOffice של Microsoft Excel נקראת LibreOffice Calc. הוא מגיע עם מספר תכונות וממשק דומה לאקסל. יש לו מנוע מאקרו מובנה לפיתוח והרצה של מאקרו לאוטומציה. עם זאת, הוא אינו תומך ב-Visual Basic, אלא תומך בשפה משלו; LibreOffice Basic, לתכנות פקודות מאקרו.

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

יצירה והרצה של מאקרו ב-LibreOffice Calc

ראשית, בואו ניצור גליון עבודה עם כמה נתונים לדוגמה.

כדי לפתוח את מארגן המאקרו, עבור אל כלים » פקודות מאקרו » ארגון פקודות מאקרו » יסודות LibreOffice. זה יפתח את מאקרו של LibreOffice Basic חלון כפי שמוצג בצילום המסך למטה.

הזן שם חדש עבור המאקרו ולאחר מכן לחץ על הלחצן חדש בצד הימני התחתון של החלון.

כעת אתה אמור לראות את מסך עורך המאקרו ב-LibreOffice Basic.

כפי שאנו יכולים לראות, פקודות מאקרו שנוצרו באופן ידני נוצרות כברירת מחדל תחת "המאקרו והדיאלוגים שלי -> סטנדרטי -> מודול1".

כרגע קיימות שתי פקודות מאקרו: אחת היא רָאשִׁי, שהוא מאקרו ריק ברירת מחדל, ואחר הוא מִבְחָן, המאקרו שיצרנו למעלה. כעת נשפר את מאקרו הבדיקה.

המאקרו שלנו יבצע את המשימות הבאות:

  • בדוק לאיזה כל האנשים יש מקצוע סופר
  • צור גיליון חדש
  • העבר את כל הערכים לכותבים בגיליון חדש

להלן המאקרו שלנו:

Sub test rem העבר ערכים עם מקצוע כותב לגיליון חדש dim crs(8) כאובייקט dim j as Integer dim prof as object dim i as Integer dim sh as object dim sh2 as object sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1 עבור i = 1 עד 5 x = 1 prof = sh.GetCellByPosition(3, i) rem אחסן שורה שלמה במשתנה If prof.string = "Writer" אז crs(j) = sh.getCellRangeByPosition(0, i, 3, i) j = j + 1 End If next i rem עכשיו צור גיליון חדש וכתוב את הנתונים האלה שם ThisComponent.Sheets.insertNewByName("Writers", 1) sh2 = ThisComponent.Sheets(1) i = 0 Do While not IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 סאב סוף לולאה

תן לי להסביר לך את המאקרו שלעיל סעיף אחר סעיף.

מבחן משנה. . . סיום משנה

מִבְחָן הוא השם של המאקרו שלנו, ומכאן בקוד, הוא מסומן כ מבחן משנה (משנה = תת שגרה). באופן דומה אנו מסיימים את קוד המאקרו הזה במשפט סיום משנה. שימו לב שהצהרות אלו מתווספות אוטומטית כאשר אנו יוצרים מאקרו מהתפריט, אם כי המשתמש יכול לכתוב ישירות את קוד המאקרו כאן ושם תת-השגרה ייחשב כשם מאקרו.

rem 

כל ההערות ב-LibreOffice Basic מתחילות במילת המפתח rem. שורה שלמה שמתחילה ברם נחשבת להערה. דרך נוספת היא להשתמש ' (פסיק הפוך בודד) בתחילת השורה.

dim crs(8) as object dim j as Integer dim prof as object dim i as Integer dim sh as object dim sh2 as object

זוהי הצהרת משתנה ב-LibreOffice Basic. התחביר הכללי הוא עמום כמו . כדי להכריז על מערך, השתמש בתחביר דומה למשתנה crs, כאשר 8 הוא אורך המערך.

sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1

רכיב זה מתייחס למסמך הנוכחי. במקרה זה זהו גיליון עבודה של Calc. אנו טוענים Sheet עם אינדקס 0, כלומר, הגיליון הראשון, במשתנה sh. יש גם פונקציות לטעינת גיליון באמצעות שם.

לאחר מכן אנו קוראים לפונקציה getCellRangeByPosition של אובייקט sh וטען אותו למערך crs. טווח תאים מתייחס לקבוצת תאים בגיליון על סמך מיקום.

שימו לב שהטיעונים, 0, 0 (עמודה 0, שורה 0) מציינים את התא ההתחלתי של הטווח, ו 3, 0 (עמודה 3, שורה 0) מציינים את תא הסיום של הטווח. לכן 0, 0, 3, 0 מתייחס לשורה הראשונה (כותרת) של גיליון הדוגמאות שלנו.

עבור i = 1 עד 5 x = 1 prof = sh.GetCellByPosition(3, i) rem אחסן שורה שלמה במשתנה אם prof.string = "Writer" אז crs(j) = sh.getCellRangeByPosition(0, i, 3, i ) j = j + 1 סוף אם הבא i

אנו משתמשים ב- a ל הצהרה ללולאה בין השורות. ה ל בלוק מסתיים בא הַבָּא משפט, שמגדיל את המשתנה i בסוף כל איטרציה.

לאחר מכן אנו קוראים לפונקציה GetCellByPosition של חפץ ש. אנחנו מעבירים פרמטרים (3, א), כלומר, בכל איטרציה, אובייקט התא בעמודה 3 ובשורה i מאוחזר במשתנה prof.

לאחר מכן אנו משתמשים ב-an אם הצהרה כדי לבדוק אם הערך ב-cell prof הוא "Writer". אם כן, אנו שוב קוראים לפונקציה getCellRangeByPosition, הפעם, עם אני במקום מספר שורת ההתחלה והסיום. שוב אנו מאחסנים אותו במערך crs.

ThisComponent.Sheets.insertNewByName("Writers", 1) sh2 = ThisComponent.Sheets(1)

ראשית אנו יוצרים גיליון חדש עם שם סופרים, בעמדה 1, שהוא המיקום השני, מכיוון שהאינדקס מתחיל ב-0. אז נקבל אובייקט של הגיליון החדש שנוצר, כדי שנוכל להזין את הנתונים של הכותבים בגיליון זה.

i = 0 Do While not IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 לולאה

ה עושה תוך כדי הצהרת לולאה משמשת כאשר אנו רוצים לבצע לולאה על סמך תנאים, בניגוד ללולאה בטווח של ערכים שלמים, שעבורם משתמשים ל כפי שהוצג קודם לכן. הנה, אנחנו בלולאה עד crs(i) אינו בטל.

לאחר מכן, אנו שוב מתקשרים getCellRangeByPosition באופן דומה לקודם כדי לקבל אובייקט טווח בגיליון החדש.

לבסוף, אנו קוראים לשתי פונקציות: getDataArray שמחזיר את הנתונים מ crs(i), כלומר, שורה אחת של נתונים (על סופר) מהגיליון הראשון; ואנחנו כותבים את הנתונים האלה לטווח התאים בגיליון חדש באמצעות setDataArray.

לבסוף, שמור את המאקרו מ קובץ » שמור הכל אוֹפְּצִיָה.

כדי להפעיל את המאקרו, עבור אל כלים » מאקרו » הפעל מאקרו ובחר את המאקרו שלך מהספרייה "המאקרו שלי" בספריית בורר המאקרו. לחץ על לָרוּץ לאחר בחירת שם מאקרו.

הפעלת המאקרו שלעיל בגיליון האלקטרוני לדוגמה שלנו מניבה את התוצאה הבאה.

זו הדרך ליצור פקודות מאקרו ב-LibreOffice. למידע נוסף ואפשרויות, עיין בתיעוד הרשמי.

? לחיים!