There will be multiple sheets in the workbook with multiple result sets in each sheet.
for (int sheetIndex = 0; sheetIndex < collection.getCount(); sheetIndex++) {
TreeMap currentSheetRowNumResultSetIndex = new TreeMap();
Worksheet sheet = collection.get(sheetIndex);
Cells cells = sheet.getCells();
FindOptions options = new FindOptions();
options.setLookInType(LookInType.VALUES_EXCLUDE_FORMULA_CELL);
options.setLookAtType(LookAtType.START_WITH);
Cell cell = null;
while ((cell = cells.find("&=", cell, options)) != null) {
String value = cell.getStringValue();
Matcher matcher = resultSetAndFieldPattern.matcher(value);
if (matcher.matches()) {
String resultSetName = matcher.group(1) != null ? matcher
.group(1) : matcher.group(2);
String resultField = matcher.group(3) != null ? matcher
.group(3) : matcher.group(4);
int useColumn = cell.getColumn() + 1;
int useRow = cell.getRow() + 1;
int resultSetIndex = bidirResultSetNameResultSetIndex
.intValue(resultSetName);
if (resultSetIndex >= 0) {
if (resultField.equals("*")) {
expandWildcardFields(resultSetName, cell, cells);
return false;
} else {
currentSheetRowNumResultSetIndex.put(useRow,
resultSetIndex);
BiIntMonoStr sheetIndexResultSetIndexField = new BiIntMonoStr(
sheetIndex, resultSetIndex, resultField);
BiInt columnRow = new BiInt(useColumn, useRow);
sheetIndexResultSetIndexFieldColumnRow.put(
sheetIndexResultSetIndexField, columnRow);
}
} else {
if (value.equals("&=
.
")) {
resultSetName = dataSetNameResultSet.keySet().toArray(new String[0])[0];
expandWildcardFields(resultSetName, cell, cells);
return false;
} else {
System.out
.println("WARNING: invalid recordset used in template: "
+ value);
}
}
}
}
sheetIndexRowNumResultSetIndex
.add(currentSheetRowNumResultSetIndex);
}
private void expandWildcardFields(String dataSetName, Cell cell, Cells cells) {
try {
ResultSet resultSet = dataSetNameResultSet.get(dataSetName);
ResultSetMetaData metaData = resultSet.getMetaData();
int wildRow = cell.getRow();
int wildColumn = cell.getColumn();
for (int fieldIndex = metaData.getColumnCount(); fieldIndex > 0; fieldIndex--) {
String fieldName = metaData.getColumnLabel(fieldIndex);
Cell header = cells.get(wildRow, wildColumn - 1 + fieldIndex);
header.setValue(fieldName);
Cell dataRef = cells.get(wildRow + 1, wildColumn - 1
+ fieldIndex);
dataRef.setValue("&=[" + dataSetName + "].[" + fieldName + "]");
}
return;
} catch (SQLException e) {
e.printStackTrace();
try {
connection.rollback();
} catch (SQLException e1) {
;
}
updateQueue("Failure");
System.exit(1);
}
}
This is the expected output. Having Result sets side by side with out any empty rows. R1 is starting only after R2 rows are written as highlighted in yellow in earlier pic.