# How get data from xls document?

**URL:** <https://www.ruby-forum.com/t/how-get-data-from-xls-document/50441>\
**Category:** Ruby\
**Created:** [December 16, 2005, 11:30am UTC](https://www.ruby-forum.com/t/how-get-data-from-xls-document/50441 "2005-12-16T11:30:33Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![keal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/2bfe46/32.png) [@keal](https://www.ruby-forum.com/u/keal)\
**Post date:** [December 16, 2005, 11:30am UTC](https://www.ruby-forum.com/t/how-get-data-from-xls-document/50441/1 "2005-12-16T11:30:33Z")

</div>

how get data from excel document (\*.xls) without using win32ole?

---

<div class="post-metadata">

**Author:** ![keal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/2bfe46/32.png) [@keal](https://www.ruby-forum.com/u/keal)\
**Post date:** [December 16, 2005, 2:59pm UTC](https://www.ruby-forum.com/t/how-get-data-from-xls-document/50441/2 "2005-12-16T14:59:43Z")

</div>

I used matlab. In my case the mac version could only read documents  
with a few sheets, the pc version could read a large number of sheets.

I realize that is not a ruby solution, but I did not find one when I  
looked, except for the win32ole based one.

---

<div class="post-metadata">

**Author:** ![keal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/2bfe46/32.png) [@keal](https://www.ruby-forum.com/u/keal)\
**Post date:** [December 16, 2005, 4:33pm UTC](https://www.ruby-forum.com/t/how-get-data-from-xls-document/50441/3 "2005-12-16T16:33:09Z")

</div>

keal wrote:

> how get data from excel document (\*.xls) without using win32ole?
> 
> –  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

Haven’t done it, google for  
CSV, ODBC, ADO, …  
I don’t like XML that MS OFfice tools kick otu, but that’s an option  
also.

---

<div class="post-metadata">

**Author:** ![keal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/2bfe46/32.png) [@keal](https://www.ruby-forum.com/u/keal)\
**Post date:** [December 16, 2005, 4:40pm UTC](https://www.ruby-forum.com/t/how-get-data-from-xls-document/50441/4 "2005-12-16T16:40:41Z")

</div>

i need library which can work in freeBSD, not in win32

---

<div class="post-metadata">

**Author:** ![keal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/2bfe46/32.png) [@keal](https://www.ruby-forum.com/u/keal)\
**Post date:** [December 16, 2005, 7:41pm UTC](https://www.ruby-forum.com/t/how-get-data-from-xls-document/50441/5 "2005-12-16T19:41:38Z")

</div>

keal wrote:

> i need library which can work in freeBSD, not in win32

[http://jakarta.apache.org/poi/poi-ruby.html](http://jakarta.apache.org/poi/poi-ruby.html)

cheers

Christer

---

<div class="post-metadata">

**Author:** ![keal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/2bfe46/32.png) [@keal](https://www.ruby-forum.com/u/keal)\
**Post date:** [December 17, 2005, 8:31pm UTC](https://www.ruby-forum.com/t/how-get-data-from-xls-document/50441/6 "2005-12-17T20:31:13Z")

</div>

keal wrote:

> how get data from excel document (\*.xls) without using win32ole?

Keal,

I ported Vadim Tkachenko’s PHP Excel Reader to Ruby (most of the way).  
It still has some bugs with certain field types I think (like formulas).  
I just needed it to read a plain excel data file and dump out a  
tab-delimited file. It works well for that.

The example.rb file can receive a file name and a delimiter and it will  
dump a delimited text file to stdout: ruby example.rb test.xls

Download here:

[http://www.eparklabs.com/media/excel.tar.bz2](http://www.eparklabs.com/media/excel.tar.bz2)

This tar file includes the original PHP code for reference.

Please provide any fixes that you make. It is pretty much a straight  
port from PHP. It has not been very well “Rubified”.

Here is a usage example:

* * *

require ‘reader’

data = OLE::Excel::Reader.new  
data.set\_output\_encoding(‘CP1251’)  
data.read(“test.xls”)  
delimiter = “\t”

## for i in (1…data.sheets[0][‘num\_rows’]) puts (1…data.sheets[0][‘num\_cols’]).collect{|j| begin data.sheets[0][‘cells’][i][j] rescue ‘’ end }.join(delimiter) end

Thanks,

Dan

---

<div class="post-metadata">

**Author:** ![keal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/2bfe46/32.png) [@keal](https://www.ruby-forum.com/u/keal)\
**Post date:** [December 19, 2005, 11:23am UTC](https://www.ruby-forum.com/t/how-get-data-from-xls-document/50441/7 "2005-12-19T11:23:03Z")

</div>

thanks everyone

---

<div class="post-metadata">

**Author:** ![keal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/2bfe46/32.png) [@keal](https://www.ruby-forum.com/u/keal)\
**Post date:** [December 18, 2005, 3:23am UTC](https://www.ruby-forum.com/t/how-get-data-from-xls-document/50441/8 "2005-12-18T03:23:26Z")

</div>

You could also try to port perl’s excellent Spreadsheet::ParseExcel  
module.

---

<div class="post-metadata">

**Author:** ![keal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/2bfe46/32.png) [@keal](https://www.ruby-forum.com/u/keal)\
**Post date:** [January 19, 2006, 5:25am UTC](https://www.ruby-forum.com/t/how-get-data-from-xls-document/50441/9 "2006-01-19T05:25:52Z")

</div>

Hey, This is very useful 🙂 What other output encodings are available.

“…# Set output Encoding.  
data.set\_output\_encoding(‘CP1251’)…”

On Fri, 16 Dec 2005 19:30:46 +0900
