I want to know if there is a Linux tool or a script available to convert .xlsx
file to .txt
.
-
2Not a very clear question to be honest. What do you have in the file? Just data? Or are there charts, macros, etc. as well?– ZaidOct 20, 2010 at 8: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 tinyurl.com/2vbb7m5– Noufal IbrahimOct 20, 2010 at 8:56
-
1something like wizard.ae.krakow.pl/~jb/xls2txt , but for xlsx– AnonymousOct 20, 2010 at 8:57
7 Answers
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. Oct 20, 2010 at 18:51
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.
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.
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
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
.
-
In my version of LibreOffice (on Mac) it's
scalc
instead oflibreoffice
. Jan 3, 2018 at 12:10 -
Not command line, but OpenOffice can read .xslx files and save as csv. Its probably already on your Linux machine.