10

I want to know if there is a Linux tool or a script available to convert .xlsx file to .txt.

studiohack
  • 13,468
  • 19
  • 88
  • 118
user53032
  • 101
  • 1
  • 1
  • 3
  • 2
    Not a very clear question to be honest. What do you have in the file? Just data? Or are there charts, macros, etc. as well? –  Oct 20 '10 at 08:42
  • There are lots of them available online. xlsx is a proprietary (and a relatively new) format so the effectiveness of open source tools will be limited I think. Try http://tinyurl.com/2vbb7m5 – Noufal Ibrahim Oct 20 '10 at 08:56
  • 1
    something like http://wizard.ae.krakow.pl/~jb/xls2txt/ , but for xlsx –  Oct 20 '10 at 08:57

7 Answers7

10

The ssconvert tool that comes with Gnumeric can convert xlsx files to text:

ssconvert Book1.xlsx file.csv
jmcnamara
  • 201
  • 2
  • 4
9

Another way is rename it as .zip and unzip it as all the .***x files are just zipped folders containing xml. Inside you will find a folder "xl" with a subfolder "worksheets", inside is an xml file for each worksheet. The format of them is pretty simple and should be easy to parse with any of the xml packages.

  • 4
    +1 interesting. I'm looking at these XML files now, and at least in this case it is more complicated than you imply -- sheet1.xml doesn't have any actual text in, but seems to refer to another XML file called sharedStrings.xml, which is where the "content" of the file is stored. – handsofaten Oct 20 '10 at 18:51
4

If it's just textual/numerical data (which I have to assume it is, otherwise a text file would be a bit ambitious), then you could try xlsx2csv to generate CSV files from your spreadsheets.

I can't vouch for its effectiveness, but it's worth a try.

Andy
  • 141
  • 3
3

I do not know about a tool in linux, but you can use Google Docs.

You upload the spreadsheet there and you can then export it as txt.

2

Not a shell script, (unlike the script mentioned in Andy's post from Oct 20 '10 at 8:44), but a python script:

with the same name, xlsx2csv

This exports date values as floats though:

2012/07/01 => 41091,

"2012/07/01 01:00:00" => 41091.0416666667

xlsx2csv.py --help 
Usage: xlsx2csv.py [options] infile [outfile]

Options:
  --version             show program's version number and exit


     -h, --help            show this help message and exit
      -s SHEETID, --sheet=SHEETID
                            sheet no to convert (0 for all sheets)
      -d DELIMITER, --delimiter=DELIMITER
                            delimiter - csv columns delimiter, 'tab' or 'x09' for
                            tab (comma is default)
      -p SHEETDELIMITER, --sheetdelimiter=SHEETDELIMITER
                            sheets delimiter used to separate sheets, pass '' if
                            you don't want delimiters (default '--------')
      -f DATEFORMAT, --dateformat=DATEFORMAT
                            override date/time format (ex. %Y/%m/%d)
      -i, --ignoreempty     skip empty lines
      -r, --recursive       convert recursively
knb
  • 155
  • 7
2

I used the command below to convert all my xlsx files in the current directory (must have Libre Office installed):

for i   in *.xlsx; do  libreoffice --headless --convert-to csv "$i" ; done

Libreoffice is really good to read Excel and write CSVs. See if your executable isn't called scalc.

neves
  • 469
  • 2
  • 6
  • 12
1

Not command line, but OpenOffice can read .xslx files and save as csv. Its probably already on your Linux machine.

Rich Homolka
  • 31,057
  • 6
  • 55
  • 80