123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- # -*- 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()
|