Я использую Ubuntu Linux и не могу найти способ найти текст в нескольких файлах excel (xls). Я хочу сделать это с помощью командной строки, но приветствуются и другие альтернативы.
3 ответа
Если вы согласны с установкой приложения для индексирования, это может быть ответом.
Я лично использую recoll, который прост в установке и установке. Его интерфейс по умолчанию является GUI, но также возможно использовать его в CLI:
recoll -q <search terms>
Вы можете настроить запланированное задание на обновление его индекса или запустить его вручную с помощью recollindex (в обоих случаях вы можете ограничить индекс выбранным вами путем).
Я сделал один с помощью инструмента ssconvert (из Gnumeric). Сначала вам нужно установить Gnumeric:
sudo apt-get install gnumeric
Вы можете сохранить контент как скрипт и вызвать:
./script-find-in-xls.sh text
Содержание сценария.
#!/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
Скрипт преобразует все файлы xls в файлы csv, объединяет файлы csv в один файл и использует egrep для поиска текста.
Код не идеален, но делай свою работу.
Я была такая же проблема. Запустите этот скрипт:
python search.py /home/user/directory string
Здесь вы найдете мое решение:
#!/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')
Вы можете вытащить из Github: searb-in-xlsx
