ภาพรวม
เกือบ 10 ปีหลังจากโพสต์ต้นฉบับ Excel ยังไม่ได้ปรับปรุงการนำเข้าไฟล์ CSV อย่างไรก็ตามฉันพบว่าการนำเข้าตาราง HTML ดีกว่ามาก ดังนั้นเราสามารถใช้ Python เพื่อแปลง CSV เป็น HTML จากนั้นนำเข้า HTML ที่เป็นผลลัพธ์ไปยัง Excel
ข้อดีของแนวทางนี้คือ (ก) ทำงานได้อย่างน่าเชื่อถือ (b) คุณไม่จำเป็นต้องส่งข้อมูลของคุณไปยังบริการของบุคคลที่สาม (เช่น Google ชีต) (c) ไม่จำเป็นต้องติดตั้ง "ไขมัน" เพิ่มเติม (LibreOffice, ตัวเลข ฯลฯ ) สำหรับผู้ใช้ส่วนใหญ่ (d) ระดับที่สูงกว่าการเข้าไปยุ่งกับอักขระ CR / LF และเครื่องหมาย BOM (e) ไม่จำเป็นต้องใช้การตั้งค่าสถานที่
ขั้นตอน
ขั้นตอนต่อไปนี้สามารถรันบนเชลล์แบบ bash ได้ตราบเท่าที่ติดตั้ง Python 3 แม้ว่า Python จะสามารถใช้เพื่ออ่าน CSV ได้โดยตรง แต่csvkitก็ถูกใช้เพื่อทำการแปลงกลางเป็น JSON สิ่งนี้ช่วยให้เราหลีกเลี่ยงไม่ต้องจัดการกับความซับซ้อนของ CSV ในโค้ด Python ของเรา
ขั้นแรกให้บันทึกสคริปต์ต่อไปนี้เป็นjson2html.py
ไฟล์. สคริปต์อ่านไฟล์ JSON จาก stdin และทิ้งเป็นตาราง HTML:
#!/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>")
จากนั้นติดตั้ง csvkit ในสภาพแวดล้อมเสมือนและใช้csvjson
เพื่อป้อนไฟล์อินพุตไปยังสคริปต์ของเรา เป็นความคิดที่ดีที่จะปิดการเดาประเภทเซลล์ด้วย-I
อาร์กิวเมนต์:
$ virtualenv -p python3 pyenv
$ . ./pyenv/bin/activate
$ pip install csvkit
$ csvjson -I input.csv | python3 json2html.py > output.html
ตอนนี้output.html
สามารถนำเข้าใน Excel การแบ่งบรรทัดในเซลล์จะถูกเก็บรักษาไว้
คุณอาจต้องการล้างสภาพแวดล้อมเสมือน Python ของคุณ:
$ deactivate
$ rm -rf pyenv