lib/fast_excel.rb in fast_excel-0.2.0 vs lib/fast_excel.rb in fast_excel-0.2.1

- old
+ new

@@ -1,15 +1,23 @@ require_relative './fast_excel/binding' module FastExcel + + class Formula + attr_accessor :fml + def initialize(fml) + @fml = fml + end + end + DEF_COL_WIDTH = 8.43 def self.open(filename = nil, constant_memory: false, default_format: nil) tmp_file = false unless filename require 'tmpdir' - filename = "#{Dir.mktmpdir}/fast_excel.xslx" + filename = "#{Dir.mktmpdir}/fast_excel.xlsx" tmp_file = true end unless filename raise ArgumentError, "filename is required" @@ -84,21 +92,24 @@ end 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? + 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 module AttributeHelper def set(values) values.each do |key, value| @@ -108,17 +119,22 @@ self[key] = value end end end - def pretty_print(pp) + def fields_hash res = {} members.each do |key| + #p [key, self[key]] res[key] = respond_to?(key) ? send(key) : self[key] end - pp res + res end + + def pretty_print(pp) + pp fields_hash + end end module WorkbookExt include AttributeHelper attr_accessor :tmp_file, :is_open, :filename @@ -178,10 +194,12 @@ write_number(row_number, index, value.to_f, format) elsif defined?(DateTime) && value.is_a?(DateTime) write_datetime(row_number, index, FastExcel.lxw_datetime(value), format) elsif value.is_a?(Time) write_datetime(row_number, index, FastExcel.lxw_time(value), format) + elsif value.is_a?(Formula) + write_formula(row_number, index, value.fml, format) else write_string(row_number, index, value.to_s, format) end end end @@ -232,10 +250,64 @@ def font_family=(value) self.font_name = value end end + + module RowExt + include AttributeHelper + + def inspect + attr_str = fields_hash.map do |key, val| + "@#{key}=#{val.inspect}" + end + "<Libxlsxwriter::Row #{attr_str.join(" ")}>" + end + end + + module CellExt + include AttributeHelper + + def value + if self[:type] == :number_cell + self[:u][:number] + elsif self[:type] == :string_cell + pointer = self[:u][:string] + p pointer + pointer.null? ? nil : pointer.to_ptr.read_string + else + self[:user_data1] + end + end + + def user_data1 + value + #self[:user_data1] && !self[:user_data1].null? ? self[:user_data1].to_ptr.read_string : nil + end + + def user_data2 + self[:user_data2] #&& !self[:user_data2].null? ? self[:user_data2].to_ptr.read_string : nil + end + + def sst_string + self[:sst_string] #&& !self[:sst_string].null? ? self[:sst_string].to_ptr.read_string : nil + end + + #def inspect + # attr_str = fields_hash.map do |key, val| + # "@#{key}=#{val.inspect}" + # end + # "<Libxlsxwriter::Row #{attr_str.join(" ")}>" + #end + + def inspect + attr_str = fields_hash.map do |key, val| + "@#{key}=#{val.inspect}" + end + "<Libxlsxwriter::Row #{attr_str.join(" ")}>" + end + end end Libxlsxwriter::Workbook.instance_eval do include FastExcel::WorkbookExt end @@ -244,6 +316,14 @@ include FastExcel::FormatExt end Libxlsxwriter::Worksheet.instance_eval do include FastExcel::WorksheetExt -end \ No newline at end of file +end + +Libxlsxwriter::Row.instance_eval do + include FastExcel::RowExt +end + +Libxlsxwriter::Cell.instance_eval do + include FastExcel::CellExt +end