main.go 5.6 KB

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