我想使用Apache POI在Excel工作表的多个位置创建自动筛选。 (例如,在第2行和第8行)。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int decomposition(const char *target, const char *strings[], size_t n)
{
size_t i;
if (*target == '\0') return 1;
for (i = 0; i < n; i++) {
const char *str = strings[i];
size_t len = strlen(str);
if (strncmp(target, str, len) == 0) {
int res;
res = decomposition(target + len, strings, n);
if (res) return 1;
}
}
return 0;
}
int main(int argc, char *argv[])
{
if (argc < 3) {
printf("Usage: prog targer string(s) ...\n");
} else {
int n = decomposition(argv[1], argv + 2, argc - 2);
printf("%s be done.\n", n ? "Can" : "Can't");
}
return 0;
}
我一直在添加它,如上所述,但第二个过滤器覆盖了第一个过滤器,当创建excel表时,我只能看到一个。 有人可以帮助我。
感谢。
答案 0 :(得分:1)
使用时应使用XSSFSheet
并创建CTTable
。工作表可能包含许多表格。
以下是将表格添加到工作表的代码。请确保创建并存在单元格。
private void createExcelTable(XSSFSheet sheet, AreaReference reference, int tableId,
String name) {
XSSFTable table = sheet.createTable();
table.setDisplayName(name);
CTTable cttable = table.getCTTable();
// Style configurations
// CTTableStyleInfo is available in ooxml-schemas-1.1.jar.
// Replace with it your poi-ooxml.
CTTableStyleInfo style = cttable.addNewTableStyleInfo();
style.setName("TableStyleLight1");
style.setShowColumnStripes(false);
style.setShowRowStripes(true);
// Set which area the table should be placed in
cttable.setRef(reference.formatAsString());
// id starts from 1
cttable.setId(tableId);
cttable.setName(name);
cttable.setDisplayName(name);
// first row is used for header with filter
CTAutoFilter autoFilter = cttable.addNewAutoFilter();
autoFilter.setRef(reference.formatAsString());
CTTableColumns columns = cttable.addNewTableColumns();
// sets count of columns for current table
short firstColumn = reference.getFirstCell().getCol();
short lastColumn = reference.getLastCell().getCol();
columns.setCount(lastColumn - firstColumn + 1);
for (int i = firstColumn; i <= lastColumn; i++) {
// create columns
CTTableColumn column = columns.addNewTableColumn();
column.setName("Column" + i);
// id starts from 1
column.setId(i + 1);
}
}
AreaReference示例:
new AreaReference(new CellReference(0, 0), new CellReference(4, 5));