Pesquisar texto em vários arquivos do Excel (xls) no Linux

1

Estou usando o Ubuntu Linux e não consigo encontrar uma maneira de encontrar um texto em vários arquivos do Excel ( xls ). Meu desejo é fazer isso por linha de comando, mas outras alternativas são bem-vindas também.

    
por Dherik 12.01.2017 / 15:34

3 respostas

1

Eu fiz um usando a ferramenta ssconvert (do Gnumeric). Você precisa instalar o Gnumeric primeiro:

sudo apt-get install gnumeric

Você pode salvar o conteúdo como script e chamar:

./script-find-in-xls.sh text

O conteúdo do script.

#!/bin/sh

# $1 - text to find

if [ -z "$1" ]
  then
    echo 'Please, the text is mandatory'
    exit 1
fi

rm -rf /tmp/xls-csv/
mkdir /tmp/xls-csv/

cd /tmp/xls-csv/
cp /location/of/excel-files/*.xls /tmp/xls-csv/

for f in *.xls; do
    ssconvert -S --import-encoding=ISO8859-1 ./"$f" ./"${f%.xls}.csv"
done

cat *.csv.* > all-xls-content.txt
rm *.csv.*

if cat all-xls-content.txt | egrep --color $1; then
    echo 'found'
else
    echo 'not found'
fi

O script converte todos os arquivos xls em arquivos csv, associa os arquivos csv em um único arquivo e usa o egrep para localizar o texto.

O código não é perfeito, mas faça o trabalho.

    
por 12.01.2017 / 16:30
1

Se você está certo em instalar um aplicativo de indexação, pode ser uma resposta.

Eu pessoalmente uso o recoll , que é fácil de configurar e instalar. Sua interface de padrões é uma GUI, mas também é possível usá-la na CLI:

recoll -q <search terms>

Você pode configurar uma tarefa agendada para atualizar seu índice ou iniciá-la manualmente com recollindex (em ambos os casos, você pode restringir o índice ao caminho de suas escolhas).

    
por 13.01.2017 / 16:50
0

Eu tive o mesmo problema. Execute este script:

python search.py /home/user/directory string

Aqui você encontra minha solução:

#!/usr/bin/python

import os, sys
import xlrd

def find(path, word):

    l = []

    d = os.listdir(path)

    for file in d:

        filename = str(path) +'/' + str(file)

        print ('Finding in %s' %file)

        if filename.endswith('.xlsx'):

            wb = xlrd.open_workbook(filename)
            ws = wb.sheet_by_index(0)

            for i, row in enumerate(range(ws.nrows)):
                for j, col in enumerate(range(ws.ncols)):
                    if str(word) in str(ws.cell_value(i, j)):
                        l.append((file,row,col))
    if l:
        print ('Word %s found %d times in:' %(word,len(l)))

        for fn, row, col in l:
            print ('File: %s, row: %s ,column: %s' %(fn,row,col))        
    else:
        print ('Word %s not found' %word) 


if __name__ == "__main__":
    try:
        find (sys.argv[1],sys.argv[2])
    except IndexError:
        print('\tExecute: python searchpy <path> <word>')
        print('\tEg: python searchpy /home/user/files/ Fox')

Você pode usar o Github: searb-in-xlsx

    
por 26.12.2017 / 23:05