Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.54 KB | None | 0 0
  1. import os
  2. import os.path
  3. import sys
  4. import xml.etree.ElementTree as XETree
  5. from openpyxl import load_workbook
  6. import shutil
  7.  
  8. sourceExcel = None
  9. destExcel = None
  10.  
  11.  
  12. def extractForTable(cfgItem):
  13. endrow = 0
  14. beginrow = 0
  15. # sheet_names = sourceExcel.get_sheet_names()
  16. sheet = sourceExcel["Sheet1"]
  17.  
  18. # sheet_names = destExcel.get_sheet_names()
  19. destSheet = destExcel["Sheet1"]
  20. # 判断在源文件中的起始行
  21. tempcell = findStr(sheet, cfgItem[0].attrib["anchor"], 1)
  22. beginrow = tempcell.row + int(cfgItem[0].attrib["skiprows"]) + 1
  23.  
  24. destBeginRow = int(cfgItem[1].attrib["beginrow"])
  25. # 判断结束行
  26. # 如果范围已经确定,直接确定结束行
  27. if cfgItem[0].attrib["range"] != "":
  28. endrow = beginrow + int(cfgItem[0].attrib["range"]) - 1
  29. else:
  30. # 范围不确定,根据下一行字符确定结束行
  31. if cfgItem[0].attrib["anchorend"] != "":
  32. endrow = findStr(sheet, cfgItem[0].attrib["anchorend"], beginrow).row
  33. else:
  34. # 差找不到字符,则直到最后一个不为空行的为止
  35. limited = 1
  36. while sheet["A" + str(beginrow + limited)].value != "" and sheet["A" + str(beginrow + limited)].value is not None:
  37. limited += 1
  38. endrow = beginrow + limited - 1
  39. sList = cfgItem[0].attrib["cols"].split(',')
  40. dList = cfgItem[1].attrib["cols"].split(',')
  41.  
  42. # 粘贴数据
  43. for row in range(beginrow, endrow + 1):
  44. for col in range(0, len(sList)):
  45. destSheet[dList[col] + str(destBeginRow + row - beginrow)].value = sheet[sList[col] + str(row)].value
  46.  
  47.  
  48. def findStr(sheet, str, startRow):
  49. for row in sheet.iter_rows(min_row=startRow):
  50. for cell in row:
  51. if cell.value is not None and cell.value != "":
  52. if str in cell.value:
  53. return cell
  54.  
  55.  
  56. def extractForKeyValue(cfgItem):
  57. print('KeyValue')
  58.  
  59.  
  60. def selectType(cfgItems):
  61. for i in range(len(cfgItems)):
  62. cfgItem = cfgItems[i]
  63. istable = cfgItem.attrib['istable'].lower()
  64. if istable == 'true':
  65. extractForTable(cfgItem)
  66. else:
  67. extractForKeyValue(cfgItem)
  68.  
  69.  
  70. def main():
  71. global DATANOTFOUND
  72. global cdfp
  73. global clws
  74. global cwb
  75. global writeLog
  76. global sourceExcel
  77. global destExcel
  78. config_xml = r'''
  79. <mapping input="C:\Users\HHH\Documents\和享2016年第一期个人消费贷款资产证券化信托受托机构报告2016年第2期总第2期.xlsx"
  80. output = "C:\Users\HHH\Documents\HHH\和享2016年第一期个人消费贷款资产证券化信托受托机构报告2016年第2期总第2期.xlsx"
  81. template="C:\Users\HHH\Documents\HHH\受托报告导入模板.xlsx" writelog="0">
  82.  
  83. <item desc="资产池整体表现情况" istable="true" keyword = "资产池整体表现情况">
  84. <source anchor="资产池整体表现情况" skiprows="1" range = "7" anchorend="" cols="A,B,C,D,E" > </source>
  85. <dest limited="7" beginrow="24" cols="A,B,C,D,E"></dest>
  86. </item>
  87. <item desc="证券分层" istable="true" keyword = "证券分层">
  88. <source anchor="各档次证券的本金、" skiprows="1" range = "" anchorend="" cols="C,D,E" > </source>
  89. <dest limited="12" beginrow="8" cols="C,D,F"></dest>
  90. </item>
  91. <item desc="证券分层" istable="true" keyword = "证券分层">
  92. <source anchor="利息还款情况(续)" skiprows="1" range = "" anchorend="" cols="C" > </source>
  93. <dest limited="12" beginrow="8" cols="E"></dest>
  94. </item>
  95. <item desc="资产池现金流归集表" istable="true" keyword = "资产池现金流归集表">
  96. <source anchor="资产池现金流归集表" skiprows="1" range = "" anchorend="" cols="A,B,C,D" > </source>
  97. <dest limited="431" beginrow="35" cols="A,B,C,D"></dest>
  98. </item>
  99. <item desc="累计违约率" istable="true" keyword = "累计违约率">
  100. <source anchor="资产池情况 (四)累计违约率" skiprows="1" range = "" anchorend="" cols="C" > </source>
  101. <dest limited="421" beginrow="24" cols="V"></dest>
  102. </item>
  103. <item desc="入池资产户數与金额特征" istable="true" keyword = "入池资产户數与金额特征">
  104. <source anchor="入池资产户數与金额特征" skiprows="1" range = "5" anchorend="入池资产期限特征" cols="B,C,D" > </source>
  105. <dest limited="5" beginrow="24" cols="P,Q,R"></dest>
  106. </item>
  107. <item desc="入池资产期限特征" istable="true" keyword = "入池资产期限特征">
  108. <source anchor="入池资产期限特征" skiprows="1" range = "5" anchorend="入池资产期限特征" cols="B,C,D" > </source>
  109. <dest limited="5" beginrow="32" cols="P,Q,R"></dest>
  110. </item>
  111. <item desc="资产池情况" istable="false" >
  112. <source anchor="收 入 账;合计" cols="E" > </source>
  113. <dest cols = "M33" datatype ="F"></dest>
  114. </item>
  115. <item desc="资产池情况" istable="false" >
  116. <source anchor="本 金 账;合计" cols="E" > </source>
  117. <dest cols = "M43" datatype ="F"></dest>
  118. </item>
  119. <item desc="资产池情况" istable="false" >
  120. <source anchor="税费支 出;税收" cols="E" > </source>
  121. <dest cols = "M45" datatype ="F"></dest>
  122. </item>
  123. <item desc="资产池情况" istable="false" >
  124. <source anchor="税费支 出;服务总费用支出" cols="E" > </source>
  125. <dest cols = "M46" datatype ="F"></dest>
  126. </item>
  127. <item desc="资产池情况" istable="false" >
  128. <source anchor="税费支 出;其他费用支出" cols="E" > </source>
  129. <dest cols = "M47" datatype ="F"></dest>
  130. </item>
  131. <item desc="资产池情况" istable="false" >
  132. <source anchor="持续购买资产支出(注1)" cols="E" > </source>
  133. <dest cols = "M48" datatype ="F"></dest>
  134. </item>
  135. <item desc="资产池情况" istable="false" >
  136. <source anchor="转存下期本金" cols="E" > </source>
  137. <dest cols = "M49" datatype ="F"></dest>
  138. </item>
  139. <item desc="资产池情况" istable="false" >
  140. <source anchor="本 金 账;合计" cols="E" > </source>
  141. <dest cols = "M50" value = "0" datatype ="F"></dest>
  142. </item>
  143. </mapping>
  144. '''
  145. cfgRoot = XETree.fromstring(config_xml)
  146. input = cfgRoot.attrib['input']
  147. output = cfgRoot.attrib['output']
  148. templateFilePath = cfgRoot.attrib['template']
  149.  
  150. if os.path.exists(output):
  151. os.remove(output)
  152. shutil.copy(templateFilePath, output)
  153.  
  154. sourceExcel = load_workbook(input)
  155. destExcel = load_workbook(output)
  156.  
  157. selectType(cfgRoot)
  158. destExcel.save(output)
  159.  
  160.  
  161. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement