main.go 4.0 KB

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