import openpyxl as xlsx import asyncio class CBObject: def __init__(self,name): self.tbl = name self.sql = '' async def handle(self,dic): names = ','.join(dic.keys()) vs = ["'%s'"%v if type(v)==type('') else str(v) for v in dic.values() ] values = ','.join(vs) self.sql = "insert into " + self.tbl + \ " (" + names + ") values (" + \ values + ");" print(self.sql) typesconv = { "int":int, "float":float, "str":str, } async def loadData(ws,callback): names = [] types = [] for i,r in enumerate(ws.rows): if i==0: for j,c in enumerate(r): nt = c.value.split(':') if len(nt) < 2: nt.append('') n,t = nt names.append(n) types.append(t) else: dic = {} for j,c in enumerate(r): tf = typesconv.get(types[j],None) v = c.value if tf is not None: v = tf(v) dic[names[j]] = v await callback(dic) async def excel2db(xlsxfile): wb = xlsx.load_workbook(xlsxfile) for name in wb.sheetnames: ws = wb[name] cbobj = CBObject(name) await loadData(ws,cbobj.handle) if __name__ == '__main__': import sys if len(sys.argv) < 2: print('%s xlsxfile' % sys.argv[0]) sys.exit(1) loop = asyncio.get_event_loop() loop.run_until_complete(excel2db(sys.argv[1]))