Как динамически объединять ячейки в API JXLS в преобразованном шаблоне
Я использую Jxls API
Теперь я могу создать, передать списки данных в шаблон, который создает лист вывода excel по желанию
но теперь мне нужно объединить ячейки столбцов, которые несут одинаковое значение
это мой для каждого тега для повторения ячеек
<jx:forEach items="${dummyData}" var="dummy" groupBy="col1">
<jx:forEach items="${group.items}" var="myList123">
${myList123.col1} ${myList123.col2} ${myList123.col3} ${myList123.col4} ${myList123.col5} ${myList123.col6} ${myList123.col7}
</jx:forEach>
</jx:forEach>
![WHAT I HAve]()
![WHAT I WANT]()
Ответы
Ответ 1
Я не уверен, поможет ли это. Но вот моя идея
- Создайте файл, как показано выше, а затем сохраните файл
- Перезагрузите файл с помощью apache POI, а затем выполните свою логику, чтобы объединить необходимые ячейки. POI имеет функцию ниже, которую я использовал
Вы можете использовать sheet.addMergedRegion(rowFrom,rowTo,colFrom,colTo);
из библиотеки POI
Я никогда не работал над Jxlx, но похоже, что у них нет этой функции.
Ответ 2
Я делаю пользовательскую команду jx:each-merge
для выполнения операций автоматического слияния. Но нужно обращать внимание на то, что я использую org.jxls:jxls:2.4.2
, org.jxls:jxls-poi:1.0.13
и имеющий структуру данных основного раздела (означает, что данные были сгруппированы ранее).
Вы можете увидеть шаблон и полученный результат из приведенного ниже рисунка:
![введите описание изображения здесь]()
Пример кода :
public void xls() throws Exception {
// from template
InputStream template = getClass().getClassLoader().getResourceAsStream("templates/each-merge.xls");
// output to
File out = new File("target/each-merge-result.xls");
if (out.exists()) out.delete();
OutputStream output = new FileOutputStream(out);
// template data
Map<String, Object> data = generateData();
// render
JxlsUtils.renderTemplate(template, data, output);
// verify
assertThat(out.exists(), is(true));
assertThat(out.getTotalSpace() > 0, is(true));
}
Вы можете получить исходный код из проекта github simter-jxls-ext. Класс тестирования EachMergeCommandTest.java.
Структура данных:
[
{
sn: 1,
name: 'row1',
subs: [
{sn: '1-1', name: 'row1sub1'},
...
]
},
...
]
Надеюсь, что это будет полезно.