Muszę przekonwertować wszystkie arkusze jednego pliku .xls / .xlsx na plik .csv. Zostanie to wykonane we wszystkich plikach .xls we wszystkich katalogach i podkatalogach (rekurencyjnie).
Krok 1 : Przenieś nazwy arkuszy wszystkich plików .xls do pliku .csv, używając:
for file in $(find . -name '*.xls' -o -name '*.xlsx');do in2csv -n "$file" > ${file%.xls}-sheetnames-list.csv; done
filename-sheetnames-list.csv
może działać jako lista:
sheetname1
sheetname2
sheetname3
Krok 2 : Kod do konwersji określonego arkusza na plik .csv przy użyciu in2csv to:
in2csv --sheet "SHEETNAME" filename.xls > filename-SHEETNAME.csv
Jak mogę uzyskać każdą nazwę arkusza w .xls / x i napisać każdy arkusz osobno dla wszystkich katalogów zawierających .xls / x?
in2csv --write-sheets "-" filename.xls > filename-sheet1.csv filename-sheet2.csv ....
daje wynik tylko na arkusz1.csv, nie jestem pewien, jak uzyskać z tego wszystkie arkusze.
command-line
csv
xls
csheth
źródło
źródło
find
każdy.xls{,x}
i pętla nad każdym arkuszu przy użyciu-exec
?Odpowiedzi:
Możesz po prostu umieścić pętlę w innej pętli.
Aby uniknąć błędów, nie używaj
for
zfind
wynikami.źródło
.xls
in2csv --write-sheets "-" filename.xls > sheetname.csv
daje tylko pierwszy arkusz. Nie wiem, jakie dodatkowe informacje dodać, aby napisać wszystkie arkusze. To da nam wskazówki do poprawienia twojego kodu.pip install csvkit -U
. Myślę, że sposób, w jaki to działa, nie jest tym, co lubisz, dzięki prostemu skryptowi z 1. opcji masz więcej sposobów kontrolowania danych wyjściowych i nazw plików itp.--write-sheets
Być może możesz ustawić tę alternatywną opcję jako inną odpowiedź ... Akceptuję wtedy pierwszą opcję jako odpowiedź. Dzięki @RoVoPomijanie znajdowania i używania bash:
źródło
filename-{}.csv
nie zawierają danych. Jestem nowicjuszem i nie mogę znaleźć błędu, edytując skrypt i czytając. Trochę pomocy?xargs
. Poprawiony, teraz nie tak elegancki.xargs
i>
jest zły :-P. Dlatego wolę inną pętlę, jest mniej podatna na błędy.Wersja csvkit> 1.0.2 ma wbudowaną funkcję zapisywania wszystkich arkuszy:
Więc możesz spróbować:
Uwaga:
To wydaje się nie działać w 100% zgodnie z oczekiwaniami. Ale warto spróbować, a ponieważ jest to pierwsza wersja z tą opcją, być może w przyszłych wersjach implementacja jest lepsza / łatwiejsza.
źródło
Użyj
Gnumeric
:aby uzyskać jeden
csv
plik na arkusz.źródło