1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
RSpec.describe TalltyImportExport::Importable do
before do
class Test
include TalltyImportExport::Importable
class << self
def model_headers
[
{ key: 'name', name: '名称' },
{ key: 'code', name: '学号', convert: :handle_code },
{ key: 'sub_code', name: '副学号', convert: :skip },
{ key: 'meta1', name: 'meta字段1', json: :meta },
{ key: 'meta2', name: 'meta字段2', json: :meta },
{ key: 'sum', name: '累计值', convert: :handle_sum }, # 表格里 name 为 累加值
]
end
end
class Import
def import_record line_info, associations
associations << line_info
end
def handle_code code, processing_line_info, raw_line_info
"#{code}_#{raw_line_info[:sub_code]}"
end
def handle_sum num, processing_line_info, raw_line_info
context.last_line_info ? context.last_line_info['sum'] + num : num
end
end
end
end
it 'import file directly' do
# 名称 学号 副学号 meta字段1 meta字段2 累加值
# 1 20070101 1 meta1 metaA 1
# 2 20070102 2 meta2 metaB 2
# 3 20070103 3 meta3 metaC 3
# 4 20070104 4 meta4 metaD 4
# 5 20070105 5 meta5 metaE 5
@result = []
Test.import_xlsx('./spec/test1.xlsx', @result,
headers: [
{ key: 'name', name: '名称' },
{ key: 'code', name: '学号' },
{ key: 'sub_code', name: '副学号' },
{ key: 'meta1', name: 'meta字段1', json: :meta },
{ key: 'meta2', name: 'meta字段2', json: :meta },
{ key: 'sum', name: '累加值' },
]
)
expect(@result).to eq([
{"name"=>1, "code"=>"20070101_1", "sub_code"=>nil, "meta"=>{"meta1"=>"meta1", "meta2"=>"metaA" }, "sum" => 1 },
{"name"=>2, "code"=>"20070102_2", "sub_code"=>nil, "meta"=>{"meta1"=>"meta2", "meta2"=>"metaB" }, "sum" => 3 },
{"name"=>3, "code"=>"20070103_3", "sub_code"=>nil, "meta"=>{"meta1"=>"meta3", "meta2"=>"metaC" }, "sum" => 6 },
{"name"=>4, "code"=>"20070104_4", "sub_code"=>nil, "meta"=>{"meta1"=>"meta4", "meta2"=>"metaD" }, "sum" => 10 },
{"name"=>5, "code"=>"20070105_5", "sub_code"=>nil, "meta"=>{"meta1"=>"meta5", "meta2"=>"metaE" }, "sum" => 15 },
])
end
it 'import excel object' do
# 名称 学号 副学号 meta字段1 meta字段2 累加值
# 1 20070101 1 meta1 metaA 1
# 2 20070102 2 meta2 metaB 2
# 3 20070103 3 meta3 metaC 3
# 4 20070104 4 meta4 metaD 4
# 5 20070105 5 meta5 metaE 5
@result = []
@excel = TalltyImportExport::Excel.new
@excel.load('./spec/test1.xlsx')
Test.import_xlsx(@excel, @result,
headers: [
{ key: 'name', name: '名称' },
{ key: 'code', name: '学号' },
{ key: 'sub_code', name: '副学号' },
{ key: 'meta1', name: 'meta字段1', json: :meta },
{ key: 'meta2', name: 'meta字段2', json: :meta },
{ key: 'sum', name: '累加值' },
]
)
expect(@result).to eq([
{"name"=>1, "code"=>"20070101_1", "sub_code"=>nil, "meta"=>{"meta1"=>"meta1", "meta2"=>"metaA" }, "sum" => 1 },
{"name"=>2, "code"=>"20070102_2", "sub_code"=>nil, "meta"=>{"meta1"=>"meta2", "meta2"=>"metaB" }, "sum" => 3 },
{"name"=>3, "code"=>"20070103_3", "sub_code"=>nil, "meta"=>{"meta1"=>"meta3", "meta2"=>"metaC" }, "sum" => 6 },
{"name"=>4, "code"=>"20070104_4", "sub_code"=>nil, "meta"=>{"meta1"=>"meta4", "meta2"=>"metaD" }, "sum" => 10 },
{"name"=>5, "code"=>"20070105_5", "sub_code"=>nil, "meta"=>{"meta1"=>"meta5", "meta2"=>"metaE" }, "sum" => 15 },
])
end
it 'import data' do
@result = []
@data = [
{ '名称' => 1, '学号' => '20070101', '副学号' => 1, 'meta字段1' => 'meta1', 'meta字段2' => 'metaA', '累加值' => 1 },
{ '名称' => 2, '学号' => '20070102', '副学号' => 2, 'meta字段1' => 'meta2', 'meta字段2' => 'metaB', '累加值' => 2 },
{ '名称' => 3, '学号' => '20070103', '副学号' => 3, 'meta字段1' => 'meta3', 'meta字段2' => 'metaC', '累加值' => 3 },
{ '名称' => 4, '学号' => '20070104', '副学号' => 4, 'meta字段1' => 'meta4', 'meta字段2' => 'metaD', '累加值' => 4 },
{ '名称' => 5, '学号' => '20070105', '副学号' => 5, 'meta字段1' => 'meta5', 'meta字段2' => 'metaE', '累加值' => 5 },
]
Test.import_data(@data, @result)
expect(@result).to eq([
{"name"=>1, "code"=>"20070101_1", "sub_code"=>nil, "meta"=>{"meta1"=>"meta1", "meta2"=>"metaA" }},
{"name"=>2, "code"=>"20070102_2", "sub_code"=>nil, "meta"=>{"meta1"=>"meta2", "meta2"=>"metaB" }},
{"name"=>3, "code"=>"20070103_3", "sub_code"=>nil, "meta"=>{"meta1"=>"meta3", "meta2"=>"metaC" }},
{"name"=>4, "code"=>"20070104_4", "sub_code"=>nil, "meta"=>{"meta1"=>"meta4", "meta2"=>"metaD" }},
{"name"=>5, "code"=>"20070105_5", "sub_code"=>nil, "meta"=>{"meta1"=>"meta5", "meta2"=>"metaE" }},
])
end
end