2016-11-02 2 views
1

Я пытаюсь создать сводную таблицу, чтобы сделать когортного анализаОшибка таблицы Apache POI Pivot, когда же индекс используется как для столбца и строки этикетки

pivotTable.addColumnLabel(DataConsolidateFunction.COUNT, 1); 
pivotTable.addRowLabel(1); 

это дает мне ошибку при открытии файла, что файл поврежден, вы хотите открыть файл, когда я говорю «да» и открываю его, результат выглядит отлично, единственной проблемой является ошибка.

Я сделал обходной путь, чтобы иметь дублирующие данные столбца с другим именем

для экс: сказать столбец 1 является электронная почта добавляется дубликат колонки 36 с именем дублировать адрес электронной почты и сделал так, как показано ниже, это работает отлично

pivotTable.addColumnLabel(DataConsolidateFunction.COUNT, 1); 
pivotTable.addRowLabel(35); 

почему в первую очередь это не удалось, когда я дать и столбец и строку в качестве метки 1.

Любая помощь очень ценится

ответ

2

Если вы установили pivotTable.addRowLabel(1) с помощью apache poi, то apache poi устанавливает поле поворота 1 только для того, чтобы быть осью, но он также должен быть DataField, если вы также хотите, чтобы pivotTable.addColumnLabel(DataConsolidateFunction.COUNT, 1). Поэтому мы решили исправить это.

Пример:

import org.apache.poi.xssf.usermodel.*; 
import org.apache.poi.ss.usermodel.*; 
import org.apache.poi.ss.util.*; 

import java.io.*; 

class PivotTableTest5 { 

private static void setCellData(Sheet sheet) { 
    Row row = sheet.createRow(0); 
    Cell cell = row.createCell(0); 
    cell.setCellValue("Name"); 
    cell = row.createCell(1); 
    cell.setCellValue("City"); 

    for (int r = 1; r < 15; r++) { 
    row = sheet.createRow(r); 
    cell = row.createCell(0); 
    cell.setCellValue("Name " + ((r-1) % 4 + 1)); 
    cell = row.createCell(1); 
    cell.setCellValue("City " + (int)((new java.util.Random().nextDouble() * 3)+1)); 
    } 
} 

public static void main(String[] args) { 
    try { 
    XSSFWorkbook wb = new XSSFWorkbook(); 
    XSSFSheet sheet = wb.createSheet(); 

    //Create some data to build the pivot table on 
    setCellData(sheet); 

    XSSFPivotTable pivotTable = sheet.createPivotTable(
    new AreaReference(new CellReference("A1"), new CellReference("B15")), new CellReference("H5")); 
    //Count the second column. This needs to be second column a data field. 
    pivotTable.addColumnLabel(DataConsolidateFunction.COUNT, 1); 
    //Use second column as row label 
    pivotTable.addRowLabel(1); 
    //Apache poi sets pivot field 1 (second column) only to be axisRow but it needs to be dataField too. 
    pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(1).setDataField(true); 

    FileOutputStream fileOut = new FileOutputStream("PivotTableTest5.xlsx"); 
    wb.write(fileOut); 
    fileOut.close(); 
    wb.close(); 
    } catch (FileNotFoundException e) { 
    e.printStackTrace(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
} 
} 
+0

Удивительный !!! это работает как тарелка, полная горячих «Хайдерабади Бириани», –