genel bakış
Orijinal gönderiden neredeyse 10 yıl sonra Excel, CSV dosyalarını içe aktarmada ilerleme kaydetmedi. Ancak, HTML tablolarını içe aktarmanın çok daha iyi olduğunu buldum. Dolayısıyla, CSV'yi HTML'ye dönüştürmek ve ardından ortaya çıkan HTML'yi Excel'e aktarmak için Python kullanılabilir.
Bu yaklaşımın avantajları şunlardır: (a) güvenilir bir şekilde çalışır, (b) verilerinizi üçüncü taraf bir hizmete göndermeniz gerekmez (ör. Google sayfaları), (c) ekstra "katı" kurulum gerekmez (LibreOffice, Sayılar vb.) Çoğu kullanıcı için, (d) CR / LF karakterleri ve BOM işaretçileriyle uğraşmaktan daha yüksek düzeyde, (e) yerel ayarlarla uğraşmaya gerek yok.
adımlar
Aşağıdaki adımlar, Python 3 kurulu olduğu sürece herhangi bir bash benzeri kabukta çalıştırılabilir. Python, CSV'yi doğrudan okumak için kullanılabilse de, csvkit , JSON'a bir ara dönüştürme yapmak için kullanılır. Bu, Python kodumuzdaki CSV karmaşıklıkları ile uğraşmaktan kaçınmamızı sağlar.
İlk önce aşağıdaki komut dosyasını kaydedin json2html.py
. Komut dosyası, stdin'den bir JSON dosyasını okur ve bunu bir HTML tablosu olarak döker:
#!/usr/bin/env python3
import sys, json, html
if __name__ == '__main__':
header_emitted = False
make_th = lambda s: "<th>%s</th>" % (html.escape(s if s else ""))
make_td = lambda s: "<td>%s</td>" % (html.escape(s if s else ""))
make_tr = lambda l, make_cell: "<tr>%s</tr>" % ( "".join([make_cell(v) for v in l]) )
print("<html><body>\n<table>")
for line in json.load(sys.stdin):
lk, lv = zip(*line.items())
if not header_emitted:
print(make_tr(lk, make_th))
header_emitted = True
print(make_tr(lv, make_td))
print("</table\n</body></html>")
Ardından, sanal bir ortama csvkit kurun csvjson
ve girdi dosyasını betiğimize beslemek için kullanın . Bağımsız -I
değişkenle hücre türü tahminini devre dışı bırakmak iyi bir fikirdir :
$ virtualenv -p python3 pyenv
$ . ./pyenv/bin/activate
$ pip install csvkit
$ csvjson -I input.csv | python3 json2html.py > output.html
Artık output.html
Excel'de içe aktarılabilir. Hücrelerdeki satır sonları korunmuş olacaktır.
İsteğe bağlı olarak, Python sanal ortamınızı temizlemek isteyebilirsiniz:
$ deactivate
$ rm -rf pyenv