O OpenOffice vem com o programa unoconv para realizar conversões de formato na linha de comando.
unoconv -f csv filename.xlsx
Para requisitos mais complexos, você pode analisar arquivos XLSX com Spreadsheet::XLSX
em Perl ou openpyxl
em Python. Por exemplo, aqui está um script rápido para imprimir uma planilha como um arquivo CSV separado por ponto-e-vírgula (aviso: não testado, digitado diretamente no navegador):
perl -MSpreadsheet::XLSX -e '
$\ = "\n"; $, = ";";
my $workbook = Spreadsheet::XLSX->new()->parse($ARGV[0]);
my $worksheet = ($workbook->worksheets())[0];
my ($row_min, $row_max) = $worksheet->row_range();
my ($col_min, $col_max) = $worksheet->col_range();
for my $row ($row_min..$row_max) {
print map {$worksheet->get_cell($row,$_)->value()} ($col_min..$col_max);
}
' filename.xlsx >filename.csv