PythonでCSVファイルをExcelに変換する

PyhtonでExcelファイルのシートをCSVに出力する」の逆です。

# coding: utf-8

import sys
import os
import csv

import openpyxl as px
from openpyxl.utils.cell import coordinate_from_string, column_index_from_string
from openpyxl.utils import get_column_letter, column_index_from_string

def main():

    args = sys.argv

    exf = ''
    csvf = ''
    sheet = ''
    add = 'A1'

    if len(args) < 2:
        print ('USAGE : csv2excel -csv CSVFILE -excel EXCELFILE -sheet SHEETNAME [-address A1]')
        sys.exit()

    for i in range(len(args)):
        if args[i] == '-excel':
            exf = args[i+1]
        if args[i] == '-csv':
            csvf = args[i+1]
        if args[i] == '-sheet':
            sheet = args[i+1]
        if args[i] == '-address':
            add = args[i+1]

    csvfilepath = os.path.abspath(csvf)
    if os.path.exists(csvfilepath) == False:
        print ('!!!ERROR!!! CSV FILE', csvf , ' is not found')
        sys.exit()

    if exf == '':
        exf = csvf + '.xlsx'
    if sheet == '':
        [sheet,ext] = os.path.splitext(csvf)

    exfilepath = os.path.abspath(exf)
    if os.path.exists(exfilepath) == False:
        bk = px.Workbook()
        sh = bk.active
        sh.title = sheet
    else:
        bk = px.load_workbook(exfilepath)
        flg = 0
        for sh in bk.sheetnames:
            if sh == sheet:
                flg = 1
                break
        if flg == 0:
            sh = bk.create_sheet(title=sheet)
        else:
            sh = bk[sheet]

    a = coordinate_from_string(add)
    startrow = a[1]
    startcol = column_index_from_string(a[0])

    print ('CSVFILE   : ', csvfilepath)
    print ('EXCELFILE : ', exfilepath)
    print ('SHEETNAME : ', sheet)
    print ('ADDRESS   : ', add ,"(",startrow,",",startcol,")")

    with open(csvfilepath) as fp:
        reader = csv.reader(fp, delimiter=',')
        irow = startrow
        for row in reader:
            icol = startcol
            for v in row:
                if str.isnumeric(v):
                    sh.cell(irow,icol).value = float(v)
                else:
                    sh.cell(irow,icol).value = v
                icol +=1
            irow += 1

    bk.save(exfilepath)

    print ('FINISHED')

if __name__ == '__main__':
    main()

PyhtonでExcelファイルのシートをCSVに出力する

openpyxlを使用したCSV出力プログラムです。

# coding: utf-8

import sys
import os
import csv

import openpyxl as px

def main():

    args = sys.argv
    exf = ''
    csvf = ''
    sheet = ''

    if len(args) < 2:
        print ('USAGE : excel2csv -excel EXCELFILE -csv CSVFILE -sheet SHEETNAME')
        sys.exit()
 
    for i in range(len(args)):
        if args[i] == '-excel':
            exf = args[i+1]
        if args[i] == '-csv':
            csvf = args[i+1]
        if args[i] == '-sheet':
            sheet = args[i+1]
  
    exfilepath = os.path.abspath(exf)

    if os.path.exists(exfilepath) == False:
        print ('!!!ERROR!!! EXCEL FILE', exf , ' is not found')
        sys.exit()

    bk = px.load_workbook(exfilepath, read_only=True, keep_vba=False)

    flg = 0
    for sh in bk.sheetnames:
        if sh == sheet:
            flg = 1
            break
  
    if flg == 0:
        print ('!!!ERROR!!! SHEET NAME', sheet , ' is not found')
        sys.exit()

    if csvf == '':
        csvf = exfilepath + '.' + sheet + '.csv'
    else:
        csvf = os.path.dirname(exfilepath) + '/' + csvf

    print ('EXCELFILE : ',exfilepath)
    print ('SHEETNAME : ',sheet)
    print ('CSVFILE : ',csvf)

    ws = bk[sheet]

    with open(csvf, 'w', encoding='utf-8') as fp:
        writer = csv.writer(fp)
        for cols in ws.rows:
            writer.writerow([str(col.value or '') for col in cols])

    print ('FINISHED')

if __name__ == '__main__': 
    main()

exclcsv(Excel←→CSV相互変換)

exclcsvはExcelシートとCSVファイルを相互に変換するコマンドです。ClosedXMLを使用しており、Excelがインストールされていないサーバコンピュータなどでも動作します。

簡単なコマンドの例を以下に記載します。

exclcsv.exe -proc ex2csv -excel sample.xlsx –sheet sheet1 –csv sample.csv
「sample.xlsx」の「sheet1」シートを「sample.csv」に出力する
exclcsv.exe -proc csv2ex  –csv sample.csv -excel sample.xlsx –sheet sheet2
「sample.csv」を「sample.xlsx」の「sheet2」シートに出力する