main.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/tealeg/xlsx"
  6. "strings"
  7. )
  8. //
  9. //var origin_file = "C:\\Users\\tangs\\Desktop\\表1_教师招聘_国考合并_替换代码2\\表2_国考_20190322192526接受替换.xlsx"
  10. //var reference_file = "C:\\Users\\tangs\\Desktop\\表1_教师招聘_国考合并_替换代码2\\表1_国考_代号转换表.xlsx"
  11. //var result_file = "./result2.xlsx"
  12. //var origin_file = "C:\\Users\\tangs\\Desktop\\表1_教师招聘_国考合并_替换代码\\表2_招聘3-20180204145207_接受替换.xlsx"
  13. //var reference_file = "C:\\Users\\tangs\\Desktop\\表1_教师招聘_国考合并_替换代码\\表1_教师招聘_国考合并_替换代码.xlsx"
  14. //var result_file = "./result.xlsx"
  15. var origin_file = "C:\\Users\\tangs\\Desktop\\表1_教师招聘_国考合并_替换代码3\\表3_国考-招聘20190323155304标签3国考用招聘代号替换.xlsx"
  16. var reference_file = "C:\\Users\\tangs\\Desktop\\表1_教师招聘_国考合并_替换代码3\\表1_教师招聘_国考合并_替换代码.xlsx"
  17. var result_file = "./result3.xlsx"
  18. func compose_reference_file(reference_file string) map[string]map[string]string {
  19. r_f, err := xlsx.OpenFile(reference_file)
  20. if err != nil {
  21. panic(err)
  22. }
  23. var result = map[string]map[string]string{}
  24. sheet := r_f.Sheets[0]
  25. for row_index, row := range sheet.Rows {
  26. if row_index == 0 {
  27. continue
  28. }
  29. var key = ""
  30. for cell_index, cell := range row.Cells {
  31. value := strings.TrimSpace(cell.Value)
  32. value = strings.Replace(value, "—", "-", -1)
  33. //value = strings.Replace(value, ",", ",", -1)
  34. if cell_index == 0 {
  35. key = value
  36. if _, ok := result[key]; !ok {
  37. result[key] = map[string]string{}
  38. }
  39. continue
  40. }
  41. if cell_index == 1 {
  42. result[key]["first"] = value
  43. continue
  44. }
  45. if cell_index == 2 {
  46. result[key]["second"] = value
  47. continue
  48. }
  49. }
  50. }
  51. return result
  52. }
  53. func compose_reference_file2(reference_file string) map[string]string {
  54. o_f, err := xlsx.OpenFile(reference_file)
  55. if err != nil {
  56. panic(err)
  57. }
  58. sheet := o_f.Sheets[0]
  59. var result = map[string]string{}
  60. for row_index, row := range sheet.Rows {
  61. if row_index == 0 {
  62. continue
  63. }
  64. var key = ""
  65. //fmt.Println("first", row.Cells[0].Value, row.Cells[1].Value)
  66. for cell_index, cell := range row.Cells {
  67. value := strings.TrimSpace(cell.Value)
  68. if cell_index == 0 {
  69. fmt.Println("key ---- " + value)
  70. key = value
  71. continue
  72. }
  73. if cell_index == 1 {
  74. fmt.Println("keeeey --- " + key + " --- " + value)
  75. result[key] = value
  76. }
  77. }
  78. }
  79. return result
  80. }
  81. func swap(origin_file, reference_file string) {
  82. //
  83. reference := compose_reference_file(reference_file)
  84. //reference := compose_reference_file2(reference_file)
  85. bys, _ := json.Marshal(reference)
  86. fmt.Println(string(bys))
  87. o_f, err := xlsx.OpenFile(origin_file)
  88. if err != nil {
  89. panic(err)
  90. }
  91. sheet := o_f.Sheets[0]
  92. for row_index, row := range sheet.Rows {
  93. if row_index == 0 {
  94. continue
  95. }
  96. for cell_index, cell := range row.Cells {
  97. if cell_index != 9 {
  98. continue
  99. }
  100. value := strings.TrimSpace(cell.Value)
  101. value = strings.Replace(value, "—", "-", -1)
  102. value = strings.Replace(value, ",", ",", -1)
  103. new_value := value
  104. new_value = real_swap(value, reference, true)
  105. new_value = real_swap(new_value, reference, false)
  106. //new_value = real_swap2(value, reference)
  107. fmt.Println(new_value)
  108. cell.Value = new_value
  109. }
  110. }
  111. err = o_f.Save(result_file)
  112. if err != nil {
  113. panic(err)
  114. }
  115. }
  116. func real_swap2(value string, reference map[string]string) string {
  117. multi := strings.Split(value, ",")
  118. temp_value := ""
  119. for _, single_value := range multi {
  120. ref, ok := reference[single_value]
  121. if !ok {
  122. temp_value = temp_value + single_value + ","
  123. continue
  124. }
  125. temp_value = temp_value + ref + ","
  126. }
  127. return strings.TrimSuffix(temp_value, ",")
  128. }
  129. func real_swap(value string, reference map[string]map[string]string, is_log bool) string {
  130. multi := strings.Split(value, ",")
  131. swap_value := value
  132. temp_value := ""
  133. for _, single_value := range multi {
  134. ref, ok := reference[single_value]
  135. if !ok {
  136. if is_log {
  137. fmt.Println(single_value + "===" + value)
  138. }
  139. single_value = add_prefix_zero(single_value)
  140. temp_value = temp_value + single_value + ","
  141. continue
  142. }
  143. if reference[single_value]["second"] != "" {
  144. temp_value = temp_value + ref["second"] + ","
  145. continue
  146. }
  147. if reference[single_value]["first"] != "" {
  148. temp_value = temp_value + ref["first"] + ","
  149. continue
  150. }
  151. }
  152. if temp_value != "" {
  153. swap_value = strings.TrimSuffix(temp_value, ",")
  154. }
  155. return swap_value
  156. }
  157. func add_prefix_zero(value string) string {
  158. multi := strings.Split(value, "-")
  159. var first = ""
  160. var second = ""
  161. var last = ""
  162. if len(multi) == 2 {
  163. first = multi[0]
  164. second = multi[1]
  165. if len(first) == 2 {
  166. first = "0" + first
  167. }
  168. if len(first) == 1 {
  169. first = "00" + first
  170. }
  171. if len(second) == 1 {
  172. second = "0" + second
  173. }
  174. if len(second) == 0 {
  175. second = "00" + second
  176. }
  177. last = first + "-" + second
  178. } else if len(multi) == 1 {
  179. if strings.Index(value, "-") > 0 {
  180. first = multi[0]
  181. if len(first) == 2 {
  182. first = "0" + first
  183. }
  184. if len(first) == 1 {
  185. first = "00" + first
  186. }
  187. last = first + "-00"
  188. }
  189. } else {
  190. last = value
  191. }
  192. return last
  193. }
  194. func check_reference_file(reference_file string) {
  195. r_f, err := xlsx.OpenFile(reference_file)
  196. if err != nil {
  197. panic(err)
  198. }
  199. sheet := r_f.Sheets[0]
  200. var mark = map[string]int{}
  201. var length = 0
  202. for index, row := range sheet.Rows {
  203. if index == 0 {
  204. continue
  205. }
  206. for cell_index, cell := range row.Cells {
  207. if cell_index != 0 {
  208. break
  209. }
  210. value := strings.TrimSpace(cell.Value)
  211. if value == "" {
  212. continue
  213. }
  214. length++
  215. mark[value] = mark[value] + 1
  216. }
  217. }
  218. fmt.Printf("xlsx length: %v, mark length: %v", length, len(mark))
  219. for k, v := range mark {
  220. if v > 1 {
  221. fmt.Println(k, v)
  222. }
  223. }
  224. }
  225. func main() {
  226. // check data in reference_file
  227. check_reference_file(reference_file)
  228. swap(origin_file, reference_file)
  229. }