Git Product home page Git Product logo

rspreadsheet's Introduction

  • ๐Ÿ‘‹ Hi, Iโ€™m @gorn
  • ๐Ÿ‘€ Iโ€™m interested in ECMAScript, Ruby, Pythin, Rust, C++, Rails, Prolog, Pascal and many others ...
  • ๐ŸŒฑ Iโ€™m currently working on larger project based on Electron.
  • ๐Ÿ’ž๏ธ Iโ€™m looking to collaborate on projects related to board games.

rspreadsheet's People

Contributors

gorn avatar kammerer avatar sixtyfive avatar vtamara avatar waffle-iron avatar whitehat101 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

rspreadsheet's Issues

Existing formulas do not calculate fields set by rspreadsheet

Existing ods file has formula pre-set.

I use rspreadsheet (v0.5.1) to

  • open the file
  • write data
  • save

The pre-set formulas do not calculate the data set by rspreadsheet.

If I open the file in LibreOffice and

  1. make change to the data (insert space and backspace) the formula (that use the changed cell) works.
  2. recalculate (by pressing F9), does not work.
  3. recalculate hard (by pressing Ctrl + Shift + F9) does work.

Step to reproduce 1

  • download attached ods file (generated using rspreadsheet)
  • check row with formula (row 37)
  • make changes to the row with data (row 13)
  • re-check row with formulat (row 37)

screenshot

in the attached file and screenshot, I made changes to first two filled data and the formula calculate them.

Step to reproduce 2

  • download attached ods file (generated using rspreadsheet)
  • check row with formula (row 37)
  • press F9
  • re-check row with formulat (row 37)

Step to reproduce 3

  • download attached ods file (generated using rspreadsheet)
  • check row with formula (row 37)
  • press Ctrl + Shift + F9
  • re-check row with formulat (row 37)

resulting file: http://share.getcloudapp.com/BlupjKEg

Assigement of an value to a cell (and possible conversion) is nontrivial

It is nontrivial to decide what to do upon assignemen of an value of class A to a cell which has type B. Currently I am giving preference to A, but maybe it should not be so. Traditionally (LibreOffice) the spreadsheet tries to convert value to B and only if it is not possible, changes the type of cell to A. This needs to be investigates and reimplemented (also the guess_cell_type is spagetti code, and needs some refactoring love). Cases to observe:

  • assigning float to percentage cell
  • assigning integer to date cell
  • assigning nil or empty string to any cell (LibreOffice deletes contants but preserves the original type)
  • assigning string with parsable datetime to date or time cell

Uncaught exception: cannot load such file -- libxml_ruby even if it's installed.

The libxml seems installed but still thowing this error. below are some configs. please advise. Thanks

Gem Environment :
RubyGems Environment:
RUBYGEMS VERSION: 2.7.6
RUBY VERSION: 2.5.3 (2018-10-18 patchlevel 105) [x64-mingw32]
INSTALLATION DIRECTORY: C:/Ruby25-x64/lib/ruby/gems/2.5.0
USER INSTALLATION DIRECTORY: C:/Users/Sachin/.gem/ruby/2.5.0
RUBY EXECUTABLE: C:/Ruby25-x64/bin/ruby.exe
EXECUTABLE DIRECTORY: C:/Ruby25-x64/bin
SPEC CACHE DIRECTORY: C:/Users/Sachin/.gem/specs
SYSTEM CONFIGURATION DIRECTORY: C:/ProgramData
RUBYGEMS PLATFORMS:
ruby
x64-mingw32
GEM PATHS:
C:/Ruby25-x64/lib/ruby/gems/2.5.0
C:/Users/Sachin/.gem/ruby/2.5.0
GEM CONFIGURATION:
:update_sources => true
:verbose => true
:backtrace => false
:bulk_threshold => 1000
REMOTE SOURCES:
https://rubygems.org/
SHELL PATH:
C:\Program Files (x86)\Common Files\Oracle\Java\javapath
C:\Program Files\Common Files\Oracle\Java\javapath
C:\Windows\System32
C:\Windows
C:\Windows\System32\wbem
C:\Windows\System32\WindowsPowerShell\v1.0
C:\Windows\System32\OpenSSH
C:\Program Files\SourceGear\Common\DiffMerge
C:\Program Files\Java\jdk-16.0.1\bin
C:\Program Files\apache-maven-3.8.1\bin
C:\Program Files (x86)\GnuPG\bin
C:\Program Files\Git\cmd
C:\Program Files\nodejs
C:\soft
C:\Ruby25-x64\bin
C:\Program Files\Java\jdk-16.0.1\bin
C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.2\bin
C:\Program Files\JetBrains\WebStorm 2021.1.2\bin
C:\Users\Sachin\AppData\Local\Programs\Microsoft VS Code\bin
C:\Program Files\nodejs
C:\Users\Sachin\AppData\Roaming\npm
C:\Program Files\JetBrains\RubyMine 2021.2.3\bin
C:\Users\Sachin\AppData\Local\Microsoft\WindowsApps
bundle show libxml-ruby

C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/libxml-ruby-2.9.0-x64-mingw32

Cells table:covered-table-cell ignored.

Element table:covered-table-cell, which symbolize cells which are coveed by spanned cells. They should be treated as other cells most of the time.

This is probably new thing in 1.2 specification.

Bundler doesn't detect libxml-ruby as a transitive dependency on macOS

Steps to reproduce:

  1. on macOS, create a new Ruby project with rspreadsheet as a dependency in the Gemfile.
  2. run gem dependency -R rspreadsheet

Expected:

  • libxml-ruby appears as a dependency

Actual:

Gem rspreadsheet-0.5.3
  andand (>= 1.3)
  bundler (>= 1.5, < 3, development)
  coveralls (>= 0.7, development)
  pry-nav (>= 0.0, development)
  rake (~> 0.9, development)
  rspec (>= 2.0, development)
  rubyzip (>= 1.3)

Hypothesis:

I see the code in the gemspec that's meant to check whether libxml-ruby is already installed. I don't know enough about Bundler or Rubygems internals, but I believe (and this StackOverflow answer suggests) that the gemspec is only evaluated at gem build time, not later at install.

Circumstantial evidence:

  1. if I download the .gem file from RubyGems, untar it, and gunzip metadata.gz, libxml-ruby doesn't appear.

  2. If I instead clone the source and build locally (gem build rspreadsheet.gemspec) on my Mac, the resulting metadata file includes this:

    name: libxml-ruby
    requirement: !ruby/object:Gem::Requirement
      requirements:
      - - ">="
        - !ruby/object:Gem::Version
          version: '3.0'
    type: :runtime
    prerelease: false
    version_requirements: !ruby/object:Gem::Requirement
      requirements:
      - - ">="
        - !ruby/object:Gem::Version
          version: '3.0'

Thoughts

  • It's possible there's some way to get this to work as a gem extension, but I don't know it's worth the effort. Possibly looking at the way Nokogiri does it would be fruitful?

  • My guess is this also explains #46.

Problem writing cell with a drop-down list

When there are several cells with a drop-down list and you write one with rspreadshet, all the cells with the drop-down list will be written.

I created a test repository with an example spreadsheet with 25 cells with a drop-down list and a script that uses rspreadsheet to write the first one. The result is a spreadsheet with the 25 cells with the value written just one.

See: https://github.com/vtamara/prob-rspreadsheet-dropdown

Attaching picture of the result:
prob-r

Mimic LibreOffice cell typeguessing

This is a feature request and needs some more investigation. LibreOffice does very good job in setting default styles for cells when the cell is the only one set in a column. It stores this info to column information. Rspreadsheet should respect this value (and do not add additionall style value to a cell) and make use of it (in guessing types of a cell).

FODS support

Right now, I get an error when I try to open a FODS document:

[1] pry(main)> require 'rspreadsheet'
=> true
[2] pry(main)> doc = Rspreadsheet.open('./conf/model.fods')
Zip::Error: Zip end of central directory signature not found
from /home/p/.gem/ruby/2.6.2/gems/rubyzip-1.2.2/lib/zip/central_directory.rb:143:in `get_e_o_c_d'

As far as I know, it's just an uncompressed version of ODS.

Randomly crash

Hi, first of all, thanks for your work, I recently discovered this gem and it seems perfect for my needs.
But.. I experiment some crash.
Sometimes everything is fine, the ODS is created exactly as expected, but sometimes it fails (3 times out of 4).

Error log:

/home/b0b/.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/tools.rb:153: [BUG] Segmentation fault at 0x0000000000000020                                                                                                                
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]                                                                                                                                                                                  
                                                                                                                                                                                                                                               
-- Control frame information -----------------------------------------------                                                                                                                                                                   
c:0010 p:0014 s:0057 e:000055 METHOD /home/b0b/.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/tools.rb:153                                                                                                                           
c:0009 p:0029 s:0048 e:000047 METHOD /home/b0b/.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/tools.rb:164                                                                                                                           
c:0008 p:0019 s:0040 e:000039 METHOD /home/b0b/.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/xml_tied_item.rb:57                                                                                                                    
c:0007 p:0010 s:0036 e:000035 METHOD /home/b0b/.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/xml_tied_item.rb:53
c:0006 p:0007 s:0032 e:000031 METHOD /home/b0b/.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/cell.rb:127    
c:0005 p:0070 s:0025 e:000023 METHOD /home/b0b/.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/worksheet.rb:99
c:0004 p:0049 s:0019 e:000018 BLOCK  crash.rb:23 [FINISH]                                                              
c:0003 p:---- s:0015 e:000014 CFUNC  :map                                                                              
c:0002 p:0146 s:0011 E:0025a8 EVAL   crash.rb:18 [FINISH]                                                              
c:0001 p:0000 s:0003 E:0014b0 (none) [FINISH]                                                                          
                                                                                                                       
-- Ruby level backtrace information ----------------------------------------                                           
crash.rb:18:in `<main>'                                                                                                                                                                                                                        
crash.rb:18:in `map'                                                                                                                                                                                                                           
crash.rb:23:in `block in <main>'                                                                                                                                                                                                               
/home/b0b/.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/worksheet.rb:99:in `[]='                                                                                                                                                    
/home/b0b/.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/cell.rb:127:in `value='                                                                                                                                                     
/home/b0b/.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/xml_tied_item.rb:53:in `mode'                       
/home/b0b/.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/xml_tied_item.rb:57:in `repeated'                   
/home/b0b/.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/tools.rb:164:in `get_ns_attribute_value'            
/home/b0b/.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/tools.rb:153:in `get_ns_attribute'                  

The error is a bit weird since, it changes sometimes without touching ruby code or data:

  • /.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/xml_tied_repeatable.rb:36: [BUG] try to mark T_NONE object
  • /.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/xml_tied_array.rb:197: [BUG] Segmentation fault at 0x0000000000000020
  • /.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/xml_tied_array.rb:187: [BUG] try to mark T_NON
    E object
  • /.gem/ruby/2.7.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/xml_tied_repeatable.rb:40: [BUG] try to mark T
    _NONE object

Ruby code and data used can be found here.

rewriting cell addresses in formulas when inserting rows / cells

This idea might very well be out of the scope of any gem like this, but I put it here for discussion. Currently the gem touches the original file only as less as necessarry. This for example means, that if I insert a row, all other rows after it are pushed down, but no formulas are influenced. This can possibly lead to unexpected results if any cells contain adresses to other cells. Open/LibreOffice deals with the same thing by implementing very sophisticated rewriting of cell adresses in such cases. It might sound natural to work with it, but I am sure that the logic behind is complex. The question is wheter it is even worth of trying to implement something like this.

Note that if you work with spreadsheets without any formulas, than there is no problem at all. Generally it really depends on how the gem is used. In most cases the formulas are not neededed as the values can be precalculated in ruby and then inserted as value only. I am curious about any opinions regarding this.

Header rows are not respected

If some rows are marked as header, they are ignored. I am not sure where this is in GUI, but in xml it is denoted by <table:table-header-rows> group in which <table:table-row>'s are grouped

Setting background color get more cells colorized

I am trying to set background color using the following code.

cell = sheet.cell("#{col}#{row}")
cell.format.background_color = '#EEEEEE'

Please see the below screenshot to see the column I want to colorize

col and row are generated in nested loop. The following code correctly set the cell with value 'S' (so the col and row calculation is correct)

cell.value = 'S'

I have tried accessing the cells with various methods and rspreadsheet consistently (not random) mis-colorize the background-color of (unintended) cells.

Have anyone experience this problem? Any direction to fix this is much appreciated.

Iterate worksheets

It would be great that calling workbook.worksheets without any argument will return an enumerator with all the worksheets. This is very common in ruby and the following code will work:
llibre = Rspreadsheet.open('test_llibre.ods')
llibre.worksheets.each do |ws|
# ... do something with the ws
end

feature wish: method returning last "meaningful" row

I guess the title says it all. It would be great to be able to get a range of rows (and perhaps columns) where there are meaningful data. At least something like get_last_row_with_data would do, but an iterator over nonempty rows would be even greater.

Tests not passing when trying with libxml-ruby 3.0.0

Seems that there is no memory problems with libxml-ruby 3.0.0, however some tests are not passing.

Failures:                                                                                                                                             [13/16343]

  1) LibXML::XML::Node can compare nodes
     Failure/Error: @n.should == @m
       expected: #<LibXML::XML::Node:0x0013cde2b183e8>
            got: #<LibXML::XML::Node:0x0013cde2b1a8c8> (using ==)
       Diff:
       @@ -1,2 +1,2 @@
       -#<LibXML::XML::Node:0x0013cde2b183e8>
       +#<LibXML::XML::Node:0x0013cde2b1a8c8>
     # ./spec/class_extensions_spec.rb:24:in `block (2 levels) in <top (required)>'

rspreadsheet stops after changing some cells with libxml-ruby 2.9.0

I'm tyring to use rspreadsheet with a very simple example (changes several times the same cell of an existing spreadsheet), but it stops after some iterations, each time with different error.

The example I'm using is available at https://github.com/vtamara/ej-rspreadsheet
My platform is adJ/OpenBSD 6.0 running ruby 2.3.1p112.
The libraries are updated as you can see in the Gemfile.lock of the example.

In my case, it fails with:

cd ~/tmp
git clone https://github.com/gorn/rspreadsheet.git
git clone https://github.com/vtamara/ej-rspreadsheet.git
cd ej-rspreadsheet
bundle install
bundle exec ./ejf.rb

Some of the error that it produces (using https://github.com/gorn/rspreadsheet/tree/311fcd5e4cd94c7398572d53643bfa2dc2eb04f3 ):

  1. After 237 terations stops with:
TypeError: wrong argument type LibXML::XML::Node (expected Data)
  /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/node.rb:116:in `node_type'
  /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/node.rb:116:in `block in each_element'
  /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/node.rb:115:in `each'
  /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/node.rb:115:in `each_element'
  /home/vtamara/tmp/rspreadsheet/lib/helpers/class_extensions.rb:49:in `elements'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:133:in `find_subnode_with_range_respect_repeated'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:127:in `find_subnode_respect_repeated'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:97:in `find_my_subnode_respect_repeated'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/row.rb:41:in `xmlnode'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:97:in `find_my_subnode_respect_repeated'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:32:in `xmlnode'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:19:in `mode'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:25:in `repeated?'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:36:in `detach_if_needed'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/cell.rb:76:in `value='
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/worksheet.rb:78:in `[]='
  /home/vtamara/tmp/ej-rspreadsheet/ejf.rb:10:in `block in <top (required)>'
  /home/vtamara/tmp/ej-rspreadsheet/ejf.rb:8:in `each'
  /home/vtamara/tmp/ej-rspreadsheet/ejf.rb:8:in `<top (required)>'
  1. After 316 iterations with:
TypeError: wrong argument type LibXML::XML::Node (expected Data)
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:133:in `name'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:133:in `block in find_subnode_with_range_respect_repeated'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:133:in `select'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:133:in `find_subnode_with_range_respect_repeated'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:127:in `find_subnode_respect_repeated'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:97:in `find_my_subnode_respect_repeated'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/row.rb:41:in `xmlnode'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:97:in `find_my_subnode_respect_repeated'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:32:in `xmlnode'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:19:in `mode'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:25:in `repeated?'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:36:in `detach_if_needed'
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/cell.rb:76:in `value='
  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/worksheet.rb:78:in `[]='
  /home/vtamara/tmp/ej-rspreadsheet/ejf.rb:10:in `block in <top (required)>'
  /home/vtamara/tmp/ej-rspreadsheet/ejf.rb:8:in `each'
  /home/vtamara/tmp/ej-rspreadsheet/ejf.rb:8:in `<top (required)>'
  1. After 197 iterations with:
/home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:134: [BUG] Segmentation fault at 0x00000000000018
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-openbsd]

-- Control frame information -----------------------------------------------
c:0028 p:0009 s:0145 e:000143 BLOCK  /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:134 [FINISH]
c:0027 p:---- s:0139 e:000138 CFUNC  :each
c:0026 p:0022 s:0136 e:000135 METHOD /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:133
c:0025 p:0014 s:0129 e:000128 METHOD /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:127
c:0024 p:0016 s:0121 e:000120 METHOD /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:97
c:0023 p:0042 s:0116 e:000115 METHOD /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:32
c:0022 p:0477 s:0112 e:000111 METHOD /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/cell.rb:186
c:0021 p:0030 s:0104 e:000103 METHOD /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/cell.rb:78
c:0020 p:0090 s:0099 e:000097 METHOD /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/worksheet.rb:78
c:0019 p:0027 s:0094 e:000092 BLOCK  /home/vtamara/tmp/ej-rspreadsheet/ejf.rb:10 [FINISH]
c:0018 p:---- s:0090 e:000089 CFUNC  :each
c:0017 p:0052 s:0087 e:000086 TOP    /home/vtamara/tmp/ej-rspreadsheet/ejf.rb:8 [FINISH]
c:0016 p:---- s:0083 e:000082 CFUNC  :load
c:0015 p:0170 s:0079 e:000078 METHOD /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/cli/exec.rb:74
c:0014 p:0089 s:0070 e:000069 METHOD /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/cli/exec.rb:27
c:0013 p:0032 s:0066 e:000065 METHOD /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/cli.rb:332
c:0012 p:0078 s:0062 e:000061 METHOD /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/command.rb:27
c:0011 p:0058 s:0055 e:000054 METHOD /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/invocation.rb:126
c:0010 p:0291 s:0049 e:000048 METHOD /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor.rb:359
c:0011 p:0058 s:0055 e:000054 METHOD /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/invocation.rb:126             [315/16016]
c:0010 p:0291 s:0049 e:000048 METHOD /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor.rb:359
c:0009 p:0012 s:0037 e:000036 METHOD /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/cli.rb:20
c:0008 p:0070 s:0033 e:000032 METHOD /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/base.rb:440
c:0007 p:0012 s:0027 e:000026 METHOD /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/cli.rb:11
c:0006 p:0090 s:0022 e:000021 BLOCK  /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/exe/bundle:34
c:0005 p:0006 s:0017 e:000016 METHOD /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/friendly_errors.rb:100
c:0004 p:0172 s:0013 E:001338 TOP    /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/exe/bundle:26 [FINISH]
c:0003 p:---- s:0010 e:000009 CFUNC  :load
c:0002 p:0136 s:0006 E:0007c0 EVAL   /usr/local/bin/bundle:22 [FINISH]
c:0001 p:0000 s:0002 E:000ce0 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
/usr/local/bin/bundle:22:in `<main>'
/usr/local/bin/bundle:22:in `load'
/usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/exe/bundle:26:in `<top (required)>'
/usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/friendly_errors.rb:100:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/exe/bundle:34:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/cli.rb:11:in `start'
/usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/base.rb:440:in `start'
/usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/cli.rb:20:in `dispatch'
/usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor.rb:359:in `dispatch'
/usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
/usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/cli.rb:332:in `exec'
/usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/cli/exec.rb:27:in `run'
/usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/cli/exec.rb:74:in `kernel_load'
/usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/cli/exec.rb:74:in `load'
/home/vtamara/tmp/ej-rspreadsheet/ejf.rb:8:in `<top (required)>'
/home/vtamara/tmp/ej-rspreadsheet/ejf.rb:8:in `each'
/home/vtamara/tmp/ej-rspreadsheet/ejf.rb:10:in `block in <top (required)>'
/home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/worksheet.rb:78:in `[]='
/home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/cell.rb:78:in `value='
/home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/cell.rb:186:in `guess_cell_type'
/home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:32:in `xmlnode'
/home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:97:in `find_my_subnode_respect_repeated'
/home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:127:in `find_subnode_respect_repeated'
/home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:133:in `find_subnode_with_range_respect_repeated'
/home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:133:in `each'
/home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb:134:in `block in find_subnode_with_range_respect_repeated'

-- Other runtime information -----------------------------------------------

* Loaded script: ./ejf.rb

* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 rational.so
    3 complex.so
    4 /usr/local/lib/ruby/2.3/x86_64-openbsd/enc/encdb.so
    5 /usr/local/lib/ruby/2.3/x86_64-openbsd/enc/trans/transdb.so
    6 /usr/local/lib/ruby/2.3/unicode_normalize.rb
    7 /usr/local/lib/ruby/2.3/x86_64-openbsd/rbconfig.rb
    8 /usr/local/lib/ruby/site_ruby/2.3/rubygems/compatibility.rb
    9 /usr/local/lib/ruby/site_ruby/2.3/rubygems/defaults.rb
   10 /usr/local/lib/ruby/site_ruby/2.3/rubygems/deprecate.rb
   11 /usr/local/lib/ruby/site_ruby/2.3/rubygems/errors.rb
   12 /usr/local/lib/ruby/site_ruby/2.3/rubygems/version.rb
   13 /usr/local/lib/ruby/site_ruby/2.3/rubygems/requirement.rb
   14 /usr/local/lib/ruby/site_ruby/2.3/rubygems/platform.rb
   15 /usr/local/lib/ruby/site_ruby/2.3/rubygems/basic_specification.rb
   16 /usr/local/lib/ruby/site_ruby/2.3/rubygems/stub_specification.rb
   17 /usr/local/lib/ruby/site_ruby/2.3/rubygems/util/list.rb
   18 /usr/local/lib/ruby/2.3/x86_64-openbsd/stringio.so
   19 /usr/local/lib/ruby/site_ruby/2.3/rubygems/specification.rb
   20 /usr/local/lib/ruby/site_ruby/2.3/rubygems/exceptions.rb
   21 /usr/local/lib/ruby/site_ruby/2.3/rubygems/core_ext/kernel_gem.rb
   22 /usr/local/lib/ruby/2.3/monitor.rb
   23 /usr/local/lib/ruby/site_ruby/2.3/rubygems/core_ext/kernel_require.rb
   24 /usr/local/lib/ruby/site_ruby/2.3/rubygems.rb
   25 /usr/local/lib/ruby/site_ruby/2.3/rubygems/path_support.rb
   26 /usr/local/lib/ruby/site_ruby/2.3/rubygems/dependency.rb
   27 /usr/local/lib/ruby/gems/2.3/gems/did_you_mean-1.0.0/lib/did_you_mean/version.rb
   28 /usr/local/lib/ruby/gems/2.3/gems/did_you_mean-1.0.0/lib/did_you_mean/core_ext/name_error.rb
   29 /usr/local/lib/ruby/gems/2.3/gems/did_you_mean-1.0.0/lib/did_you_mean/levenshtein.rb
   30 /usr/local/lib/ruby/gems/2.3/gems/did_you_mean-1.0.0/lib/did_you_mean/jaro_winkler.rb
   31 /usr/local/lib/ruby/gems/2.3/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkable.rb
   32 /usr/local/lib/ruby/2.3/delegate.rb
   33 /usr/local/lib/ruby/gems/2.3/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
   34 /usr/local/lib/ruby/gems/2.3/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
   35 /usr/local/lib/ruby/gems/2.3/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkers/name_error_checkers.rb
   36 /usr/local/lib/ruby/gems/2.3/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkers/method_name_checker.rb
   37 /usr/local/lib/ruby/gems/2.3/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkers/null_checker.rb
   38 /usr/local/lib/ruby/gems/2.3/gems/did_you_mean-1.0.0/lib/did_you_mean/formatter.rb
   39 /usr/local/lib/ruby/gems/2.3/gems/did_you_mean-1.0.0/lib/did_you_mean.rb
   40 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/postit_trampoline.rb
   41 /usr/local/lib/ruby/2.3/x86_64-openbsd/etc.so
   42 /usr/local/lib/ruby/2.3/fileutils.rb
   43 /usr/local/lib/ruby/2.3/x86_64-openbsd/pathname.so
   44 /usr/local/lib/ruby/2.3/pathname.rb
   45 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/errors.rb
   46 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/environment_preserver.rb
   47 /usr/local/lib/ruby/2.3/x86_64-openbsd/socket.so
   48 /usr/local/lib/ruby/2.3/x86_64-openbsd/io/wait.so
   49 /usr/local/lib/ruby/2.3/socket.rb
   50 /usr/local/lib/ruby/2.3/timeout.rb
   51 /usr/local/lib/ruby/2.3/net/protocol.rb
   52 /usr/local/lib/ruby/2.3/uri/rfc2396_parser.rb
   53 /usr/local/lib/ruby/2.3/uri/rfc3986_parser.rb
   54 /usr/local/lib/ruby/2.3/uri/common.rb
   55 /usr/local/lib/ruby/2.3/uri/generic.rb
   56 /usr/local/lib/ruby/2.3/uri/ftp.rb
   57 /usr/local/lib/ruby/2.3/uri/http.rb
   58 /usr/local/lib/ruby/2.3/uri/https.rb
   59 /usr/local/lib/ruby/2.3/uri/ldap.rb
   60 /usr/local/lib/ruby/2.3/uri/ldaps.rb
   61 /usr/local/lib/ruby/2.3/uri/mailto.rb
   62 /usr/local/lib/ruby/2.3/uri.rb
   63 /usr/local/lib/ruby/2.3/x86_64-openbsd/zlib.so
   64 /usr/local/lib/ruby/2.3/net/http/exceptions.rb
   65 /usr/local/lib/ruby/2.3/net/http/header.rb
   66 /usr/local/lib/ruby/2.3/x86_64-openbsd/enc/windows_31j.so
   67 /usr/local/lib/ruby/2.3/net/http/generic_request.rb
   68 /usr/local/lib/ruby/2.3/net/http/request.rb
   69 /usr/local/lib/ruby/2.3/net/http/requests.rb
   70 /usr/local/lib/ruby/2.3/net/http/response.rb
   71 /usr/local/lib/ruby/2.3/net/http/responses.rb
   72 /usr/local/lib/ruby/2.3/net/http/proxy_delta.rb
   73 /usr/local/lib/ruby/2.3/net/http/backward.rb
   74 /usr/local/lib/ruby/2.3/net/http.rb
   75 /usr/local/lib/ruby/2.3/x86_64-openbsd/date_core.so
   76 /usr/local/lib/ruby/2.3/date.rb
   77 /usr/local/lib/ruby/2.3/time.rb
   78 /usr/local/lib/ruby/site_ruby/2.3/rubygems/util.rb
   79 /usr/local/lib/ruby/2.3/x86_64-openbsd/io/console.so
   80 /usr/local/lib/ruby/site_ruby/2.3/rubygems/user_interaction.rb
   81 /usr/local/lib/ruby/site_ruby/2.3/rubygems/request/http_pool.rb
   82 /usr/local/lib/ruby/site_ruby/2.3/rubygems/request/https_pool.rb
   83 /usr/local/lib/ruby/site_ruby/2.3/rubygems/request/connection_pools.rb
   84 /usr/local/lib/ruby/site_ruby/2.3/rubygems/request.rb
   85 /usr/local/lib/ruby/2.3/cgi/core.rb
   86 /usr/local/lib/ruby/2.3/x86_64-openbsd/cgi/escape.so
   87 /usr/local/lib/ruby/2.3/cgi/util.rb
   88 /usr/local/lib/ruby/2.3/cgi/cookie.rb
   89 /usr/local/lib/ruby/2.3/cgi.rb
   90 /usr/local/lib/ruby/site_ruby/2.3/rubygems/uri_formatter.rb
   91 /usr/local/lib/ruby/2.3/x86_64-openbsd/digest.so
   92 /usr/local/lib/ruby/2.3/digest.rb
   93 /usr/local/lib/ruby/2.3/x86_64-openbsd/openssl.so
   94 /usr/local/lib/ruby/2.3/openssl/bn.rb
   95 /usr/local/lib/ruby/2.3/openssl/pkey.rb
   96 /usr/local/lib/ruby/2.3/openssl/cipher.rb
   97 /usr/local/lib/ruby/2.3/openssl/config.rb
   98 /usr/local/lib/ruby/2.3/openssl/digest.rb
   99 /usr/local/lib/ruby/2.3/openssl/x509.rb
  100 /usr/local/lib/ruby/2.3/openssl/buffering.rb
  101 /usr/local/lib/ruby/2.3/x86_64-openbsd/io/nonblock.so
  102 /usr/local/lib/ruby/2.3/openssl/ssl.rb
  103 /usr/local/lib/ruby/2.3/openssl.rb
  104 /usr/local/lib/ruby/2.3/securerandom.rb
  105 /usr/local/lib/ruby/2.3/resolv.rb
  106 /usr/local/lib/ruby/site_ruby/2.3/rubygems/remote_fetcher.rb
  107 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/gem_remote_fetcher.rb
  108 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/plugin.rb
  109 /usr/local/lib/ruby/site_ruby/2.3/rubygems/source/git.rb
  110 /usr/local/lib/ruby/site_ruby/2.3/rubygems/source/installed.rb
  111 /usr/local/lib/ruby/site_ruby/2.3/rubygems/source/specific_file.rb
  112 /usr/local/lib/ruby/site_ruby/2.3/rubygems/source/local.rb
  113 /usr/local/lib/ruby/site_ruby/2.3/rubygems/source/lock.rb
  114 /usr/local/lib/ruby/site_ruby/2.3/rubygems/source/vendor.rb
  115 /usr/local/lib/ruby/site_ruby/2.3/rubygems/source.rb
  116 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/gem_helpers.rb
  117 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/match_platform.rb
  118 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/rubygems_ext.rb
  119 /usr/local/lib/ruby/site_ruby/2.3/rubygems/config_file.rb
  120 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/rubygems_integration.rb
  121 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/version.rb
  122 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/constants.rb
  123 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/current_ruby.rb
  124 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler.rb
  125 /usr/local/lib/ruby/2.3/set.rb
  126 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/command.rb
  127 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb
  128 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb
  129 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/error.rb
  130 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/invocation.rb
  131 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/parser/argument.rb
  132 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb
  133 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/parser/option.rb
  134 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/parser/options.rb
  135 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/parser.rb
  136 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/shell.rb
  137 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb
  138 /usr/local/lib/ruby/2.3/x86_64-openbsd/readline.so
  139 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb
  140 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/line_editor.rb
  141 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/util.rb
  142 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/base.rb
  143 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor.rb
  144 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb
  145 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb
  146 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb
  147 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb
  148 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/actions/directory.rb
  149 /usr/local/lib/ruby/2.3/x86_64-openbsd/strscan.so
  150 /usr/local/lib/ruby/2.3/erb.rb
  151 /usr/local/lib/ruby/2.3/open-uri.rb
  152 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb
  153 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb
  154 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/actions.rb
  155 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendored_thor.rb
  156 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/friendly_errors.rb
  157 /usr/local/lib/ruby/site_ruby/2.3/rubygems/ext/build_error.rb
  158 /usr/local/lib/ruby/site_ruby/2.3/rubygems/ext/builder.rb
  159 /usr/local/lib/ruby/site_ruby/2.3/rubygems/ext/configure_builder.rb
  160 /usr/local/lib/ruby/2.3/tmpdir.rb
  161 /usr/local/lib/ruby/2.3/tempfile.rb
  162 /usr/local/lib/ruby/site_ruby/2.3/rubygems/ext/ext_conf_builder.rb
  163 /usr/local/lib/ruby/site_ruby/2.3/rubygems/ext/rake_builder.rb
  164 /usr/local/lib/ruby/2.3/optparse.rb
  165 /usr/local/lib/ruby/site_ruby/2.3/rubygems/command.rb
  166 /usr/local/lib/ruby/site_ruby/2.3/rubygems/ext/cmake_builder.rb
  167 /usr/local/lib/ruby/site_ruby/2.3/rubygems/ext.rb
  168 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/settings.rb
  169 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/shared_helpers.rb
  170 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/cli.rb
  171 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/shell/basic.rb
  172 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/vendor/thor/lib/thor/shell/color.rb
  173 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/ui.rb
  174 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/ui/shell.rb
  175 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/ui/rg_proxy.rb
  176 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/cli/exec.rb
  177 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/source.rb
  178 /usr/local/lib/ruby/2.3/x86_64-openbsd/digest/sha1.so
  179 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/source/path.rb
  180 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/source/git.rb
  181 /usr/local/lib/ruby/site_ruby/2.3/rubygems/text.rb
  182 /usr/local/lib/ruby/site_ruby/2.3/rubygems/name_tuple.rb
  183 /usr/local/lib/ruby/site_ruby/2.3/rubygems/spec_fetcher.rb
  184 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/source/rubygems.rb
  185 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/lockfile_parser.rb
  186 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/definition.rb
  187 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/dependency.rb
  188 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/ruby_dsl.rb
  189 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/dsl.rb
  190 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/source_list.rb
  191 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/lazy_specification.rb
  192 /usr/local/lib/ruby/2.3/tsort.rb
  193 /usr/local/lib/ruby/2.3/forwardable.rb
  194 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/spec_set.rb
  195 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/gem_version_promoter.rb
  196 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/index.rb
  197 /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/version.rb
  198 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/ui/silent.rb
  199 /usr/local/lib/ruby/site_ruby/2.3/rubygems/util/licenses.rb
  200 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/source/gemspec.rb
  201 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/runtime.rb
  202 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/plugin/api.rb
  203 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/plugin/api/source.rb
  204 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/remote_specification.rb
  205 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/dep_proxy.rb
  206 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/stub_specification.rb
  207 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/endpoint_specification.rb
  208 /usr/local/lib/ruby/gems/2.3/gems/bundler-1.13.1/lib/bundler/setup.rb
  209 /usr/local/lib/ruby/2.3/singleton.rb
  210 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/dos_time.rb
  211 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/ioextras/abstract_input_stream.rb
  212 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/ioextras/abstract_output_stream.rb
  213 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/ioextras.rb
  214 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/entry.rb
  215 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/extra_field/generic.rb
  216 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/extra_field/universal_time.rb
  217 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/extra_field/old_unix.rb
  218 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/extra_field/unix.rb
  219 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/extra_field/zip64.rb
  220 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/extra_field/zip64_placeholder.rb
  221 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/extra_field/ntfs.rb
  222 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/extra_field.rb
  223 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/entry_set.rb
  224 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/central_directory.rb
  225 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/file.rb
  226 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/input_stream.rb
  227 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/output_stream.rb
  228 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/decompressor.rb
  229 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/compressor.rb
  230 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/null_decompressor.rb
  231 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/null_compressor.rb
  232 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/null_input_stream.rb
  233 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/pass_thru_compressor.rb
  234 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/pass_thru_decompressor.rb
  235 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/crypto/encryption.rb
  236 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/crypto/null_encryption.rb
  237 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/crypto/traditional_encryption.rb
  238 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/inflater.rb
  239 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/deflater.rb
  240 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/streamable_stream.rb
  241 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/streamable_directory.rb
  242 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/constants.rb
  243 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip/errors.rb
  244 /usr/local/lib/ruby/gems/2.3/gems/rubyzip-1.2.0/lib/zip.rb
  245 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml_ruby.so
  246 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/error.rb
  247 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/parser.rb
  248 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/document.rb
  249 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/namespaces.rb
  250 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/namespace.rb
  251 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/node.rb
  252 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/ns.rb
  253 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/attributes.rb
  254 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/attr.rb
  255 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/attr_decl.rb
  256 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/tree.rb
  257 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/reader.rb
  258 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/html_parser.rb
  259 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/sax_parser.rb
  260 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/sax_callbacks.rb
  261 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/xpath_object.rb
  262 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/schema.rb
  263 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/schema/type.rb
  264 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/schema/element.rb
  265 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/schema/attribute.rb
  266 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml/properties.rb
  267 /usr/local/lib/ruby/gems/2.3/gems/libxml-ruby-2.9.0/lib/libxml.rb
  268 /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/workbook.rb
  269 /usr/local/lib/ruby/gems/2.3/gems/andand-1.3.3/lib/andand.rb
  270 /home/vtamara/tmp/rspreadsheet/lib/helpers/class_extensions.rb
  271 /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/xml_tied.rb
  272 /usr/local/lib/ruby/2.3/x86_64-openbsd/bigdecimal.so
  273 /usr/local/lib/ruby/2.3/bigdecimal/util.rb
  274 /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/cell.rb
  275 /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/row.rb
  276 /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/column.rb
  277 /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/tools.rb
  278 /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet/worksheet.rb
  279 /home/vtamara/tmp/rspreadsheet/lib/helpers/configuration.rb
  280 /home/vtamara/tmp/rspreadsheet/lib/rspreadsheet.rb
  281 /usr/local/lib/ruby/gems/2.3/gems/byebug-9.0.5/lib/byebug/attacher.rb
  282 /usr/local/lib/ruby/gems/2.3/gems/byebug-9.0.5/lib/byebug.rb

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

Abort trap (core dumped)

Make ignoring negative coordinates optional/configurable.

Currently Worksheet#cells return nil when coordinates are negative (or zero). Some people might prefer some kind of warning or even exception raised. This should be configurable. Maybe this is more general and some other corner cases may be turned into exceptions or warnings.

Regression: Spreadsheets manipulated by rspreadsheet 0.3 and 0.4.1 cannot be opened with Excel (2013, 2016)

The spreadsheets generated with rspreadsheet 0.2.14 could be opened with Excel {2013,2016}.

I created a minimal project that shows the problem:
https://github.com/vtamara/prob-excel-rspreadsheet03

The error presented by Excel 2016:

When trying to open a file min2.ods, generated with rspreadsheet 0.3 (and 0.4.1), from a file min.ods that can be opened with Excel.

There is no problem opening min2.ods with LibreOffice, just with Excel.

I understand it is not a bug in rspreadsheet, but possibly in Excel, however IMHO it will be easier to fix in rspreadsheet than in Excel.

So your help to restore the functionality of rspreadsheet 0.2.14 of writing ODS files that can be opened with Excel will be very much appreciated.

Inspiration for API improvements

Have you considering to make an API similar to Google Spreadsheet API. Obviously they have API targeted specifically to JavaScript and you would need to adopted it to Ruby and all it's power, but anyway it would be nice to borrow some ideas from them.

Do we use `x.worksheet` or just `x.sheet`

What the method for accessing worksheets should be?

@book.worksheet(1)

or just

@book.sheet(1)

Brief research:

  • zdavatz/spreadsheet uses x.worksheet
  • roo uses x.sheet
  • rubiod does not use anything, because it accesses everything using "brief" syntax
  • https://en.wikipedia.org/wiki/Spreadsheet uses worksheet, but sais that just sheet is used as well.

Note 1: This is somehow orthogonal to issue #10, so there are 4 options - sheet, sheets. worksheet, worksheets
Note 2: We can use both.

libxml-ruby dependency not identified by `gem install` on Alpine and Void Linux

$: cat Dockerfile 
FROM ruby:2.5.3-alpine3.8

RUN gem install --explain rspreadsheet

$: docker build -t rspreadsheet $PWD
Sending build context to Docker daemon  5.632kB
Step 1/2 : FROM ruby:2.5.3-alpine3.8
 ---> 5af0a1466a27
Step 2/2 : RUN gem install --explain rspreadsheet
 ---> Running in a0ac0a390e90
Gems to install:
  rubyzip-1.2.2
  andand-1.3.3
  rspreadsheet-0.4.5
Removing intermediate container a0ac0a390e90
 ---> eb09f5b6a689
Successfully built eb09f5b6a689
Successfully tagged rspreadsheet:latest

Charts in source .ods file cause an error when trying to save.

I have a simple spreadsheet with a simple chart. I'm trying to copy the .ods file, add some data, and save. This yields the following error:

/home/aidan/.local/share/gem/ruby/3.0.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/workbook.rb:140:in `block (2 levels) in update_manifest_xml': This should not happen (RuntimeError)
        from /home/aidan/.local/share/gem/ruby/3.0.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/workbook.rb:131:in `each'
        from /home/aidan/.local/share/gem/ruby/3.0.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/workbook.rb:131:in `block in update_manifest_xml'
        from /home/aidan/.local/share/gem/ruby/3.0.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/workbook.rb:130:in `each'
        from /home/aidan/.local/share/gem/ruby/3.0.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/workbook.rb:130:in `update_manifest_xml'
        from /home/aidan/.local/share/gem/ruby/3.0.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/workbook.rb:117:in `update_zip_manifest_and_content_xml'
        from /home/aidan/.local/share/gem/ruby/3.0.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/workbook.rb:76:in `block in save'
        from /home/aidan/.local/share/gem/ruby/3.0.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/tools.rb:200:in `block in output_to_zip_stream'
        from /home/aidan/.local/share/gem/ruby/3.0.0/gems/rubyzip-2.3.2/lib/zip/file.rb:125:in `open'
        from /home/aidan/.local/share/gem/ruby/3.0.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/tools.rb:199:in `output_to_zip_stream'
        from /home/aidan/.local/share/gem/ruby/3.0.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/workbook.rb:75:in `save'
        from /home/aidan/.local/share/gem/ruby/3.0.0/gems/rspreadsheet-0.5.3/lib/rspreadsheet/workbook.rb:82:in `save'

In my limited testing, it seems that having any chart at all in the file causes an error. I understand that this gem isn't actively maintained, but some help with this would be appreciated.

-Aidan

libxml gem not installed automatically on windows

I have tried to use the gem under windows and althought libxml is not installed natively I get error

C:/Users/jatesins/AppData/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require': cannot load such file -- libxml (LoadError)

even after

gem install libxml-ruby

I still get the same. This at least should be explained in DOCS.

Sometimes some Times break the script ;)

In effort to make the gem fool proofed after introduction of Time handling I have found some cases when spreadsheet prepared in LibreOffice makes rspreadsheet break. Here are the cases found so far.

  1. If you put in a date manually into cell and than change it to time only via formatting dialog, than it breaks the script. The thing is that LibreOffice stores "secretly" the date part even tought it has been converted to time cell.
  2. Also the nonexistence of pure DameOfDay in ruby makes things difficult, because if a time like 2:22 is in the cell and you just say, sheet.A2 = sheet.A1 the question if whether to copy over the date part, or do what Time.parse does i.e. extend it by todays date. Both approaches have something wrong with them.
  3. Another thing is that assigning time to a cell currently makes it of :unknown type, but this is easily fixed.

Please report other cases how to break it so test suite can be extended and solution found.

Access to document octet string outside of ::Rspreadsheet::Workbook class without file creation.

Use case

It is quite common that libraries are used in web frameworks. This is exactly my case and I suppose that many other people are doing the same.

In context of web framework it is not really efficient to create file on server then read it and afterwards delete. What I would like to do is to create document and instead of storing it to the file receive it in binary string which I can then write to file, store in network storage or send it directly to browser with response (and appropriate header).

Consider borders with style none nonexistant?

This is strange issue and I wonder what is your opinion on that.

In OpenDocument format a border can either not exist at all OR exist with style set to none.

I did not found any clue on what is the difference between these two. Now the (rather philosophical) question is what the following code should return (@cell contains a Cell object):

@cell.border_right.style = 'dotted'
@cell.border_right.width = '3pt'
@cell.border_right.color = '#112233'
p @cell.border_right.color    # => '#112233'
@cell.border_right.style = 'none'
p @cell.border_right.color    # => ??????

the color is remebered in the code but the border is nonexistant. Should it return nil or '#112233'?

Formulas processing.

I have not find any examples of work with formulas in spreadsheet. Is it possible to do with that library at all?

If not it would be a good extension to it ;)

Unclear how to set cell number format for date etc.

When setting a cell value to a DateTime object sheet[current_row, 1] = DateTime.parse(date), the cell shows just a numerical value in LibreOffice. I could not find any documentation on how to set the number format for a cell to date. Is there any example or links where to find documentation on this?

Manipulation of a spreadsheet randomly crashes application with "Bus error"

In OpenBSD/adJ 6.0 with ruby 2.40 and libxml-ruby 2.9.0, running bundle exec rspec sometimes produces Bus error. Trace is long, it uses to include:

-- Control frame information -----------------------------------------------
c:0027 p:---- s:0152 e:000151 CFUNC  :to_str
c:0026 p:---- s:0149 e:000148 CFUNC  :to_s
c:0025 p:0010 s:0145 e:000144 METHOD /usr/local/lib/ruby/gems/2.4/gems/did_you_mean-1.1.0/lib/did_you_mean/core_ext/name_error.rb:10 [FINISH]
c:0024 p:---- s:0139 e:000138 CFUNC  :inspect
c:0023 p:0046 s:0135 e:000133 METHOD /var/www/bundler/ruby/2.4/gems/rspec-expectations-2.99.2/lib/rspec/matchers/built_in/raise_error.rb:122

I see the same kind of errors in the CI at travis, for example:

https://travis-ci.org/gorn/rspreadsheet/jobs/214028477

Running rspec seems to me that produce a bus error every one of three attempts.

Images

For the last part of my project, I needed to insert an image. Adding an image requires modifying several files inside the ods archive, more than just content.xml. I found randym/axlsx supports image insertion, but I wasn't able to make sense of enough of their code (their project is builder-only).

In the end, I made a template ods with a placeholder image of fixed format, dimensions, etc. Then I monkey patched a new save method to overwrite the image while when saving the zip.

# definitely a hack, but it worked for me
    def initialize
      @book = Rspreadsheet.open 'template/path.ods'
      @sheet = @book.worksheets 1

      def @book.save_with_image fname, b64image
        FileUtils.cp @filename, fname
        Zip::File.open(fname) do |zip|
          # it is easy, because @xmlnode in in sync with contents all the time
          zip.get_output_stream('content.xml') do |f|
            f.write @content_xml.to_s(:indent => false)
          end
          if b64image
            index = b64image.index 'base64,'
            b64image = b64image[(index+7)..-1] if index
            zip.get_output_stream('Pictures/1000020100000524000000FF5BDFEF915A06D909.png') do |f|
              f.write Base64.decode64(b64image)
            end
          end
        end
      end

The output_stream filename was manually discovered by inspection of content.xml, or by unpacking the ods archive.

If image support is as complex as I suspect it might be, it might be nice to have an API to manually (over)write files into the archive, to band-aid this feature.

Working with Time

I was looking into setting a Time (without a date) value into a sheet. I couldn't find an example of this, so I set a time using a desktop app, and attempted to read it back (to ultimately figure out how to set it), and received an exception.

irb(main):005:0> sheet.C7
RuntimeError: Unknown type at [7, 3] from <table:table-cell table:style-name="ce13" office:value-type="time" office:time-value="PT02H00M00S" calcext:value-type="time">
  <text:p>2:00</text:p>
</table:table-cell> / children size=1 / type=time
  from /Users/xx/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rspreadsheet-0.2.15/lib/rspreadsheet/cell.rb:156:in `guess_cell_type'
  from /Users/xx/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rspreadsheet-0.2.15/lib/rspreadsheet/cell.rb:55:in `value'
  from /Users/xx/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rspreadsheet-0.2.15/lib/rspreadsheet/worksheet.rb:104:in `method_missing'
  from (irb):5
  from /Users/xx/.rbenv/versions/2.3.3/bin/irb:11:in `<main>'

Monkey patching...

I have looked into the code of library and saw that library monkey patched two classes: LibXML::XML::Node and Array.

In general monkey patching should be considered as code smell and all major libraries, like rspec, shoulda-matchers, rom try to reduce it nowadays or eliminate at all.
I suppose that it would be good to make refactoring library to eliminate them or at least use refinements to localize scope of messing other libraries.

IMHO, modification of other libraries classes by monkey patching them could lead to bugs and very nasty side effects. @gorn what's you POV on that?

Anything I can do to speedup?

I am trying to read a spreadsheet which contains about 8k rows and 50 columns. What I am doing right now is:

sheet.used_rows_range.each do |row_id|
    (1..50).each do |col_id|
        value = sheet.cells(row_id, col_id).value
        # do something with value
    end
end

it cost almost 1 hour to finish the reading. Anything I can do to speedup?

Unable to install under Windows

This could take a while...
ERROR: Error installing rspreadsheet:
ERROR: Failed to build gem native extension.

C:/Ruby21/bin/ruby.exe extconf.rb --without-zlib                                 

checking for socket() in -lsocket... no
checking for gethostbyname() in -lnsl... no
checking for atan() in -lm... yes
checking for inflate() in -lfalse... no
checking for inflate() in -lzlib... no
checking for inflate() in -lzlib1... no
checking for inflate() in -llibz... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.

Provided configuration options:
--with-opt-dir
extconf failure: need zlib

extconf failed, exit code 1

Gem files will remain installed in C:/Ruby21/lib/ruby/gems/2.1.0/gems/libxml-ruby-2.8.0 for inspection.
Results logged to C:/Ruby21/lib/ruby/gems/2.1.0/extensions/x86-mingw32/2.1.0/libxml-ruby-2.8.0/gem_make.out

_____ Troed with Ruby 1.9 and 2.1* to latest .. why is this

honestly am very very very very frus*

Been searching so many options so many things

is this only for non-windows ?
With and without zlib both i tried

Size does not ignore formatted cells without content

Seet the pull request #52 by @jglauche.

If I understand it correctly some software (which one?) saves fows with the last item beeing something like this: <table:table-cell table:number-columns-repeated="1024"/>. In the current implementation this leads to row.size include this and return number bigger than 1024, which is not probably what user expects.

Does this happens with rows as well? Can @jglauche please give more details on this issue?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.