Создайте фильтр для целочисленного столбца (с выбранными значениями по умолчанию) при создании сводной таблицы с использJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Создайте фильтр для целочисленного столбца (с выбранными значениями по умолчанию) при создании сводной таблицы с использ

Сообщение Anonymous »

Я пытаюсь создать фильтр для третьего поля, которое не включено в строки/столбцы, и это поле является целым числом. Для String я могу создать его, и он работает нормально, но для Integer он не работает.
Ниже приведен пример кода, который ссылается на один из постов для создания образца для целочисленных значений:

Код: Выделить всё

import java.io.FileOutputStream;
import org.apache.poi.ss.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.*;
import org.apache.poi.xssf.usermodel.*;

class PivotIntegerFilter {

public static void main(String[] args) throws Exception {

try (Workbook workbook = new XSSFWorkbook();
FileOutputStream fileout = new FileOutputStream("D:\\user\\temp\\pivottable.xlsx")) {

Sheet pivotSheet = workbook.createSheet("Pivot");
Sheet dataSheet = workbook.createSheet("Data");

setCellData(dataSheet, workbook);

AreaReference areaReference = new AreaReference("A1:E5", SpreadsheetVersion.EXCEL2007);

XSSFPivotTable pivotTable = ((XSSFSheet) pivotSheet).createPivotTable(areaReference, new CellReference("A4"), dataSheet);

pivotTable.addReportFilter(1);

pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 2);

DataFormat dataformat = workbook.createDataFormat();
short numFmtId = dataformat.getFormat("0");
pivotTable.getCTPivotTableDefinition().getDataFields().getDataFieldArray(1).setNumFmtId(numFmtId);

java.util.TreeSet uniqueItems = new java.util.TreeSet();
for (int r = areaReference.getFirstCell().getRow() + 1; r < areaReference.getLastCell().getRow() + 1; r++) {
uniqueItems.add((int) dataSheet.getRow(r).getCell(1).getNumericCellValue());
}
int i = 0;

short numFmtId1 = dataformat.getFormat("0");
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(1).setNumFmtId(numFmtId1);
for (Integer item : uniqueItems) {
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(1).getItems().getItemArray(i).unsetT();

pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(1).getItems().getItemArray(i).setX((long) i);

int y = item.intValue();
//CTNumber c = pivotTable.getPivotCacheDefinition().getCTPivotCacheDefinition().getCacheFields().getCacheFieldArray(1).getSharedItems().addNewN();
//c.set(XmlObject.Factory.newValue(Integer.toString((int) y)));
pivotTable.getPivotCacheDefinition().getCTPivotCacheDefinition().getCacheFields().getCacheFieldArray(1).getSharedItems().addNewS().setV(Integer.toString(y));
if (!"3".equals(item.toString())) {
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(1).getItems().getItemArray(i).setH(true);
}
// pivotTable.getPivotCacheDefinition().getCTPivotCacheDefinition().getCacheFields().getCacheFieldArray(1).setNumFmtId(numFmtId1);
i++;
}

pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(1).setMultipleItemSelectionAllowed(true);
workbook.write(fileout);
}
}

static void setCellData(Sheet sheet, Workbook workbook) {
XSSFRow row;
XSSFCell cell;
Object[][] data = new Object[][]{
new Object[]{"PARTY", "SNO", "VOTES", "Total Count", "Total Absent"},
new Object[]{"REPUBLICAN", 1, 10d, "?", "?"},
new Object[]{"DEMOCRAT", 3, 5d, "?", "?"},
new Object[]{"AMERICAN INDEP", 3, 10d, "?", "?"},
new Object[]{"DECLINED", 2, 10d, "?", "?"}
};
for (int r = 0; r < data.length; r++) {
row = (XSSFRow) sheet.createRow(r);
Object[] rowData = data[r];
for (int c = 0; c < rowData.length;  c++) {
cell = row.createCell(c);
if (rowData[c] instanceof String) {
cell.setCellValue((String) rowData[c]);
} else if (rowData[c] instanceof Double) {
cell.setCellValue((Double) rowData[c]);
} else if (rowData[c] instanceof Integer) {
cell.setCellValue((int) rowData[c]);
DataFormat format = workbook.createDataFormat();
CellStyle integerCellStyle = workbook.createCellStyle();
integerCellStyle.setDataFormat(format.getFormat("0"));
cell.setCellStyle(integerCellStyle);
}
}
}
}
}
Я пытаюсь создать фильтр для поля SNO, которое не включено в строки, столбцы или значения. Если кто-то может помочь, было бы очень полезно.

Подробнее здесь: https://stackoverflow.com/questions/782 ... reating-pi
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»