עבודה עם אקסל ורובי

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

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

  1. אי אפשר לעבוד עם קבצי xlsx אלא רק עם פורמט xls !
  2. יש תמיכה ממש בסיסית בנוסחאות
  3. גם העיצוב שאפשר לעשות הוא מאוד בסיסי

מיקרוסופט פשוט יוצרת לעולם כאב ראש אטומי ומעולם לא היתה צריכה לשלם לנו המפתחים כסף על הכאב ראש הזה (אחרת כבר מזמן היתה פושטת את הרגל). ולך תסביר לאנשים שהבעיה היא שהם בחרו במיקרוסופט במקום בחלופה החופשית…

אז ישבתי והשקעתי הרבה זמן ומצאתי ספרייה ברובי שעושה את הדברים (בנוסף לספריות הפסקל שכבר דיברתי עליהם בעבר): spreadsheet.

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

require 'rubygems'
require 'spreadsheet'

book = Spreadsheet.open('/tmp/test.xls', 'rb')
sheet = book.worksheet(0)
sheet.each do |row|
  next unless row
  row.each do |cell|
    puts cell.to_s if cell
  end
end

כתיבה לקובץ אקסל:

require 'rubygems'
require 'spreadsheet'

data = {0 => 'z' 1 => 'o', '2' => 't', 3 => 'tt', 4 => 'f'}

book = Spreadsheet::Workbook.new
sheet = book.create_worksheet
sheet.row(0).push 'One'
sheet.row(0).push 'two'

(1..10).each do |r|
  sheet.row(r).push data[rand(5)]
  sheet.row(r).push data[rand(5)]
end
book.write '/tmp/test2.xls'

כתיבת תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s