@בער כתוב לי למטה - מתחת כל פוסט שאני כותב יש הערה עם הכתובת מייל
Y.Excel.Access
-
נוסחה בגוגל שיטס -
מענה במיילמענין לענין באותו ענין...
האם פורום תכנות הסגור הוא בתשלום? -
איך ליצור משתנה גלובלי ב Google sheets@dovid אמר באיך ליצור משתנה גלובלי ב Google sheets:
אולי אתה צריך את זה PropertiesService.
כן, זה נשמע בכיוון, תודה רבה.
אשמח לעוד קישור / חומר על זה למי שיש, עדיין לא ממש הבנתי איך לעבוד עם זה בפועל. -
איך ליצור משתנה גלובלי ב Google sheetsהקוד הסופי באקסל:
שדרוג אקסל - הוספת משתנים.xlsm
זה קובץ אקסל עם הקוד. (סופי עד השיפור הבא...)כמו שרואים כאן, הצבתי דוגמה שאני מחפש את המקסימום רק אם המינימום גדול מ 1.
אז לולא המשתנים הייתי אמור לחשב את המינימום פעמיים - אחד ל IF והשני למקרה שהוא באמת לא גדול מאחד, וכשהכלתי אותו בתוך משתנה חסכתי את זה.
כמובן זו רק דוגמה, כי החישובים יכולים להיות הרבה יותר מסובכים.
\אני מעתיק כאן את הקוד ישירות:
מודול קלאס בשם ArrayAsListOption Explicit Option Base 1 ' אמנם קבעתי כאן את אופציית ברירת המחדל של המערכים להתחיל ב 1, אך בפועל כשאתחלתי מחדש ' את המערכים המקומיים אתחלתי מ 0 כדי למנוע שגיאה בעת מחיקת הערך האחרון או מחיקת כל ערכי המערך ' אך באמת ההתייחסות המעשית למערך היא עדיין כמותחל ב 1 = לגבי הלולאות הרצות עליו ' כך יוצא שהערך 0 הוא ריק וחסר משמעות לקלאס זה Private MyArray() As Variant Private KeyMyArray() As String Private LengthMyArray As Integer Private Const LimitMaxCountValueInMyArray = 72 Public Sub Add(Value As Variant, Optional Key As String = "") Dim i As Integer For i = 1 To LengthMyArray If KeyMyArray(i) = Key Then MyArray(i) = Value: Exit Sub Next i If LengthMyArray < LimitMaxCountValueInMyArray Then ChangeLengthToMyArray 1 MyArray(LengthMyArray) = Value KeyMyArray(LengthMyArray) = Key End If End Sub Public Function Item(Optional Key As String = "") Dim i As Integer For i = 1 To LengthMyArray If KeyMyArray(i) = Key Then Item = MyArray(i): Exit Function Next i End Function Public Sub Remove(Optional Key As String = "") Dim i As Integer For i = 1 To LengthMyArray If KeyMyArray(i) = Key Then Dim j As Integer For j = LengthMyArray To i + 1 Step -1 MyArray(j - 1) = MyArray(j) KeyMyArray(j - 1) = KeyMyArray(j) Next j ChangeLengthToMyArray -1 Exit Sub End If Next i End Sub Public Sub RemoveAll() LengthMyArray = 0 ReDim MyArray(0 To LengthMyArray) ReDim KeyMyArray(0 To LengthMyArray) End Sub Public Property Get Length() As Variant Length = LengthMyArray End Property Private Sub ChangeLengthToMyArray(Optional StepForChange As Integer = 1) LengthMyArray = LengthMyArray + StepForChange ReDim Preserve MyArray(0 To LengthMyArray) ReDim Preserve KeyMyArray(0 To LengthMyArray) End Sub
והפונקציות עצמם במודול רגיל:
Option Explicit Option Base 1 Public Function SubInFunction(ParamArray ReturnOnlyLest() As Variant) Dim temp As Variant For Each temp In ReturnOnlyLest SubInFunction = temp Next temp = StaticVars("Remove all temp") End Function Public Function SetVar(ByRef Value As Variant, Optional ByRef VarName As String = "") As Variant ' לכתוב למשתנה סטטי = ליצור משתנה או לערוך אותו ' פעולה בלבד - נכתב כפונקציה רק כדי שיהיה אפשר להפעיל את זה דרך פונקציות אקסל SetVar = StaticVars("Set", VarName, Value) End Function Public Function GetVar(Optional ByRef VarName As String = "") As Variant ' לקרוא ממשתנה סטטי = להחזיר את הערך שלו GetVar = StaticVars("Get", VarName) End Function Public Function RemoveVar(Optional ByRef VarName As String = "") As Variant ' למחוק משתנה סטטי ' פעולה בלבד - נכתב כפונקציה רק כדי שיהיה אפשר להפעיל את זה דרך פונקציות אקסל If VarName <> "All" Then RemoveVar = StaticVars("Remove", VarName) Else RemoveVar = StaticVars("Remove all") End If End Function Public Function SetTempVar(ByRef Value As Variant, Optional ByRef VarName As String = "") As Variant ' לכתוב למשתנה סטטי = ליצור משתנה או לערוך אותו ' פעולה בלבד - נכתב כפונקציה רק כדי שיהיה אפשר להפעיל את זה דרך פונקציות אקסל SetTempVar = StaticVars("Set temp", VarName, Value) End Function Public Function GetTempVar(Optional ByRef VarName As String = "") As Variant ' לקרוא ממשתנה סטטי = להחזיר את הערך שלו GetTempVar = StaticVars("Get temp", VarName) End Function Public Function RemoveTempVar(Optional ByRef VarName As String = "") As Variant ' למחוק משתנה סטטי ' פעולה בלבד - נכתב כפונקציה רק כדי שיהיה אפשר להפעיל את זה דרך פונקציות אקסל If VarName <> "All" Then RemoveTempVar = StaticVars("Remove temp", VarName) Else RemoveTempVar = StaticVars("Remove all temp") End If End Function Private Function StaticVars(Optional ByRef ActType As String = "Get", Optional ByRef VarName As String = "", Optional ByRef Value_ForSetOrForRemove As Variant = "") As Variant ' האחסון וכל הפעולות על משתנים סטטיים ' פונקציה זו היא לפעמים משמשת כשגרה ללא החזרת ערך (רק כך אפשר לעבוד בשפה זו עם משתנים סטטיים) Static Vars As New ArrayAsList Static TempVars As New ArrayAsList Select Case (ActType) Case "Get" StaticVars = Vars.Item(VarName) Case "Set" Vars.Add Value_ForSetOrForRemove, VarName StaticVars = 0 Case "Remove" Vars.Remove VarName StaticVars = 0 Case "Remove all" Vars.RemoveAll StaticVars = 0 Case "Get temp" StaticVars = TempVars.Item(VarName) Case "Set temp" TempVars.Add Value_ForSetOrForRemove, VarName StaticVars = 0 Case "Remove temp" TempVars.Remove VarName StaticVars = 0 Case "Remove all temp" TempVars.RemoveAll StaticVars = 0 End Select End Function
(בכוונה אני עובר על המערך של PARAM ARRAY ולא מנסה להשיג את האורך שלו עם UBOUND ו LBOUND כי יש גרסאות באקסל שאין להם את הפונקציות האלו
גם - משום מה לא עובד על המערך בקלאס = NULL או = NOTHING אז ניסיתי להסתדר...
הפרמטרים של הפונקציות כולם BYREF בשביל המהירות בלבד. - אין טעם ליצור עוד משתנה (ואני יודע בשNET הקמפול מחשב את זה לבד... אבל בVBA כמדומני שלא.)) -
איך ליצור משתנה גלובלי ב Google sheetsאני מנסה ליצור משתנה גלובלי בפונקציה מותאמת אישית (UDF) בשיטס.
האפשרויות שמצאתי הם להשתמש ב CacheService כמו כאן:function GetOfVarGlobal(Key = "_") { var ValueGlobal = CacheService.getScriptCache(); return ValueGlobal.get(Key); }
אבל זה רק STRING ואני צריך שיאחסן גם מערכים.
מה הצורך בדיוק?
בקידוד בSHEETS ואקסל יש הרבה פעמים צורך להקצות עמודות לערכי ביניים. אני מנסה להכניס אופציה של יצירת משתנים וכך להפוך את הגליון האלקטרוני ליותר דומה לשפת תכנות.
מה זה מועיל?- סדר, בעיקר. גם אפשרות לכתוב הערות.
- אופטימיזציה של מקום אחסון. לדוגמה בשיטס אפשר רק עד 2 מליון תאים, שזה עלול להגמר בחישובים מסובכים.
אשמח לדעת
- האם זה יעיל?
- והאם זה אפשרי.
תודה רבה.
מצרף כאן קוד שלי באקסל (באמצע פיתוח - עדיין לא עובד, אבל אפשר להבין את הכיוון. גם אני רוצה להחליף את הCollection במערכים עם ReDim).
אשמח להערות.Option Explicit Public Function SubInFunction(ParamArray ReturnOnlyLest() As Variant) Dim temp As Variant For Each temp In ReturnOnlyLest SubInFunction = temp Next temp = StaticVars("Remove all temp") End Function Public Function SetVar(Value As Variant, Optional Name As String = "") As Variant ' לכתוב למשתנה סטטי = ליצור משתנה או לערוך אותו ' פעולה בלבד - נכתב כפונקציה רק כדי שיהיה אפשר להפעיל את זה דרך פונקציות אקסל SetVar = StaticVars("Set", Name, Value) End Function Public Function GetVar(Optional Name As String = "") As Variant ' לקרוא ממשתנה סטטי = להחזיר את הערך שלו GetVar = StaticVars("Get", Name) End Function Public Function RemoveVar(Optional Name As String = "") As Variant ' למחוק משתנה סטטי ' פעולה בלבד - נכתב כפונקציה רק כדי שיהיה אפשר להפעיל את זה דרך פונקציות אקסל If Name <> "All" Then RemoveVar = StaticVars("Remove", Name) Else RemoveVar = StaticVars("Remove all") End If End Function Public Function SetTempVar(Value As Variant, Optional Name As String = "") As Variant ' לכתוב למשתנה סטטי = ליצור משתנה או לערוך אותו ' פעולה בלבד - נכתב כפונקציה רק כדי שיהיה אפשר להפעיל את זה דרך פונקציות אקסל SetTempVar = StaticVars("Set temp", Name, Value) End Function Public Function GetTempVar(Optional Name As String = "") As Variant ' לקרוא ממשתנה סטטי = להחזיר את הערך שלו GetTempVar = StaticVars("Get temp", Name) End Function Public Function RemoveTempVar(Optional Name As String = "") As Variant ' למחוק משתנה סטטי ' פעולה בלבד - נכתב כפונקציה רק כדי שיהיה אפשר להפעיל את זה דרך פונקציות אקסל If Name <> "All" Then RemoveTempVar = StaticVars("Remove temp", Name) Else RemoveTempVar = StaticVars("Remove all temp") End If End Function Private Function StaticVars(Optional ActType As String = "Get", Optional VarName As String = "", Optional Value_ForSetOrForRemove As Variant = "") As Variant ' האחסון וכל הפעולות על משתנים סטטיים ' פונקציה זו היא לפעמים משמשת כשגרה ללא החזרת ערך (רק כך אפשר לעבוד בשפה זו עם משתנים סטטיים) Static Vars As New Collection Static VarsName As New Collection Static TempVars As New Collection Static TempVarsName As New Collection Select Case (ActType) Case "Get" StaticVars = GetValueInCollectionOfName(VarName, Vars, VarsName) Case "Set" SetValueInCollectionOfName Value_ForSetOrForRemove, VarName, Vars, VarsName StaticVars = 0 Case "Get temp" StaticVars = GetValueInCollectionOfName(VarName, TempVars, TempVarsName) Case "Set temp" SetValueInCollectionOfName Value_ForSetOrForRemove, VarName, TempVars, TempVarsName StaticVars = 0 Case "Remove" RemoveValueInCollectionOfName VarName, Vars, VarsName StaticVars = 0 Case "Remove temp" RemoveValueInCollectionOfName VarName, TempVars, TempVarsName StaticVars = 0 Case "Remove all" RemoveAllValueInCollection Vars RemoveAllValueInCollection VarsName StaticVars = 0 Case "Remove all temp" RemoveAllValueInCollection TempVars RemoveAllValueInCollection TempVarsName StaticVars = 0 End Select End Function Private Function GetValueInCollectionOfName(NameValue As String, CollectionValues As Collection, CollectionNames As Collection) As Variant Dim i As Integer For i = 1 To CollectionNames.Count If CollectionNames(i) = NameValue Then GetValueInCollectionOfName = CollectionValues.Item(i): Exit Function Next i GetValueInCollectionOfName = 0 End Function Private Sub SetValueInCollectionOfName(Value As Variant, NameValue As String, CollectionValues As Collection, CollectionNames As Collection) Dim i As Integer For i = 1 To CollectionNames.Count If CollectionNames(i) = NameValue Then collection_ApdateValue CollectionValues, i, Value: Exit Sub Next i CollectionValues.Add Value CollectionNames.Add NameValue End Sub Private Sub RemoveValueInCollectionOfName(NameValue As String, CollectionValues As Collection, CollectionNames As Collection) Dim i As Integer For i = 1 To CollectionNames.Count If CollectionNames(i) = NameValue Then CollectionValues.Remove i: CollectionNames.Remove i: Exit Sub Next i End Sub Private Sub RemoveAllValueInCollection(MyCollection As Collection) Dim i As Integer For i = 1 To MyCollection.Count MyCollection.Remove i Next i End Sub Private Sub collection_ApdateValue(MyCollection As Collection, Index As Integer, NewValue As Variant) If MyCollection.Count = Index Then MyCollection.Add NewValue MyCollection.Remove Index Else MyCollection.Add NewValue, before:=Index + 1 MyCollection.Remove Index End If End Sub
-
לאחר מפגש עם דודי (מתכנת בתעשייה האווירית) - פוסט פילוסופי: נבואה על עתידו של עולם התוכנה והמחשבים@ארכיטקט אמר בלאחר מפגש עם דודי (מתכנת בתעשייה האווירית) - פוסט פילוסופי: נבואה על עתידו של עולם התוכנה והמחשבים:
אז הבעיה הזו קיימת בכל העולם, בכל התעשיות, בכל הצבאות, שאף אחד לא יבלבל לי במוח. למטוס F35 יש 25 מיליון שורות קוד, יש מכשירים אזרחיים שיש בהם מעל 100 מיליון שורות קוד, אין שום סיכוי שהדבר הזה בר תחזוקה ובר ידיעה של בן תמותה. הבאגים נוצרים במימשקים, ואז מישהו צריך לדבר עם מישהו שצריך לדבר עם עוד מישהו, חלאס עם ההזיות שזה יעבוד. בינתיים כפי טבעו של העכברוש הוא מנצל את הכסף שמוזרם לתעשיות הללו, לוקחים משכורת ורווחים הביתה, ומשאירים את שברי הכלים לדורות הבאים, מתוך הנחה שהכסף הרב שנצבר יוכל "לפתור כל בעיה" הוא לא! כשאין אנשים שיתחזקו את התוכנות, כסף לא יוכל לייצר אותם נקודה.
באמת בתחום החומרה צורת בדיקת הבאגים היא על ידי משוואות מתמטיות, כך שכמות הבאגים קטנה מאוד. הסיבה שבתחום התכנות זה לא כך, כי החומרה יקרה, אבל התוכנית לא.
במידה והמפלצת המדוברת תשתחרר, המקסימום שיקרה שליישומים שאין בהם סובלנות לבאגים כמו התעשייה האווירית הנ''ל יצטרכו 'להמציא את הגלגל מחדש' ולבנות הכל כמו בחומרה - עם משוואות מתמטיות לכל תוכנית.באמת SAP היא ממשק לארגונים הכי גדולים, והם מה זה מרובעים... (ניהול תפקידי צוות מאוד קשוח ומסודר), וגם APAP (השפת SERVER של SAP) מאוד פשוטה ובטוחה. אבל כמובן גם הם עדיין לא עברו לבדיקות כאלה יסודיות לפי הידוע לי.
-
מהירות העבודה של גוגל סקריפט@צדיק-תמים אמר במהירות העבודה של גוגל סקריפט:
@OdedDvir
0.9 - 1.5 שניות זה בלי שום גליון... בדיקה פשוטה של תנאי לוגי, והחזרת תשובה. תסתכל בקטע קוד שהבאתי.כל פעולה של APP SCRIPT המתקשרת עם SHEETS לוקחת כזה זמן, לא משנה כמה היא פשוטה. ואפילו מאקרו פשוט של 'כתוב ב A1 "אא" ' יקח לו כזה זמן.
-מה שאומר - לא יודע אם יש לזה פתרון אפשרי.
-
מהירות העבודה של גוגל סקריפט@צדיק-תמים אמר במהירות העבודה של גוגל סקריפט:
למעשה זה החלקים היחידים שמתקשרים עם השיטס:
const sheet = SpreadsheetApp.openByUrl(sheetUrl).getSheetByName(sheetName); const table = sheet.getDataRange().getValues();
בהתחלה, כאשר לא מדובר בגליון גדול
ואז לוגיקה די פשוטה של JS, ובסוףfor (const [i, call] of row.entries()) { if (call !== 'original-value') { sheet.getRange(rowIndex + 2, i + 1, 1, 1).setValue([call]); } }
או:
sheet.deleteRow(rowIndex + 2);
לכאורה העניין הוא בשימוש ב for עם setValue ולא ב setValues אחד. כי הדבר הכבד כאן הוא הקריאה שוב ושוב לקובץ מקובץ הקוד החיצוני.
הרחבה - (איך להזין מערך ל SHEETS בקריאה אחת) - https://stackoverflow.com/questions/11495588/write-an-array-of-values-to-a-range-of-cells-in-a-spreadsheet -
לאחר מפגש עם דודי (מתכנת בתעשייה האווירית) - פוסט פילוסופי: נבואה על עתידו של עולם התוכנה והמחשביםלגבי הטעויות - היקף הידע:
לא מסכים...
לפי זה היה צריך להיות שפייתון לא תהיה קיימת ולא פופולרית, כי היא שפה מפורשת, ומרווח הטעויות שם הרבה יותר גדול מהשפות ה'ישנות'.
ודאי זה לא עכשוי - עם כל הוויכוח הגדול בין OOP לשפות פונקציונליות (הנחשבות יותר בטוחות), עדיין לא נראית דעיכה ב OOP... וכולנו כותבים JS למרות שהיא מזעזעת מבחינת טעויות.אני מאמין שיצטרכו לעשות שפות יותר מאורגנות - RUST, V, GO, ELIXIR ועוד הם שפות חדשות שנכתבו גם על מנת לצמצם באגים.
בדבר אחד יש ממש התקדמות - הטכנולוגיה שמגלה או מתקנת טעויות -
- הקומפיילרים ובודקי הטעויות שבסביבות העבודה (מי שמכיר את VISUAL STUDIO בגרסאות יותר ישנות מרגיש הבדל מהותי...),
- האופטימליות בקמפול הקוד - כך שגם אם נכתב קוד זבל הוא קצת מתוקן... מייקוסופט הודיעו שהם 'עדיין לא' הצליחו לשפר את האלגוריתמים של המשתמשים ב NET.
- וכמובן - הקוד הרב הקיים דווקא מפשט את התהליך. וכנראה ככל שיהיו יותר פרוייקטים עם באגים מהותיים ותחומים שלא סובלניים לבאגים נראה גם צמיחה של קוד בטוח יותר. וכשקוד נוסה כבר קל יותר לתכנת איתו - נדרשים באמת פחות שורות קוד. (כמו שאם תנסה ליצור פורמס חדשים יהיה לך יותר באגים מאשר להשתמש ב C# WINFORM
לגבי טבע האדם והדופמין:
הלוואי שאתה צודק, אבל נראה לי שהכיוון דווקא הפוך.
ואם כן יהיה כדבריך, לא נראה דעיכה בעולם התוכנה אלא צורה אחרת של תוכנות - יותר עוזרות פיזית / מידע חיוני, ופחות בילויים (אינטרנט חסום לכולם... :))ונקווה שהמשיח כבר יבוא ויתקן את העולם לשימוש נכון בכל הטכנולוגיה הזו...
-
שגיאה בפונקציית פילטר בגוגל שיטס@שמחה-זו-הסיסמא אמר בשגיאה בפונקציית פילטר בגוגל שיטס:
@OdedDvir
אני מקווה שהבנתיישנם פונקציות היכולות להחזיר טווח ולשמש כפונקציות מערך (בתוך ARRAYFORMULA), וישנן פונקציות שלא.
דוגמא לפונקציות שלא:- TEXTJOIN
- AND
- OR
פונקציות אלו תמיד יחזירו ערך בודד, כך שאי אפשר להשתמש בהם כלל בתוך פונקציית מערך כי הם יכשילו את המערך ויחייבו אותו להחזיר ערך יחיד.
נ.ב. אני מאמין שאפשר ליצור אותם כמחזירי טווח בפונקציות UDF או למצוא קוד קיים... אבל לצערי אני עדיין לא מכיר.
-
רעיון לעריכת טבלא בגוגל שיטס@Y-Excel-Access אמר ברעיון לעריכת טבלא בגוגל שיטס:
@שואף אמר ברעיון לעריכת טבלא בגוגל שיטס:
מחפש רעיון, בלי יותר מידי פיתוח, שיהיה איכשהו אפשר לבחור שורה וזה יפתח טופס עם השמות של השדות, ויהיה אפשר לערוך את הנתונים, ואז ללחוץ אישור וזה יסגור את הטופס ויעדכן את השורה.
מכירים כזה דבר?
תודהכן, GOOGLE FORMS.
ולהכין אותו מראש בתשובה אוטמטית לפי השורה הקיימת, כמו שמפורט כאן https://tchumim.com/topic/13268/איך-למלא-forms-מראש-על-ידי-נוסחה-באקסל-נוסח-קישור/3אני מבין שהצורך יהיה גם לעדכן לפעמים דרך הSHEETS וגם דרך הטופס, אז ההסבר לקמיה הוא לפי זה.
אפשרות שניה - הקלדה ישירה דרך GOOGLE SCRIPT:
-
לכתוב מספר שורה (=ARRAYFORMULA(ROW(A:A))) ללא הדבקה כערכים.
-
להוסיף את העמודה של הקישור הממולא מראש כנ"ל במיקום נוח בטבלה.
-
ליצור טריגר שבהגשת טופס תפעל פונקצית GOOGLE SCRIPT. - לפונקציה זו לכתוב פרמטר (נקרא לו Event) שילכוד את הטופס החדש.
-
והפונקציה תכתוב את כל נתוני הטופס בטבלה לפי המספר שורה המופיע בטופס. (צריך קודם לבחור בגליון הנכון, ואז להגדיר עמודה עמודה לפי כותרת)
-
חשוב מאוד באפשרות זו לעשות הרבה IF ו TRY לבדוק שאין באג - שלא נוספה או הוחלפה עמודה בטעות וכו'
איזו אפשרות עדיפה?
לי נוח יותר האפשרות הראשונה, למרות שהיא מצריכה לבנות עוד טבלה וצריך להגן על העמודה של המזהה, מ"מ יש תיעוד קל ונוח של כל הטפסים והעריכות, ויש הבדלה ברורה למשתמש (גם המתכנת הוא משתמש :)) בין מקום ששייך בו עריכה למקום שלא, כי זה בטבלה נפרדת. -
-
רעיון לעריכת טבלא בגוגל שיטס@שואף אמר ברעיון לעריכת טבלא בגוגל שיטס:
מחפש רעיון, בלי יותר מידי פיתוח, שיהיה איכשהו אפשר לבחור שורה וזה יפתח טופס עם השמות של השדות, ויהיה אפשר לערוך את הנתונים, ואז ללחוץ אישור וזה יסגור את הטופס ויעדכן את השורה.
מכירים כזה דבר?
תודהכן, GOOGLE FORMS.
ולהכין אותו מראש בתשובה אוטמטית לפי השורה הקיימת, כמו שמפורט כאן https://tchumim.com/topic/13268/איך-למלא-forms-מראש-על-ידי-נוסחה-באקסל-נוסח-קישור/3אני מבין שהצורך יהיה גם לעדכן לפעמים דרך הSHEETS וגם דרך הטופס, אז ההסבר לקמיה הוא לפי זה.
איך בדיוק הנתונים יעודכנו על ידי מילוי הטופס?
ליצור מזהה - מספר שורה (=ARRAYFORMULA(ROW(A:A))), להעתיק ולהדביק כערכים (שלא ישתנה כל הזמן המזהה לפי מחיקת שורות). ולהגן על עמודה זו מפני עריכה עתידית.
לחלק ל 3 גליונות: גליון של הוספה ידנית (מה שעבדת איתו עד עכשיו, הכולל את העמודת המזהה החדשה), גליון של תגובות הטופס, וגליון שלישי = כל התצוגה שעובדים איתה. התצוגה עצמה תהיה רק פונקצייה אחת - פונקציית QUERY המאחדת בין הנתונים הכתובים ידנית לנתונים הכתובים דרך הטופס לפי המזהה - מספר שורה,איך לכתוב את פונקציית QUERY - החלק הראשון (הבסיס): הפניה לגליון נתונים ידניים UNION הפניה לגליון תגובות מהטופס ( UNION מתבצע על ידי { ; } ).
בחלק השני לכתוב את משפט הSQL שלה: WHERE מספר שורה <> "", GROUP BY לפי מספר שורה, וכל הנתונים LAST.
ו - כמובן ORDER BY לפי מספר שורה.הקישור לטופס:
בגליון תצוגה ליד כל הנתונים - במקום נוח (בהתחלה או בסוף העמודות) ליצור פונקציית מערך של HYPERLINK עם השרשור כמו שמפורט בקישור שהבאתי (כך שייוצרו קישורים לטופס ממולא מראש על פני כל הטבלה, כל שורה לפי הנתונים בשורה שלה),
כך שבלחיצה על הקישור בשורה שצריכה עריכה הטופס ייטען עם המזהה - המספר שורה ועם כל שאר הנתונים בשורה זו.מקווה שהייתי מספיק מובן...
במקרה שרוצים להשאיר אופציה...(מחקתי).
אם רוצים להוסיף שורה בין השורות, תמיד אפשר לכתוב במספר שורה + שבר.
לדוגמא בין 12 ל 13 לכתוב 12.1, 12.2 וכו', ופשוט.
-
מערכת טלפונית על בסיס תוכנת אנקי@א-ב-ו-ב אמר במערכת טלפונית על בסיס תוכנת אנקי:
@הפצת-אנקי @Y-Excel-Access @מנצפכ @צבי-10 @צבי-ש
למי שמבין בענין, ולכל מי שרוצה לזכות בזכויות בפיתוח זה
עלות פיתוח המערכת היא הון עתק ונשמח בהשתתפותם בעלויות
ניתן לתרום בנדרים פלוס וכן במענה אנושי
תרומה בנדרים פלוס:
בקישור זה
או בסריקת הקוד QR:
או בקוד 599 תחת השם "תרומה לפיתוח אנקי בטלפון"
במענה אנושי:
במס' 04-601-4444@א-ב-ו-ב אמר במערכת טלפונית על בסיס תוכנת אנקי:
@הפצת-אנקי @Y-Excel-Access @מנצפכ @צבי-10 @צבי-ש
למי שמבין בענין, ולכל מי שרוצה לזכות בזכויות בפיתוח זה
עלות פיתוח המערכת היא הון עתק ונשמח בהשתתפותם בעלויות
ניתן לתרום בנדרים פלוס וכן במענה אנושי
תרומה בנדרים פלוס:
בקישור זה
או בסריקת הקוד QR:
או בקוד 599 תחת השם "תרומה לפיתוח אנקי בטלפון"
במענה אנושי:
במס' 04-601-4444האם ניתן לתרום גם מוח? === האם ניתן לעזור בתכנות של זה?
אני מאמין שיש כאן הרבה שישמחו לקחת חלק בפתרון בעיות / אלגוריתמים / יצירת חלק מהקוד וכדומה...
-
נוסחה בגוגל שיטס -
נוסחה בגוגל שיטס@בער כן Col זה עמודה - מהטבלה החדשה עם שלוש העמודות שנוצרה בסוגריים המסולסלות {}.
מה זה WHERE, מה זה GRUP BY?
זה משפט משפת SQL - שפת מסד נתונים מאוד שמישה.מה זה עשה? סינן מכל השורות את השורה בה Col1 הוא שונה מ "" (לא ריק), וקיבץ לפי הנתונים ב Col1.
איך זה עושה את זה? SQL זה נושא גדול, אבל כאן - https://ramkedem.com/פקודת-group-by/
מוסבר נקודתית על זה. -
מערכת טלפונית על בסיס תוכנת אנקי@הפצת-אנקי
לדעתי... יוכל להיות בזה שימוש מרובה.
זה הכי קל לחזור על הלימוד תוך כדי החיים, באוטובוסים, בתורות, ורק על ידי עניית שאלות הוא מוצא את עצמו זוכר את כל מה שהוא למד.גם בטלפון אפשר לתת אפשרות לתזכר על ידי צינתוק חינמי כל יום ובשעה שתבחר על ידי הלומד.
לעומת חזרה עם מחשב שהיא יותר מסובכת - לפתוח בעקביות כל יום. (ולא להסיח את הדעת לדברים אחרים במחשב...)
אילו דברים חשוב לי שיהיה במערכת:
- ממשק נוח וברור מאוד - חובה
- אפשרות בחירת נושאים - שיהיה אפשר לחזור על מה שנלמד בלבד...
- אפשרות הקלטת שאלות ותשובות פרטיים על הנושא המדובר שיישמרו לכל לומד ספציפית
- צורת ממשק חוזרת על עצמה - שכל מקש בטלפון ייבנה לפי סטנדרט קבוע לדוגמא - *1 להגדרות, # לחזרה אחורה. (אפשר לבנות את זה דומה לקול הלשון, כי כנראה הממשק שם הכי מוכר...)
- כמובן את האלגוריתם של אנקי - שכל שאלה אפשר לבחור את רמת הידיעה וכך תוגרל השאלה שוב, שהמרווח המירבי בידיעה מלאה הוא פי 2.5 מהמרווח הקודם.
ואם רוצים לשדרג את הקו:
- אפשר גם לתת אפשרות פרסום השאלה והתשובה הפרטיים של כל לקוח אחרי אישור של מנהל הקו
- אפשרות לקשר את הקו עם קול הלשון, כך אם הלומד רוצה לחזור על החומר הוא יוכל לעשות את זה בקלות (אם עובדים עם ימות המשיח יש בזה חסרון כי העברת שיחה עולה כסף...)
-
וורד - איך לקבוע שכל טקסט חדש בקובץ יהיה בצבע מסוים@shraga תודה רבה, אך אני מחפש פתרון שלא אצטרך לזכור כל פעם שאני כותב לכתוב סימונים או שינויים כלשהם.
זה חשוב מאוד - אם אני מסתמך על העירנות שלי בזמן הכתיבה יוכל להיווצר מצב חמור - שאשכח לכתוב פעם אחת וכבר לא אוכל לדעת מה הטקסט המקורי ומה הפירוש (תחשוב על עמוד גמרא עם פירוש, שחלק מהפירוש הופך להיות דברי האמורא...)אם כבר הייתי כבר מגדיר מאקרו שמשנה את הצבע שלי לפני כל פעם שאוסיף טקסט (לאיזה צבע מזעזע שבטוח לא בשימוש, כמו חום-חרדל וכדומה); ככה אוכל אח"כ להחליף את פורמט וגודל הטקסט איך שארצה ע"י חיפוש והחלפה לפי צבע.
אני צריך פתרון שאוכל לכתוב באופן חופשי, אך מוגדר בנפרד - כדי שיהיה ניכר וגם כדי שאוכל לבצע לשינוי עתידי בקלות.
-
google forms כיצד להגדיר שליחת התשובות למיילאמנם שאלה ישנה...
אבל אם עדיין הצורך קיים:אפשר לקשר את הטופס לשיטס, ובו ליצור קוד של גוגל סקריפט השולח מתוך המייל שלך מייל עם כל הנתונים שבטופס.
ראה כאן - https://spreadsheet.dev/email-notifications-for-google-forms -
פילטר לפי כותרת העמודה גוגל שיטס@OdedDvir אמר בפילטר לפי כותרת העמודה גוגל שיטס:
(לדעתי חבל ללכת ישר לאופציה של קוד כשנראה לכאורה שיש פתרון מוצלח יותר בפונקציה ישירה)
זה נכון כשמדובר בעמודה אחת.
במקרה לעיל שיש צורך בכמה עמודות, השימוש בפונקציית עזר בסקריפט נותן נוסחא נקייה ומובנת, לעומת נוסחא ארוכה ומתוסבכת, עם כמה קריאות ל-MATCH.נכון, אני גם מאוד נהנתי מהתשובה של @OdedDvir , אבל אני רוצה להביא גם את הצד השני...
- פונקציית UDF בגוגל שיטס איטית יותר, כך שבחישובים מסובכים זה מכביד.
- לפי מה שהבנתי א"א לשכפל קובץ כזה למקום אחר / ללקוח, כי צריך לשכפל את הסקריפט בנפרד.
כך שזה לא תמיד יותר נוח לעבוד עם גוגל סקריפט, ויש לשקול מה עדיף בכל מקרה ספציפי.
אם טעיתי/החסרתי במשהו, אשמח לדעת!