# -*- coding: UTF-8 -*- import os import os.path import sys import codecs import shutil import re from util import * lua_data_dir = "../lua/" excel_dir = "../策划脚本/".decode('utf-8') def table2lua(table,main_key, jsonfilename): con_array = [] uncon_array = [] nrows = table.nrows ncols = table.ncols if os.path.exists(jsonfilename): print 'error : ',jsonfilename,'already exist!' exception() f = codecs.open(jsonfilename,"w","utf-8") f.write(u"return {\n") if main_key != None and main_key != "": main_key = main_key.split("@") objNames = [] objTypes = [] for r in range(1,nrows): if r == 2: continue line = u"{" if r == 1: line = u"[\"_key_\"] = " + line main_key_list = [] for c in range(ncols): strCellValue = u"" if c>=len(objNames): objNames.append(str(table.cell_value(1,c))) objTypes.append(str(table.cell_value(2,c))) objName = objNames[c] objType = objTypes[c] objStr = table.cell_value(r,c) or "" if(objName.find("@") >= 0): continue if(len(objName) == 0): continue if len(con_array) > 0: check = False for it in con_array: if it == objName: check = True break if not check: continue elif len(uncon_array) > 0: check = True for it in uncon_array: if it == objName: check = False break if not check: continue if r == 0 or r == 1: if type(objStr) == float: firstCol = str(table.cell_value(r,0)) print 'Type Error: (row:%s,col:%s)' % (firstCol,objName) exception() strCellValue = u"\"" + objStr + u"\"" else: if cmp(objType, "NUMBER") == 0 or cmp(objType, "FLOAT") == 0: strCellValue = FloatToString(objStr) if strCellValue == False: print u"fail to read \t"+str(r+1)+":"+str(table.cell_value(r,1))+"\t"+int2index(c)+":"+str(table.cell_value(0,c)) exception() else: strvalue = StringToString(objStr).strip(); strvalue = "".join(strvalue.split("\n")) strCellValue = u"\"" + strvalue + u"\"" line = line + strCellValue if (main_key == None or main_key==""): main_key = [objName] if r > 1 and objName in main_key: if len(main_key_list) < len(main_key) : if main_key.index(objName) == 0: main_key_list = [strCellValue]+main_key_list else: main_key_list = main_key_list+[strCellValue] if len(main_key_list) == len(main_key) : # if [x for x in main_key_list if x!= 0 and x!="" ] == 0: # continue if len(main_key_list) > 1: line = u"[\"" + main_key_list[0]+"@"+main_key_list[1] + u"\"] = " + line else: line = u"[" + main_key_list[0]+ u"] = " + line line += u"," # if c < ncols-1: # isNext = haveNext(table, c+1, 1, ncols) # if isNext != 0: #f.write(strCellValue) line = line + u"}" f.write(line) if r>1 and len(main_key_list)==0: print "指定 键值不存在".decode('utf-8'),main_key[0],":",table.name f.close() exception() # f.write(u" }") # if r < nrows-1: # f.write(u",") # f.write(u"\n") f.write(u",\n") f.write(u"}") f.close() return def excelTolua(filename,sheets): print 'trans file:' ,filename data = openxml(excel_dir+filename) for table in data: if table.name not in sheets: continue print 'trans excel:' ,filename,table.name v = sheets[table.name] sheets[table.name]=None destfilename = os.path.join(lua_data_dir+v[1], table.name + ".lua") table2lua(table,v[0],destfilename) for (k,v) in sheets.items(): if v == None: continue print 'error : ',filename,k,'not exist!' exception() def tag2luaTable(tagname,taglist): ret = u"{" for name in taglist: v = u"\"" + tagname + u"." + name + u"\"," ret = ret + v ret = ret + u"}" return ret if __name__ == '__main__': reload(sys) sys.setdefaultencoding( "utf-8" ) if os.path.isdir(lua_data_dir): shutil.rmtree(lua_data_dir) os.mkdir(lua_data_dir) map_tag = dict() file = open("LuaConfig.txt") r = re.compile('(\t|\n|\r)') sheetMap = dict() while True: lines = file.readlines(1000) if not lines: break for line in lines: if line.startswith('#'): continue line = r.sub('',line) if line == "": continue x = line.split(':') if len(x)<2: print 'error:',line file.close() exception() if x[0] not in sheetMap: sheetMap[x[0]]=dict() if len(x) <3: sheetMap[x[0]][x[1]]=(None,"") elif len(x)<4: sheetMap[x[0]][x[1]]=(x[2],"") else: sheetMap[x[0]][x[1]]=(x[2],x[3]) tag_str = x[3] if tag_str != '': dir_str = os.path.join(lua_data_dir, tag_str) if not os.path.isdir(dir_str): os.mkdir(dir_str) map_tag[tag_str] = [] map_tag[tag_str].append(x[1]) file.close() for (k,v) in sheetMap.items(): excelTolua(k,v) if len(map_tag) > 0: mfilename = os.path.join(lua_data_dir, "_merge_.lua") f = codecs.open(mfilename,"w","utf-8") f.write(u"return {\n") for k,v in map_tag.items(): line = k + u" = " + tag2luaTable(k,v) + u",\n" f.write(line) f.write(u"}") f.close()