util.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. # -*- coding: UTF-8 -*-
  2. import xml.etree.ElementTree as ET
  3. import re
  4. import os
  5. XMLSS = '{urn:schemas-microsoft-com:office:spreadsheet}'
  6. FLOAT_re = re.compile(r'^-?\d+(\.\d+)?$')
  7. empty_re = re.compile(r'^\s*$')
  8. Type_commont = XMLSS +'Comment'
  9. def GetValue (s,cell):
  10. if cell.text != None:
  11. s+=cell.text
  12. if len(cell._children) == 0:
  13. return s
  14. l = [GetValue("",cs) for cs in cell._children if cs.tag != Type_commont ]
  15. for a in l:
  16. s+=a
  17. # return GetValue(s,cell[0])
  18. return s
  19. def FloatToString (aFloat):
  20. strTemp = str(aFloat)
  21. if aFloat == None or empty_re.match(aFloat) != None:
  22. return '0';
  23. if FLOAT_re.match(aFloat) == None:
  24. print aFloat + u" - 数字类型格式错误"
  25. return False
  26. strList = strTemp.split(".")
  27. if len(strList) == 1 :
  28. return strTemp
  29. else:
  30. if strList[1] == "0" :
  31. return strList[0]
  32. else:
  33. return strTemp
  34. def NumberToString (aFloat):
  35. ret = FloatToString(aFloat)
  36. if ret == False:
  37. return False
  38. return str(int(float(ret)))
  39. def haveNext(table, col, row, max_cols):
  40. for c in range(col, max_cols):
  41. objType = str(table.cell_value(row, c));
  42. if(objType.find("@") == -1):
  43. return 1
  44. return 0
  45. def int2index(idx):
  46. pos = chr(idx % 26 + 65)
  47. if idx > 25:
  48. a = int(idx / 26-1)
  49. pos = int2index(a)+pos
  50. return pos
  51. def StringToString (aStr):
  52. if type(aStr) != float:
  53. return str(aStr)
  54. strTemp = str(aStr)
  55. strList = strTemp.split(".")
  56. if len(strList) == 1 :
  57. return strTemp
  58. else:
  59. if strList[1] == "0" :
  60. return strList[0]
  61. else:
  62. return strTemp
  63. class Sheet(object):
  64. def __init__(self,sheet):
  65. self.sheet=sheet
  66. self.name=sheet.get(XMLSS+'Name')
  67. self.rows = [r for r in sheet.find(XMLSS+'Table').findall(XMLSS+'Row') if
  68. len(r._children) > 0 and any([c.find(XMLSS+'Data') != None for c in r._children]) ]
  69. self.nrows=len(self.rows)
  70. if self.nrows > 0:
  71. self.ncols=len(self.rows[0]._children)
  72. def cell_value(self,r,c):
  73. if c >= len(self.rows[r]):
  74. return ""
  75. cell = self.rows[r][c]
  76. if cell == None:
  77. return ""
  78. idx = cell.get(XMLSS+'Index')
  79. if idx != None:
  80. idx=int(idx)
  81. if idx-1 != c:
  82. self.rows[r].insert(c,None)
  83. return ""
  84. if cell.find(XMLSS+'Data') == None:
  85. return ""
  86. return GetValue("",self.rows[r][c])
  87. def exception():
  88. os.system('pause')
  89. exit(1)
  90. def openxml(file):
  91. sheets = ET.parse(file).getroot().findall(XMLSS+'Worksheet')
  92. return [ Sheet(s) for s in sheets ]