Module: FastExcel
- Defined in:
- lib/fast_excel.rb,
ext/fast_excel/text_width_ext.c
Overview
not used for now require_relative '../ext/fast_excel/text_width_ext'
Defined Under Namespace
Modules: AttributeHelper, FormatExt, WorkbookExt, WorksheetExt Classes: Formula, URL
Constant Summary collapse
- DEF_COL_WIDTH =
8.43
- XLSX_DATE_DAY =
seconds in 1 day
86400.0
- XLSX_DATE_EPOCH_DIFF =
days between 1970-jan-01 and 1900-jan-01
25569
- ERROR_ENUM =
Libxlsxwriter.enum_type(:error)
- COLOR_ENUM =
Libxlsxwriter.enum_type(:defined_colors)
- EXTRA_COLORS =
{ alice_blue: 0xF0F8FF, antique_white: 0xFAEBD7, aqua: 0x00FFFF, aquamarine: 0x7FFFD4, azure: 0xF0FFFF, beige: 0xF5F5DC, bisque: 0xFFE4C4, black: 0x000000, blanched_almond: 0xFFEBCD, blue: 0x0000FF, blue_violet: 0x8A2BE2, brown: 0xA52A2A, burly_wood: 0xDEB887, cadet_blue: 0x5F9EA0, chartreuse: 0x7FFF00, chocolate: 0xD2691E, coral: 0xFF7F50, cornflower_blue: 0x6495ED, cornsilk: 0xFFF8DC, crimson: 0xDC143C, cyan: 0x00FFFF, dark_blue: 0x00008B, dark_cyan: 0x008B8B, dark_golden_rod: 0xB8860B, dark_gray: 0xA9A9A9, dark_grey: 0xA9A9A9, dark_green: 0x006400, dark_khaki: 0xBDB76B, dark_magenta: 0x8B008B, dark_olive_green: 0x556B2F, dark_orange: 0xFF8C00, dark_orchid: 0x9932CC, dark_red: 0x8B0000, dark_salmon: 0xE9967A, dark_sea_green: 0x8FBC8F, dark_slate_blue: 0x483D8B, dark_slate_gray: 0x2F4F4F, dark_slate_grey: 0x2F4F4F, dark_turquoise: 0x00CED1, dark_violet: 0x9400D3, deep_pink: 0xFF1493, deep_sky_blue: 0x00BFFF, dim_gray: 0x696969, dim_grey: 0x696969, dodger_blue: 0x1E90FF, fire_brick: 0xB22222, floral_white: 0xFFFAF0, forest_green: 0x228B22, fuchsia: 0xFF00FF, gainsboro: 0xDCDCDC, ghost_white: 0xF8F8FF, gold: 0xFFD700, golden_rod: 0xDAA520, gray: 0x808080, grey: 0x808080, green: 0x008000, green_yellow: 0xADFF2F, honey_dew: 0xF0FFF0, hot_pink: 0xFF69B4, indian_red: 0xCD5C5C, indigo: 0x4B0082, ivory: 0xFFFFF0, khaki: 0xF0E68C, lavender: 0xE6E6FA, lavender_blush: 0xFFF0F5, lawn_green: 0x7CFC00, lemon_chiffon: 0xFFFACD, light_blue: 0xADD8E6, light_coral: 0xF08080, light_cyan: 0xE0FFFF, light_golden_rod_yellow: 0xFAFAD2, light_gray: 0xD3D3D3, light_grey: 0xD3D3D3, light_green: 0x90EE90, light_pink: 0xFFB6C1, light_salmon: 0xFFA07A, light_sea_green: 0x20B2AA, light_sky_blue: 0x87CEFA, light_slate_gray: 0x778899, light_slate_grey: 0x778899, light_steel_blue: 0xB0C4DE, light_yellow: 0xFFFFE0, lime: 0x00FF00, lime_green: 0x32CD32, linen: 0xFAF0E6, magenta: 0xFF00FF, maroon: 0x800000, medium_aqua_marine: 0x66CDAA, medium_blue: 0x0000CD, medium_orchid: 0xBA55D3, medium_purple: 0x9370DB, medium_sea_green: 0x3CB371, medium_slate_blue: 0x7B68EE, medium_spring_green: 0x00FA9A, medium_turquoise: 0x48D1CC, medium_violet_red: 0xC71585, midnight_blue: 0x191970, mint_cream: 0xF5FFFA, misty_rose: 0xFFE4E1, moccasin: 0xFFE4B5, navajo_white: 0xFFDEAD, navy: 0x000080, old_lace: 0xFDF5E6, olive: 0x808000, olive_drab: 0x6B8E23, orange: 0xFFA500, orange_red: 0xFF4500, orchid: 0xDA70D6, pale_golden_rod: 0xEEE8AA, pale_green: 0x98FB98, pale_turquoise: 0xAFEEEE, pale_violet_red: 0xDB7093, papaya_whip: 0xFFEFD5, peach_puff: 0xFFDAB9, peru: 0xCD853F, pink: 0xFFC0CB, plum: 0xDDA0DD, powder_blue: 0xB0E0E6, purple: 0x800080, rebecca_purple: 0x663399, red: 0xFF0000, rosy_brown: 0xBC8F8F, royal_blue: 0x4169E1, saddle_brown: 0x8B4513, salmon: 0xFA8072, sandy_brown: 0xF4A460, sea_green: 0x2E8B57, sea_shell: 0xFFF5EE, sienna: 0xA0522D, silver: 0xC0C0C0, sky_blue: 0x87CEEB, slate_blue: 0x6A5ACD, slate_gray: 0x708090, slate_grey: 0x708090, snow: 0xFFFAFA, spring_green: 0x00FF7F, steel_blue: 0x4682B4, tan: 0xD2B48C, teal: 0x008080, thistle: 0xD8BFD8, tomato: 0xFF6347, turquoise: 0x40E0D0, violet: 0xEE82EE, wheat: 0xF5DEB3, white: 0xFFFFFF, white_smoke: 0xF5F5F5, yellow: 0xFFFF00, yellow_green: 0x9ACD32 }.freeze
Class Method Summary collapse
- .arial_text_width(text) ⇒ Object
- .calibri_text_width(text) ⇒ Object
-
.color_to_hex(value) ⇒ Object
Convert hex string, color name or hex number to color hex number.
-
.date_num(time, offset = nil) ⇒ Object
Convert time to number of days, and change beginning point from 1st jan 1970 to 1st jan 1900 Offset argument should be number of seconds, if not specified then it will use Time.zone.utc_offset || 0.
-
.lxw_datetime(time) ⇒ Object
Creates internal Libxlsxwriter::Datetime from Datetime object.
-
.lxw_time(time) ⇒ Object
Creates internal Libxlsxwriter::Datetime from Time object.
- .open(filename = nil, constant_memory: false, default_format: nil) ⇒ Object
- .print_ffi_obj(value) ⇒ Object
- .times_new_roman_text_width(text) ⇒ Object
Class Method Details
.arial_text_width(text) ⇒ Object
439 440 441 442 |
# File 'ext/fast_excel/text_width_ext.c', line 439
static VALUE
rb_arial_text_width(VALUE self, VALUE text) {
return rb_some_text_width(text, ARIAL_DEFAULT, ARIAL_CHAR_WIDTH, ARIAL_KERNING);
}
|
.calibri_text_width(text) ⇒ Object
444 445 446 447 |
# File 'ext/fast_excel/text_width_ext.c', line 444
static VALUE
rb_calibri_text_width(VALUE self, VALUE text) {
return rb_some_text_width(text, CALIBRI_DEFAULT, CALIBRI_CHAR_WIDTH, CALIBRI_KERNING);
}
|
.color_to_hex(value) ⇒ Object
Convert hex string, color name or hex number to color hex number
282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 |
# File 'lib/fast_excel.rb', line 282 def self.color_to_hex(value) orig_value = value value = value.to_s if value.is_a?(Symbol) if value.is_a?(String) if EXTRA_COLORS[value.to_sym] return EXTRA_COLORS[value.to_sym] elsif COLOR_ENUM.find(value.to_sym) return COLOR_ENUM.find(value.to_sym) elsif COLOR_ENUM.find("color_#{value.to_sym}") return COLOR_ENUM.find("color_#{value.to_sym}") elsif value =~ /^#?(0x)?([\da-f]){6}$/i value = value.sub('#', '') if value.start_with?('#') return value.start_with?('0x') ? value.to_i(16) : "0x#{value}".to_i(16) else raise ArgumentError, "Unknown color value #{orig_value.inspect}, expected hex string or color name" end end return value if value.is_a?(Numeric) raise ArgumentError, "Can not use #{value.class} (#{value.inspect}) for color value, expected String or Hex Number" end |
.date_num(time, offset = nil) ⇒ Object
Convert time to number of days, and change beginning point from 1st jan 1970 to 1st jan 1900 Offset argument should be number of seconds, if not specified then it will use Time.zone.utc_offset || 0
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/fast_excel.rb', line 92 def self.date_num(time, offset = nil) unless offset # Try use value utc_offset if time.respond_to?(:utc_offset) offset = time.utc_offset # Else try use Rails' app timezone elsif Time.respond_to?(:zone) && !Time.zone.nil? offset = Time.zone.utc_offset else offset = 0 # rollback to UTC end end time.to_f / XLSX_DATE_DAY + XLSX_DATE_EPOCH_DIFF + offset / XLSX_DATE_DAY end |
.lxw_datetime(time) ⇒ Object
Creates internal Libxlsxwriter::Datetime from Datetime object
59 60 61 62 63 64 65 66 67 68 |
# File 'lib/fast_excel.rb', line 59 def self.lxw_datetime(time) date = Libxlsxwriter::Datetime.new date[:year] = time.year date[:month] = time.month date[:day] = time.day date[:hour] = time.hour date[:min] = time.minute date[:sec] = time.second date end |
.lxw_time(time) ⇒ Object
Creates internal Libxlsxwriter::Datetime from Time object
71 72 73 74 75 76 77 78 79 80 |
# File 'lib/fast_excel.rb', line 71 def self.lxw_time(time) date = Libxlsxwriter::Datetime.new date[:year] = time.year date[:month] = time.month date[:day] = time.day date[:hour] = time.hour date[:min] = time.min date[:sec] = time.sec date end |
.open(filename = nil, constant_memory: false, default_format: nil) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/fast_excel.rb', line 25 def self.open(filename = nil, constant_memory: false, default_format: nil) tmp_file = false if filename if File.exist?(filename) && File.size(filename) > 0 raise ArgumentError, "File '#{filename}' already exists. FastExcel can not open existing files, only create new files" end else require 'tmpdir' filename = "#{Dir.mktmpdir}/fast_excel.xlsx" tmp_file = true end filename = filename.to_s if defined?(Pathname) && filename.is_a?(Pathname) workbook = if constant_memory opt = Libxlsxwriter::WorkbookOptions.new opt[:constant_memory] = 1 Libxlsxwriter.workbook_new_opt(filename, opt) else Libxlsxwriter.workbook_new(filename) end result = Libxlsxwriter::Workbook.new(workbook) if default_format raise "default_format argument must be a hash" unless default_format.is_a?(Hash) result.default_format.set(default_format) end result.tmp_file = tmp_file result.filename = filename result end |
.print_ffi_obj(value) ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/fast_excel.rb', line 108 def self.print_ffi_obj(value) puts "#{value.class}" value.members.each do |key| field_val = if value[key].is_a?(FFI::Pointer) && value[key].null? || value[key].nil? "nil" elsif value[key].is_a?(FFI::StructLayout::CharArray) value[key].to_str.inspect elsif value[key].is_a?(String) value[key].inspect elsif value[key].is_a?(Symbol) value[key].inspect else value[key] end puts "* #{key}: #{field_val}" end nil end |
.times_new_roman_text_width(text) ⇒ Object
449 450 451 452 |
# File 'ext/fast_excel/text_width_ext.c', line 449
static VALUE
rb_times_new_roman_text_width(VALUE self, VALUE text) {
return rb_some_text_width(text, TIMES_NEW_ROMAN_DEFAULT, TIMES_NEW_ROMAN_CHAR_WIDTH, TIMES_NEW_ROMAN_KERNING);
}
|