דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. עזרה בכתיבת SKRIPT לגוגל שיטס.

עזרה בכתיבת SKRIPT לגוגל שיטס.

מתוזמן נעוץ נעול הועבר תכנות
12 פוסטים 2 כותבים 401 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מ מנותק
    מ מנותק
    מאסטר באקסל
    כתב ב נערך לאחרונה על ידי מאסטר באקסל
    #1

    יש לי קוד שכבר כתוב, שמעביר נתונים מגיליון 1 לגיליון 2
    בגיליון 1 זה נמחק ובגליון 2 זה נשאר תמיד
    אבל פה יש בעיה, כל פעם שהוא כותב את הנתונים בגיליון 2,
    הוא הולך לאותו תא (A2),
    ואני רוצה שילך לתא הריק הראשון בעמודה A
    ככה נראה הקוד:

    function nisui2() {
      var spreadsheet = SpreadsheetApp.getActive(); 
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('גיליון 2'), true);
      spreadsheet.getRange('A2').activate();
      spreadsheet.getRange('\'גיליון 1\'!B7:L35').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('גיליון 1'), true);
      spreadsheet.getRange('D7:E35').activate();
      spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
      spreadsheet.getRange('D3:I3').activate();
      spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
      spreadsheet.getRange('D3').activate();
    };
    
    

    מה שרלוונטי לשאלה זה בין שורה 4 לחמש אני רוצה להכניס שורה כזו:

    OFFSET(ROWS('A:A')-COUNTBLANK('A:A')+1,0)
    

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

    הכל טוב ויפה, אבל כשאני מפעיל אותו אני מקבל הודעה ש ROWS אינו מוגדר,

    וכאן אני שואל:

    1. מה רע באיך שכתבתי?
    2. איך כותבים את זה נכון?

    מי שלא עושה, לא טועה,
    מי שלא טועה, לא לומד,
    מי שלא לומד... לא יודע!

    OdedDvirO תגובה 1 תגובה אחרונה
    0
    • OdedDvirO מנותק
      OdedDvirO מנותק
      OdedDvir
      השיב למאסטר באקסל ב נערך לאחרונה על ידי
      #2

      @מאסטר-באקסל אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.:

      מה רע באיך שכתבתי?

      הניחוש שלי היא שבגלל אופן הפעולה שתיארת למעלה, התאים בגליון 1 שנמחקו - לא נחשבים ריקים, (ניקוי ערך לא הופך תא לריק, הוא הופך אותו לתא שמכיל מחרוזת ריקה) ואז הפונקציה COUNTBLANK מחזירה 0, מה שגורם לכך ש:

      OFFSET(ROWS('A:A')-COUNTBLANK('A:A')+1,0) 
      ==
      OFFSET(ROWS('A:A')-0+1,0) // זליגת תחום שורות
      

      איך כותבים את זה נכון?

      אפשרות א:
      תשנה את הפונקציה clear כך שהתאים יימחקו לגמרי

      אפשרות ב: תשתמש בפונקציה אחרת לחישוב השורה הראשונה הריקה: יש פונקציה מאוד מהירה שכתבו ב StackOverflow שמחזירה את השורה הראשונה הריקה, או הראשונה עם מחרוזת ריקה

      function getFirstEmptyRowByColumnArray() {
        var spr = SpreadsheetApp.getActiveSpreadsheet();
        var column = spr.getRange('A:A');
        var values = column.getValues(); // get all data in one call
        var ct = 0;
        while ( values[ct] && values[ct][0] != "" ) {
          ct++;
        }
        return (ct+1);
      }
      

      עכשיו תכתוב:

      OFFSET(getFirstEmptyRowByColumnArray(),0)
      
      מ תגובה 1 תגובה אחרונה
      4
      • מ מנותק
        מ מנותק
        מאסטר באקסל
        השיב לOdedDvir ב נערך לאחרונה על ידי
        #3

        @OdedDvir אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.:

        @מאסטר-באקסל אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.:

        מה רע באיך שכתבתי?

        הניחוש שלי היא שבגלל אופן הפעולה שתיארת למעלה, התאים בגליון 1 שנמחקו - לא נחשבים ריקים, (ניקוי ערך לא הופך תא לריק, הוא הופך אותו לתא שמכיל מחרוזת ריקה) ואז הפונקציה COUNTBLANK מחזירה 0, מה שגורם לכך ש:

        OFFSET(ROWS('A:A')-COUNTBLANK('A:A')+1,0) 
        ==
        OFFSET(ROWS('A:A')-0+1,0) // זליגת תחום שורות
        

        איך כותבים את זה נכון?

        אפשרות א:
        תשנה את הפונקציה clear כך שהתאים יימחקו לגמרי

        דבר ראשון, תודה!!
        דבר שני לא זאת הסיבה כי אני רוצה תא ריק ראשון בגיליון 2 המחיקה היא בגיליון 1

        @OdedDvir אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.:

        אפשרות ב: תשתמש בפונקציה אחרת לחישוב השורה הראשונה הריקה: יש פונקציה מאוד מהירה שכתבו ב StackOverflow שמחזירה את השורה הראשונה הריקה, או הראשונה עם מחרוזת ריקה
        function getFirstEmptyRowByColumnArray() { var spr = SpreadsheetApp.getActiveSpreadsheet(); var column = spr.getRange('A:A'); var values = column.getValues(); // get all data in one call var ct = 0; while ( values[ct] && values[ct][0] != "" ) { ct++; } return (ct+1); }
        עכשיו תכתוב:
        OFFSET(getFirstEmptyRowByColumnArray(),0)

        לקחתי את הפונקציה הזאת והיא לא עשתה שום דבר
        גם אחרי ששמתי את ה- OFFSET
        למה?

        מי שלא עושה, לא טועה,
        מי שלא טועה, לא לומד,
        מי שלא לומד... לא יודע!

        OdedDvirO תגובה 1 תגובה אחרונה
        0
        • OdedDvirO מנותק
          OdedDvirO מנותק
          OdedDvir
          השיב למאסטר באקסל ב נערך לאחרונה על ידי
          #4

          @מאסטר-באקסל תוכל לרשום בדיוק את כל הקוד שעשית?

          תגובה 1 תגובה אחרונה
          1
          • מ מנותק
            מ מנותק
            מאסטר באקסל
            כתב ב נערך לאחרונה על ידי
            #5
            function nisui2() {
              var spreadsheet = SpreadsheetApp.getActive(); 
              spreadsheet.setActiveSheet(spreadsheet.getSheetByName('גיליון 2'), true);
              spreadsheet.getRange('A2').activate();
              spreadsheet.getCurrentCell().offset(rows('A:A')-countblank('A:A')+1,0), 0).activate();
              spreadsheet.getRange('\'גיליון 1\'!B7:L35').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
              spreadsheet.setActiveSheet(spreadsheet.getSheetByName('גיליון 1'), true);
              spreadsheet.getRange('D7:E35').activate();
              spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
              spreadsheet.getRange('D3:I3').activate();
              spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
              spreadsheet.getRange('D3').activate();
            };
            

            מי שלא עושה, לא טועה,
            מי שלא טועה, לא לומד,
            מי שלא לומד... לא יודע!

            OdedDvirO תגובה 1 תגובה אחרונה
            0
            • OdedDvirO מנותק
              OdedDvirO מנותק
              OdedDvir
              השיב למאסטר באקסל ב נערך לאחרונה על ידי OdedDvir
              #6

              @מאסטר-באקסל אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.:

               spreadsheet.getCurrentCell().offset(rows('A:A')-countblank('A:A')+1,0), 0).activate();
              

              תנסה במקום

              spreadsheet.setActiveCell(spreadsheet.getDataRange().offset(spreadsheet.getLastRow()-1, 0, 1,  1));
              
              תגובה 1 תגובה אחרונה
              1
              • מ מנותק
                מ מנותק
                מאסטר באקסל
                כתב ב נערך לאחרונה על ידי
                #7

                @OdedDvir אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.:

                spreadsheet.setActiveCell(spreadsheet.getDataRange().offset(spreadsheet.getLastRow()-1, 0, 1, 1));

                מדהים!!
                עובד יפי!!
                תודה!!

                מי שלא עושה, לא טועה,
                מי שלא טועה, לא לומד,
                מי שלא לומד... לא יודע!

                תגובה 1 תגובה אחרונה
                1
                • מ מנותק
                  מ מנותק
                  מאסטר באקסל
                  כתב ב נערך לאחרונה על ידי
                  #8

                  סליחה על הבורות,
                  אבל אפשר הסבר על השוני בנוסחאות,
                  ועל צורת הפעולה שלו?
                  (של ה- OFFSET)
                  בכדי שאני ידע להיזהר משגיאות בהפעלה שלו,
                  תודה

                  מי שלא עושה, לא טועה,
                  מי שלא טועה, לא לומד,
                  מי שלא לומד... לא יודע!

                  OdedDvirO תגובה 1 תגובה אחרונה
                  0
                  • OdedDvirO מנותק
                    OdedDvirO מנותק
                    OdedDvir
                    השיב למאסטר באקסל ב נערך לאחרונה על ידי OdedDvir
                    #9

                    @מאסטר-באקסל אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.:

                    אבל אפשר הסבר על השוני בנוסחאות,
                    ועל צורת הפעולה שלו?
                    (של ה- OFFSET)

                    שני הפרמטרים האחרונים הם אופציונאליים, ומציינים את טווח היעד הנבחר (כמה שורות וכמה עמודות)
                    אם משמיטים אותם, הפונקציה תחזיר טווח הזהה לטווח הפעיל.
                    למשל:
                    אם הטווח הפעיל הוא לא תא אחד, אלא קבוצת תאים, למשל A1:B2 (=4 תאים) הפונקציה מחזירה טווח של 4 תאים:

                    offset(1,1) // == B2:C3
                    

                    אלא אם כן תציין בפירוש שברצונך לקבל רק תא אחד

                    offset(1,1,1,1) // == B2
                    

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

                    תגובה 1 תגובה אחרונה
                    1
                    • מ מנותק
                      מ מנותק
                      מאסטר באקסל
                      כתב ב נערך לאחרונה על ידי
                      #10

                      תודה
                      אבל התכוונתי לדעת על הפרמטר הראשון של ירידת שורות,
                      איך הוא מוצא את התא הראשון הריק?

                      מי שלא עושה, לא טועה,
                      מי שלא טועה, לא לומד,
                      מי שלא לומד... לא יודע!

                      OdedDvirO תגובה 1 תגובה אחרונה
                      0
                      • OdedDvirO מנותק
                        OdedDvirO מנותק
                        OdedDvir
                        השיב למאסטר באקסל ב נערך לאחרונה על ידי OdedDvir
                        #11

                        @מאסטר-באקסל
                        מסתבר שיש פונקציה מובנית ()getLastRow שמחזירה את מספר השורה האחרונה הריקה. הפחתתי 1 כי אתה משתמש בהיסט (offset) וצריך לזוז שורה פחות

                        תגובה 1 תגובה אחרונה
                        1
                        • OdedDvirO מנותק
                          OdedDvirO מנותק
                          OdedDvir
                          כתב ב נערך לאחרונה על ידי
                          #12

                          אחרי קצת התבוננות, ראיתי שבכלל אין צורך בשימוש בOFFSET, ואפשר לקפוץ ישר לתא הרצוי:

                          spreadsheet.setActiveRange(spreadsheet.getRange(spreadsheet.getLastRow()+1, 1, 1, 1));
                          
                          תגובה 1 תגובה אחרונה
                          0
                          • dovidD dovid העביר נושא זה מ-תכנות ב-

                          בא תתחבר לדף היומי!
                          • התחברות

                          • אין לך חשבון עדיין? הרשמה

                          • התחברו או הירשמו כדי לחפש.
                          • פוסט ראשון
                            פוסט אחרון
                          0
                          • דף הבית
                          • קטגוריות
                          • פוסטים אחרונים
                          • משתמשים
                          • חיפוש
                          • חוקי הפורום