Skip to content

Instantly share code, notes, and snippets.

@juniorfoo
Created January 10, 2018 17:47
Show Gist options
  • Save juniorfoo/873076cdfc8fe98797bd8f8cd304d2dc to your computer and use it in GitHub Desktop.
Save juniorfoo/873076cdfc8fe98797bd8f8cd304d2dc to your computer and use it in GitHub Desktop.

Revisions

  1. juniorfoo created this gist Jan 10, 2018.
    49 changes: 49 additions & 0 deletions excel2csv.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,49 @@
    #!/usr/bin/env python

    # export data sheets from xlsx to csv

    from openpyxl import load_workbook
    import csv
    from os import sys

    def get_all_sheets(excel_file):
    sheets = []
    workbook = load_workbook(excel_file,use_iterators=True,data_only=True)
    all_worksheets = workbook.get_sheet_names()
    for worksheet_name in all_worksheets:
    sheets.append(worksheet_name)
    return sheets

    def csv_from_excel(excel_file, sheets):
    workbook = load_workbook(excel_file,data_only=True)
    for worksheet_name in sheets:
    print("Export " + worksheet_name + " ...")

    try:
    worksheet = workbook.get_sheet_by_name(worksheet_name)
    except KeyError:
    print("Could not find " + worksheet_name)
    sys.exit(1)

    your_csv_file = open(''.join([worksheet_name,'.csv']), 'wb')
    wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
    for row in worksheet.iter_rows():
    lrow = []
    for cell in row:
    lrow.append(cell.value)
    #wr.writerow(lrow)
    wr.writerow([unicode(s).encode("utf-8") for s in lrow])
    print(" ... done")
    your_csv_file.close()

    if not 2 <= len(sys.argv) <= 3:
    print("Call with " + sys.argv[0] + " <xlxs file> [comma separated list of sheets to export]")
    sys.exit(1)
    else:
    sheets = []
    if len(sys.argv) == 3:
    sheets = list(sys.argv[2].split(','))
    else:
    sheets = get_all_sheets(sys.argv[1])
    assert(sheets != None and len(sheets) > 0)
    csv_from_excel(sys.argv[1], sheets)