embulk-parser-poi_excel 0.1.11 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,6 +13,7 @@ import org.apache.poi.ss.usermodel.Row;
13
13
  import org.apache.poi.ss.usermodel.Sheet;
14
14
  import org.apache.poi.ss.usermodel.Workbook;
15
15
  import org.apache.poi.ss.util.CellRangeAddress;
16
+ import org.apache.poi.ss.util.CellReference;
16
17
  import org.embulk.parser.poi_excel.PoiExcelColumnValueType;
17
18
  import org.embulk.parser.poi_excel.PoiExcelParserPlugin.FormulaReplaceTask;
18
19
  import org.embulk.parser.poi_excel.bean.PoiExcelColumnBean;
@@ -159,7 +160,13 @@ public class PoiExcelCellValueVisitor {
159
160
  String regex = replace.getRegex();
160
161
  String replacement = replace.getTo();
161
162
 
162
- replacement = replacement.replace("${row}", Integer.toString(cell.getRowIndex() + 1));
163
+ if (replacement.contains("${row}")) {
164
+ replacement = replacement.replace("${row}", Integer.toString(cell.getRowIndex() + 1));
165
+ }
166
+ if (replacement.contains("${column}")) {
167
+ replacement = replacement.replace("${column}",
168
+ CellReference.convertNumToColString(cell.getColumnIndex() + 1));
169
+ }
163
170
 
164
171
  formula = formula.replaceAll(regex, replacement);
165
172
  }
@@ -4,11 +4,10 @@ import java.text.MessageFormat;
4
4
 
5
5
  import org.apache.poi.ss.usermodel.Cell;
6
6
  import org.apache.poi.ss.usermodel.CellType;
7
- import org.apache.poi.ss.usermodel.Row;
8
7
  import org.apache.poi.ss.usermodel.Sheet;
9
- import org.apache.poi.ss.util.CellReference;
10
8
  import org.embulk.parser.poi_excel.PoiExcelColumnValueType;
11
9
  import org.embulk.parser.poi_excel.bean.PoiExcelColumnBean;
10
+ import org.embulk.parser.poi_excel.bean.record.PoiExcelRecord;
12
11
  import org.embulk.parser.poi_excel.bean.util.PoiExcelCellAddress;
13
12
  import org.embulk.parser.poi_excel.visitor.embulk.CellVisitor;
14
13
  import org.embulk.spi.Column;
@@ -24,7 +23,7 @@ public class PoiExcelColumnVisitor implements ColumnVisitor {
24
23
  protected final PageBuilder pageBuilder;
25
24
  protected final PoiExcelVisitorFactory factory;
26
25
 
27
- protected Row currentRow;
26
+ protected PoiExcelRecord record;
28
27
 
29
28
  public PoiExcelColumnVisitor(PoiExcelVisitorValue visitorValue) {
30
29
  this.visitorValue = visitorValue;
@@ -32,8 +31,8 @@ public class PoiExcelColumnVisitor implements ColumnVisitor {
32
31
  this.factory = visitorValue.getVisitorFactory();
33
32
  }
34
33
 
35
- public void setRow(Row row) {
36
- this.currentRow = row;
34
+ public void setRecord(PoiExcelRecord record) {
35
+ this.record = record;
37
36
  }
38
37
 
39
38
  @Override
@@ -69,8 +68,7 @@ public class PoiExcelColumnVisitor implements ColumnVisitor {
69
68
  visitCell(column, visitor);
70
69
  } catch (Exception e) {
71
70
  String sheetName = visitorValue.getSheet().getSheetName();
72
- String ref = new CellReference(currentRow.getRowNum(), visitorValue.getColumnBean(column).getColumnIndex())
73
- .formatAsString();
71
+ String ref = record.getCellReference(visitorValue.getColumnBean(column)).formatAsString();
74
72
  throw new RuntimeException(MessageFormat.format("error at {0} cell={1}!{2}. {3}", column, sheetName, ref,
75
73
  e.getMessage()), e);
76
74
  }
@@ -87,7 +85,7 @@ public class PoiExcelColumnVisitor implements ColumnVisitor {
87
85
  switch (valueType) {
88
86
  case SHEET_NAME:
89
87
  if (cellAddress != null) {
90
- Sheet sheet = cellAddress.getSheet(currentRow);
88
+ Sheet sheet = cellAddress.getSheet(record);
91
89
  visitor.visitSheetName(column, sheet);
92
90
  } else {
93
91
  visitor.visitSheetName(column);
@@ -96,28 +94,18 @@ public class PoiExcelColumnVisitor implements ColumnVisitor {
96
94
  case ROW_NUMBER:
97
95
  int rowIndex;
98
96
  if (cellAddress != null) {
99
- Cell cell = cellAddress.getCell(currentRow);
100
- if (cell == null) {
101
- visitCellNull(column);
102
- return;
103
- }
104
- rowIndex = cell.getRowIndex();
97
+ rowIndex = cellAddress.getRowIndex();
105
98
  } else {
106
- rowIndex = currentRow.getRowNum();
99
+ rowIndex = record.getRowIndex(bean);
107
100
  }
108
101
  visitor.visitRowNumber(column, rowIndex + 1);
109
102
  return;
110
103
  case COLUMN_NUMBER:
111
104
  int columnIndex;
112
105
  if (cellAddress != null) {
113
- Cell cell = cellAddress.getCell(currentRow);
114
- if (cell == null) {
115
- visitCellNull(column);
116
- return;
117
- }
118
- columnIndex = cell.getColumnIndex();
106
+ columnIndex = cellAddress.getColumnIndex();
119
107
  } else {
120
- columnIndex = bean.getColumnIndex();
108
+ columnIndex = record.getColumnIndex(bean);
121
109
  }
122
110
  visitor.visitColumnNumber(column, columnIndex + 1);
123
111
  return;
@@ -128,12 +116,12 @@ public class PoiExcelColumnVisitor implements ColumnVisitor {
128
116
  break;
129
117
  }
130
118
 
131
- assert valueType.useCell();
119
+ // assert valueType.useCell();
132
120
  Cell cell;
133
121
  if (cellAddress != null) {
134
- cell = cellAddress.getCell(currentRow);
122
+ cell = cellAddress.getCell(record);
135
123
  } else {
136
- cell = currentRow.getCell(bean.getColumnIndex());
124
+ cell = record.getCell(bean);
137
125
  }
138
126
  if (cell == null) {
139
127
  visitCellNull(column);
@@ -0,0 +1,192 @@
1
+ package org.embulk.parser.poi_excel;
2
+
3
+ import static org.hamcrest.CoreMatchers.is;
4
+ import static org.hamcrest.MatcherAssert.assertThat;
5
+
6
+ import java.net.URL;
7
+ import java.text.ParseException;
8
+ import java.util.List;
9
+
10
+ import org.embulk.parser.EmbulkPluginTester;
11
+ import org.embulk.parser.EmbulkTestOutputPlugin.OutputRecord;
12
+ import org.embulk.parser.EmbulkTestParserConfig;
13
+ import org.junit.experimental.theories.DataPoints;
14
+ import org.junit.experimental.theories.Theories;
15
+ import org.junit.experimental.theories.Theory;
16
+ import org.junit.runner.RunWith;
17
+
18
+ @RunWith(Theories.class)
19
+ public class TestPoiExcelParserPlugin_recordType {
20
+
21
+ @DataPoints
22
+ public static String[] FILES = { "test1.xls", "test2.xlsx" };
23
+
24
+ @Theory
25
+ public void testRecordType_row(String excelFile) throws ParseException {
26
+ try (EmbulkPluginTester tester = new EmbulkPluginTester()) {
27
+ tester.addParserPlugin(PoiExcelParserPlugin.TYPE, PoiExcelParserPlugin.class);
28
+
29
+ EmbulkTestParserConfig parser = tester.newParserConfig(PoiExcelParserPlugin.TYPE);
30
+ parser.set("sheet", "test1");
31
+ parser.set("record_type", "row");
32
+ parser.set("skip_header_lines", 1);
33
+ parser.addColumn("text", "string").set("cell_column", "D");
34
+ parser.addColumn("text_row", "long").set("cell_column", "D").set("value", "row_number");
35
+ parser.addColumn("text_col", "long").set("cell_column", "D").set("value", "column_number");
36
+ parser.addColumn("text2", "string").set("cell_row", "4");
37
+ parser.addColumn("text2_row", "long").set("cell_row", "4").set("value", "row_number");
38
+ parser.addColumn("text2_col", "long").set("cell_row", "4").set("value", "column_number");
39
+ parser.addColumn("address1", "string").set("cell_address", "B1").set("value", "cell_value");
40
+ parser.addColumn("address2", "string").set("cell_column", "D").set("cell_row", "2");
41
+ parser.addColumn("fix_row", "long").set("cell_address", "B1").set("value", "row_number");
42
+ parser.addColumn("fix_col", "long").set("cell_address", "B1").set("value", "column_number");
43
+
44
+ URL inFile = getClass().getResource(excelFile);
45
+ List<OutputRecord> result = tester.runParser(inFile, parser);
46
+
47
+ assertThat(result.size(), is(7));
48
+ check1(result, 0, "abc");
49
+ check1(result, 1, "def");
50
+ check1(result, 2, "456");
51
+ check1(result, 3, "abc");
52
+ check1(result, 4, "abc");
53
+ check1(result, 5, "true");
54
+ check1(result, 6, null);
55
+ }
56
+ }
57
+
58
+ private void check1(List<OutputRecord> result, int index, String text) {
59
+ OutputRecord record = result.get(index);
60
+ // System.out.println(record);
61
+ assertThat(record.getAsString("text"), is(text));
62
+ assertThat(record.getAsLong("text_row"), is((long) index + 2));
63
+ assertThat(record.getAsLong("text_col"), is(4L));
64
+ assertThat(record.getAsString("text2"), is("42283"));
65
+ assertThat(record.getAsLong("text2_row"), is(4L));
66
+ assertThat(record.getAsLong("text2_col"), is(5L));
67
+ assertThat(record.getAsString("address1"), is("long"));
68
+ assertThat(record.getAsString("address2"), is("abc"));
69
+ assertThat(record.getAsLong("fix_row"), is(1L));
70
+ assertThat(record.getAsLong("fix_col"), is(2L));
71
+ }
72
+
73
+ @Theory
74
+ public void testRecordType_column0(String excelFile) throws ParseException {
75
+ try (EmbulkPluginTester tester = new EmbulkPluginTester()) {
76
+ tester.addParserPlugin(PoiExcelParserPlugin.TYPE, PoiExcelParserPlugin.class);
77
+
78
+ EmbulkTestParserConfig parser = tester.newParserConfig(PoiExcelParserPlugin.TYPE);
79
+ parser.set("sheet", "test1");
80
+ parser.set("record_type", "column");
81
+ // parser.set("skip_header_lines", 0);
82
+ parser.addColumn("text", "string").set("cell_row", "5");
83
+ parser.addColumn("text_row", "long").set("cell_row", "5").set("value", "row_number");
84
+ parser.addColumn("text_col", "long").set("cell_row", "5").set("value", "column_number");
85
+ parser.addColumn("text2", "string").set("cell_column", "D");
86
+ parser.addColumn("text2_row", "long").set("cell_column", "D").set("value", "row_number");
87
+ parser.addColumn("text2_col", "long").set("cell_column", "D").set("value", "column_number");
88
+ parser.addColumn("address1", "string").set("cell_address", "B1").set("value", "cell_value");
89
+ parser.addColumn("address2", "string").set("cell_column", "D").set("cell_row", "2");
90
+ parser.addColumn("fix_row", "long").set("cell_address", "B1").set("value", "row_number");
91
+ parser.addColumn("fix_col", "long").set("cell_address", "B1").set("value", "column_number");
92
+
93
+ URL inFile = getClass().getResource(excelFile);
94
+ List<OutputRecord> result = tester.runParser(inFile, parser);
95
+
96
+ assertThat(result.size(), is(7));
97
+ int z = 1;
98
+ check2(result, 0, z, "true");
99
+ check2(result, 1, z, "123");
100
+ check2(result, 2, z, "123.4");
101
+ check2(result, 3, z, "abc");
102
+ check2(result, 4, z, "2015/10/07");
103
+ check2(result, 5, z, null);
104
+ check2(result, 6, z, "CELL_TYPE_STRING");
105
+ }
106
+ }
107
+
108
+ @Theory
109
+ public void testRecordType_column1(String excelFile) throws ParseException {
110
+ try (EmbulkPluginTester tester = new EmbulkPluginTester()) {
111
+ tester.addParserPlugin(PoiExcelParserPlugin.TYPE, PoiExcelParserPlugin.class);
112
+
113
+ EmbulkTestParserConfig parser = tester.newParserConfig(PoiExcelParserPlugin.TYPE);
114
+ parser.set("sheet", "test1");
115
+ parser.set("record_type", "column");
116
+ parser.set("skip_header_lines", 1);
117
+ parser.addColumn("text", "string").set("cell_row", "5");
118
+ parser.addColumn("text_row", "long").set("cell_row", "5").set("value", "row_number");
119
+ parser.addColumn("text_col", "long").set("cell_row", "5").set("value", "column_number");
120
+ parser.addColumn("text2", "string").set("cell_column", "D");
121
+ parser.addColumn("text2_row", "long").set("cell_column", "D").set("value", "row_number");
122
+ parser.addColumn("text2_col", "long").set("cell_column", "D").set("value", "column_number");
123
+ parser.addColumn("address1", "string").set("cell_address", "B1").set("value", "cell_value");
124
+ parser.addColumn("address2", "string").set("cell_column", "D").set("cell_row", "2");
125
+ parser.addColumn("fix_row", "long").set("cell_address", "B1").set("value", "row_number");
126
+ parser.addColumn("fix_col", "long").set("cell_address", "B1").set("value", "column_number");
127
+
128
+ URL inFile = getClass().getResource(excelFile);
129
+ List<OutputRecord> result = tester.runParser(inFile, parser);
130
+
131
+ assertThat(result.size(), is(6));
132
+ int z = 2;
133
+ check2(result, 0, z, "123");
134
+ check2(result, 1, z, "123.4");
135
+ check2(result, 2, z, "abc");
136
+ check2(result, 3, z, "2015/10/07");
137
+ check2(result, 4, z, null);
138
+ check2(result, 5, z, "CELL_TYPE_STRING");
139
+ }
140
+ }
141
+
142
+ private void check2(List<OutputRecord> result, int index, int z, String text) {
143
+ OutputRecord record = result.get(index);
144
+ // System.out.println(record);
145
+ assertThat(record.getAsString("text"), is(text));
146
+ assertThat(record.getAsLong("text_row"), is(5L));
147
+ assertThat(record.getAsLong("text_col"), is((long) index + z));
148
+ assertThat(record.getAsString("text2"), is("abc"));
149
+ assertThat(record.getAsLong("text2_row"), is(6L));
150
+ assertThat(record.getAsLong("text2_col"), is(4L));
151
+ assertThat(record.getAsString("address1"), is("long"));
152
+ assertThat(record.getAsString("address2"), is("abc"));
153
+ assertThat(record.getAsLong("fix_row"), is(1L));
154
+ assertThat(record.getAsLong("fix_col"), is(2L));
155
+ }
156
+
157
+ @Theory
158
+ public void testRecordType_sheet(String excelFile) throws ParseException {
159
+ try (EmbulkPluginTester tester = new EmbulkPluginTester()) {
160
+ tester.addParserPlugin(PoiExcelParserPlugin.TYPE, PoiExcelParserPlugin.class);
161
+
162
+ EmbulkTestParserConfig parser = tester.newParserConfig(PoiExcelParserPlugin.TYPE);
163
+ parser.set("sheet", "style");
164
+ parser.set("record_type", "sheet");
165
+ parser.addColumn("text", "string");
166
+ parser.addColumn("text_row", "long").set("cell_row", "5").set("value", "row_number");
167
+ parser.addColumn("text_col", "long").set("cell_column", "6").set("value", "column_number");
168
+ parser.addColumn("address1", "string").set("cell_address", "B1").set("value", "cell_value");
169
+ parser.addColumn("address2", "string").set("cell_column", "A").set("cell_row", "4");
170
+ parser.addColumn("fix_row", "long").set("cell_address", "B1").set("value", "row_number");
171
+ parser.addColumn("fix_col", "long").set("cell_address", "B1").set("value", "column_number");
172
+
173
+ URL inFile = getClass().getResource(excelFile);
174
+ List<OutputRecord> result = tester.runParser(inFile, parser);
175
+
176
+ assertThat(result.size(), is(1));
177
+ check3(result, 0, "red");
178
+ }
179
+ }
180
+
181
+ private void check3(List<OutputRecord> result, int index, String text) {
182
+ OutputRecord record = result.get(index);
183
+ // System.out.println(record);
184
+ assertThat(record.getAsString("text"), is(text));
185
+ assertThat(record.getAsLong("text_row"), is(5L));
186
+ assertThat(record.getAsLong("text_col"), is(6L));
187
+ assertThat(record.getAsString("address1"), is("top"));
188
+ assertThat(record.getAsString("address2"), is("white"));
189
+ assertThat(record.getAsLong("fix_row"), is(1L));
190
+ assertThat(record.getAsLong("fix_col"), is(2L));
191
+ }
192
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-parser-poi_excel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.1.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - hishidama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-13 00:00:00.000000000 Z
11
+ date: 2020-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -52,7 +52,7 @@ files:
52
52
  - classpath/commons-codec-1.10.jar
53
53
  - classpath/commons-collections4-4.1.jar
54
54
  - classpath/curvesapi-1.04.jar
55
- - classpath/embulk-parser-poi_excel-0.1.11.jar
55
+ - classpath/embulk-parser-poi_excel-0.1.12.jar
56
56
  - classpath/embulk-standards-0.7.5.jar
57
57
  - classpath/poi-3.17.jar
58
58
  - classpath/poi-ooxml-3.17.jar
@@ -69,6 +69,11 @@ files:
69
69
  - src/main/java/org/embulk/parser/poi_excel/bean/PoiExcelColumnBean.java
70
70
  - src/main/java/org/embulk/parser/poi_excel/bean/PoiExcelColumnIndex.java
71
71
  - src/main/java/org/embulk/parser/poi_excel/bean/PoiExcelSheetBean.java
72
+ - src/main/java/org/embulk/parser/poi_excel/bean/record/PoiExcelRecord.java
73
+ - src/main/java/org/embulk/parser/poi_excel/bean/record/PoiExcelRecordColumn.java
74
+ - src/main/java/org/embulk/parser/poi_excel/bean/record/PoiExcelRecordRow.java
75
+ - src/main/java/org/embulk/parser/poi_excel/bean/record/PoiExcelRecordSheet.java
76
+ - src/main/java/org/embulk/parser/poi_excel/bean/record/RecordType.java
72
77
  - src/main/java/org/embulk/parser/poi_excel/bean/util/PoiExcelCellAddress.java
73
78
  - src/main/java/org/embulk/parser/poi_excel/bean/util/SearchMergedCell.java
74
79
  - src/main/java/org/embulk/parser/poi_excel/visitor/AbstractPoiExcelCellAttributeVisitor.java
@@ -108,6 +113,7 @@ files:
108
113
  - src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_convertError.java
109
114
  - src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_formula.java
110
115
  - src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_mergedCell.java
116
+ - src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_recordType.java
111
117
  - src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_sheets.java
112
118
  - src/test/resources/org/embulk/parser/poi_excel/test1.xls
113
119
  - src/test/resources/org/embulk/parser/poi_excel/test2.xlsx