אקסל (excel) יכול לשמש הרבה פעמים כמקור לנתונים ולכן אנחנו עלולים להידרש להמיר קובץ אקסל למערך על מנת להשתמש בו לאתר שלנו.
מיד נראה איך עושים את זה (ובקלילות)
תחילה נעשה קריאת HTTP לשרת כדי לקבל את הקובץ (אם הקובץ מקומי אז כמובן שאפשר לדלג על השלב הזה)
loto.xhttpGetCsv = function() { var xhttp = new XMLHttpRequest(); var data; xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { data = this.responseText; loto.init(data); } } xhttp.open("GET", 'Lotto.csv', true); xhttp.send(); } loto.xhttpGetCsv();
קצת הסברים:
האוביקט הגלובלי שלנו הוא loto, במקרה הזה אני עושה קריאה לקובץ מקומי בפרויקט בשם lotto.csv,
ברגע שהתוכן מגיע, מפעילים פונקציה בשם init ושולחים לה את כל המידע שהגיע.
עכשיו נראה איך לקחת את כל המידע ולהפוך אותו למערך של מערכים, זאת אומרת שכל תא במערך מכיל מערך בעצמו ,
משהו שנראה כך : [ [ ], [ ], [ ], [ ], [ ] ]. בסופו של דבר נעבור על כל מערך ונחזיר אוביקט שמכיל:
מספר הגרלה, תאריך הגרלה, מערך של כל המספרים ללא המספר הנוסף וכמובן בסוף את המספר הנוסף.
loto.init = function(data) { // -------------- convert text to object array ------ var text2arr = data.trim().split('\n'); text2arr = text2arr.map(item => { return item.split(','); // [1234,16/4/2015,1,2,3,4,5,6,7] }).map(item => { return { lotoNum: item[0], date: item[1], numbers: item.slice(2, 8), extra: item[8], } }); }
זהו, התוצאה שלנו היא מערך של אוביקטים שפשוט לעבוד איתו.
לכיוון ההפוך: ממערך לקובץ אקסל
var data = [ ["Col1", "Col2", "Col3", "Col4"], ["Data", 50, 100, 150], ["Data", -50, -20, '100%'], ]; loto.exportToCsv = function() { var CsvString = ""; data.map(item => { item.map(subItem => { CsvString += subItem + ','; }); CsvString += "\n"; }); CsvString = "data:application/csv," + encodeURIComponent(CsvString); var anchor = document.createElement("A"); anchor.setAttribute("href", CsvString); anchor.setAttribute("download", "somedata.csv"); document.body.append(anchor); anchor.click(); }
בקצרה, יצרנו את data שמחזיק את הנתונים שלנו. במקרה הזה מדובר במערך של מערכים אבל אפשר גם מערך של אוביקטים.
אחרי זה הוספנו פונקציה שמשרשרת את המידע ל-string אחד ארוך כאשר ההפרדות בין תאים זה פסיק ובין שורות זה "\n"
אחרי זה יצרנו תגית לינק והגדרנו אותו כלינק הורדה ולחצנו עליו (אבטחה של דפדפן לא ממש אוהבת את זה שסקריפט מבצע לחיצה על אלמנטים במקום משתמש ולכן תעלה אזהרה או שאלה לחסימה).
לא לשכוח להפעיל את הפונקציה exportToCsv על ידי לחצת כפתור כדי שמשהו יקרה😄
סיימנו גם את זה ואנחנו יודעים איך להפוך אקסל למערך ובכיוון ההפוך ממערך לקובץ אקסל.