【python】excel読み込み | ツール・シミュレータ

ツール・シミュレータ

ツール・シミュレータ等のプログラミングをネタとしてブログ。

# -*- coding:utf-8 -*-

import sys
import os.path
import openpyxl
from typing import List,NoReturn,Dict


def allsheet2d(exlfile:str) -> Dict[str,List[List[str]]]:
    __filecheck(exlfile)
    res:Dict[str,List[List[str]]] = {}
    wb = openpyxl.load_workbook(exlfile,data_only=True)
    for name in wb.sheetnames:
        res[name] = __sheet2d(wb,name)
    wb.close()
    return res

def sheet2d(exlfile:str,sheetname:str) -> List[List[str]]:
    res = None
    wb = openpyxl.load_workbook(exlfile,data_only=True)
    if sheetname in wb.sheetnames:
        res = __sheet2d(wb,sheetname)
    else:
        raise NameError('sheetname not found:' + sheetname)
    wb.close()
    return res

def __sheet2d(wb:openpyxl.Workbook,sheetname:str) -> List[List[str]]:
    sheet = wb[sheetname]
    res:List[List[str]] = []
    if sheet.max_row == 1 and sheet.max_column == 1:
        return res
    for r in range(1,sheet.max_row + 1):
        line = []
        for c in range(1,sheet.max_column + 1):
            crnt = sheet.cell(row=r,column=c).value
            line.append(str(crnt) if crnt != None else '')
        res.append(line)
    return res

def __filecheck(file:str) -> NoReturn:
    if not os.path.isfile(file):
        raise FileNotFoundError('file not found:' + file)

def __syserr(msg:str):
    print(msg)
    sys.exit(9)

if __name__ == '__main__':
    if len(sys.argv) != 2:
        __syserr('usage:python.exe input_excel')

    _,inexl = sys.argv
    if not os.path.isfile(inexl):
        __syserr('file not found:' + inexl)
    print(allsheet2d(inexl))