excelToJson_vietnam.py 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. #!/usr/bin/env python
  2. # coding: utf-8
  3. import os.path
  4. import sys
  5. import codecs
  6. import xlrd
  7. import shutil
  8. ZONE = "vietnam"
  9. excelDir = ".\策划脚本"
  10. excelDir=unicode(excelDir,'utf8')
  11. jsonDir = ".\json"
  12. jsonDir=unicode(jsonDir,'utf8')
  13. dictDir = ".\dict"+"\\" +ZONE
  14. dictDir = unicode(dictDir,'utf8')
  15. translatedFile = dictDir + '\\translated.xls'
  16. g_objName=""
  17. transDict = {}
  18. unTransDict = {}
  19. def isContainChinese(check_str):
  20. for ch in check_str.decode('utf-8'):
  21. if u'\u4e00' <= ch <= u'\u9fff':
  22. return True
  23. return False
  24. def loadTranslatedDict():
  25. data = xlrd.open_workbook(translatedFile)
  26. print "Begin loadTranslatedDict : " + translatedFile
  27. for table in data.sheets():
  28. print " sheet : " + table.name
  29. try:
  30. nrows = table.nrows
  31. ncols = table.ncols
  32. if nrows <= 3:
  33. return
  34. for r in range(nrows):
  35. if ncols<2:
  36. continue
  37. key = str(table.cell_value(r,0)).strip()
  38. val = str(table.cell_value(r,1)).strip()
  39. if len(key)>0 and len(val)>0 :
  40. transDict[key] = val
  41. except Exception,e:
  42. print Exception,":",e
  43. os.system('pause')
  44. print "loadTranslatedDict OK"
  45. return
  46. def logUntranslatedStr(lgFile):
  47. if len(unTransDict) > 0 :
  48. lgFile.write(u"\r\n")
  49. print "================Warning!!! Can't find in dictionary, please check log file excelToJson.txt ========================="
  50. for key in unTransDict.keys():
  51. print key
  52. lgFile.write(key)
  53. lgFile.write(u"\r\n")
  54. print "================Warning!!! Can't find in dictionary, please check log file excelToJson.txt ========================="
  55. return
  56. def NumberToString (aFloat):
  57. strTemp = str(aFloat)
  58. if len(strTemp) == 0:
  59. return '0';
  60. if type(aFloat) != float:
  61. print strTemp + u" - 数字类型格式错误"
  62. os.system("pause")
  63. return ""
  64. strList = strTemp.split(".")
  65. if len(strList) == 1 :
  66. return strTemp
  67. else:
  68. if strList[1] == "0" :
  69. return strList[0]
  70. else:
  71. print g_objName + " : " + strTemp + u" - 类型是否应该改为FLOAT"
  72. os.system("pause")
  73. def FloatToString (aFloat):
  74. strTemp = str(aFloat)
  75. if len(strTemp) == 0:
  76. return '0';
  77. if type(aFloat) != float:
  78. print strTemp + u" - 数字类型格式错误"
  79. os.system("pause")
  80. return ""
  81. strList = strTemp.split(".")
  82. if len(strList) == 1 :
  83. return strTemp
  84. else:
  85. if strList[1] == "0" :
  86. return strList[0]
  87. else:
  88. return strTemp
  89. def StringToString (aStr):
  90. try:
  91. if type(aStr) != float:
  92. return str(aStr)
  93. strTemp = str(aStr)
  94. strList = strTemp.split(".")
  95. except Exception,e:
  96. print Exception,":",e
  97. if len(strList) == 1 :
  98. return strTemp
  99. else:
  100. if strList[1] == "0" :
  101. return strList[0]
  102. else:
  103. return strTemp
  104. def haveNext(table, col, row, max_cols):
  105. for c in range(col, max_cols):
  106. objType = str(table.cell_value(row, c));
  107. if(objType.find("@") == -1):
  108. return 1
  109. return 0
  110. def table2json(table, jsonfilename):
  111. nrows = table.nrows
  112. ncols = table.ncols
  113. if nrows <= 3:
  114. return
  115. f = codecs.open(jsonfilename,"w","utf-8")
  116. f.write(u"[\n")
  117. for r in range(nrows):
  118. # if r == 2:
  119. # continue
  120. f.write(u"\t[ ")
  121. for c in range(ncols):
  122. strCellValue = u""
  123. colName = str(table.cell_value(0,c))
  124. objName = str(table.cell_value(1,c))
  125. objType = str(table.cell_value(2,c))
  126. objStr = table.cell_value(r,c)
  127. if(objName.find("@") >= 0):
  128. continue
  129. if r <= 2:
  130. strCellValue = u"\"" + objStr + u"\""
  131. else:
  132. if cmp(objType, "NUMBER") == 0:
  133. strCellValue = NumberToString(objStr)
  134. elif cmp(objType, "FLOAT") == 0:
  135. strCellValue = FloatToString(objStr)
  136. else:
  137. sheetName = table.name.lower()
  138. if(sheetName!='blackword' and sheetName!='prefix' and sheetName!='suffix' and colName.find("@")<0 and objType.find("@")<0):
  139. keyStr = str(objStr).strip()
  140. if isContainChinese(keyStr) :
  141. if transDict.has_key(keyStr):
  142. objStr = transDict.get(keyStr)
  143. else:
  144. unTransDict[keyStr] = ""
  145. strvalue = StringToString(objStr).strip();
  146. strvalue = "".join(strvalue.split("\n"))
  147. strCellValue = u"\"" + strvalue.replace("\\", "\\\\") + u"\""
  148. if c < ncols-1:
  149. isNext = haveNext(table, c+1, 1, ncols)
  150. if isNext != 0:
  151. strCellValue += u", "
  152. f.write(strCellValue)
  153. f.write(u" ]")
  154. if r <= 1 or (r == 2 and nrows > 3) or (r > 2 and r < nrows-1):
  155. f.write(u",")
  156. f.write(u"\n")
  157. f.write(u"]")
  158. f.close()
  159. print "Create ",jsonfilename," OK"
  160. return
  161. def excelToJson(excelFileName,lgFile):
  162. print 'begin trans excel:' + excelFileName
  163. lgFile.write('Excel dir:' + excelFileName)
  164. lgFile.write(u"\r\n")
  165. names = excelFileName.split('\\')
  166. xlsName = names[len(names) - 1].split(".")[0]
  167. if len(names) > 2 :
  168. xlsName = names[len(names) - 2] + "\\" + xlsName
  169. childDir = os.path.join(jsonDir, xlsName)
  170. if not os.path.exists(childDir) :
  171. os.makedirs(childDir)
  172. data = xlrd.open_workbook(excelFileName)
  173. for table in data.sheets():
  174. print "sheet : " + table.name
  175. lgFile.write('\t'+'sheetCO : ' + table.name)
  176. lgFile.write(u"\r\n")
  177. if (not table.name.lower().startswith('config')) and (not table.name.lower().startswith('sheet')) and (not table.name.lower().startswith('remark')) and (not table.name.lower().startswith('(')):
  178. destfilename = os.path.join(jsonDir, xlsName + "\\" + table.name + ".json")
  179. try:
  180. table2json(table,destfilename)
  181. except Exception,e:
  182. print Exception,":",e
  183. os.system('pause')
  184. print "All OK"
  185. if __name__ == '__main__':
  186. reload(sys)
  187. sys.setdefaultencoding( "utf-8" )
  188. if os.path.isdir(jsonDir):
  189. shutil.rmtree(jsonDir)
  190. os.mkdir(jsonDir)
  191. print excelDir
  192. try:
  193. if os.path.exists(translatedFile):
  194. loadTranslatedDict()
  195. else:
  196. print "Can't find dict file: " + translatedFile
  197. os.system('pause')
  198. lgFile = codecs.open('excelToJson.txt',"w","utf-8")
  199. for parent,dirnames,filenames in os.walk(excelDir):
  200. for filename in filenames:
  201. if not filename.startswith("~$"):
  202. sufix = os.path.splitext(filename)[1][1:]
  203. # print('sufix:' + sufix);
  204. if sufix == 'xls' or sufix == 'xlsx':
  205. print 'filename : ' + filename
  206. excelFileName = os.path.join(parent, filename)
  207. excelToJson(excelFileName,lgFile)
  208. lgFile.write('==========================All OK==================')
  209. logUntranslatedStr(lgFile)
  210. lgFile.close()
  211. except Exception,e:
  212. print Exception,":",e
  213. # os.system('pause')