第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

我在通過 Apache POI 添加計(jì)算字段時(shí)遇到問題

我在通過 Apache POI 添加計(jì)算字段時(shí)遇到問題

夢(mèng)里花落0921 2023-10-13 09:44:48
我正在嘗試通過 Apache POI 添加計(jì)算字段,當(dāng)只有一個(gè)非計(jì)算字段而其余其他字段是計(jì)算字段時(shí),我遇到問題 我在打開 excel 工作表時(shí)遇到錯(cuò)誤,如下所示錯(cuò)誤圖像但是,當(dāng)有多個(gè)非計(jì)算字段時(shí),Excel 工作表不會(huì)拋出任何錯(cuò)誤,并且計(jì)算字段顯示正常。添加一個(gè)或多個(gè)列標(biāo)簽時(shí)沒有錯(cuò)誤。有人可以幫我解決這個(gè)問題嗎?實(shí)際產(chǎn)量預(yù)期輸出只有一個(gè)非計(jì)算列和一個(gè)計(jì)算列,如下所示。預(yù)期產(chǎn)出
查看完整描述

1 回答

?
UYOU

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊

數(shù)據(jù)透視表定義中有一個(gè)元素,如果有多個(gè)數(shù)據(jù)字段作為列字段,colFields則至少需要一個(gè)元素。field但apache poi如果僅設(shè)置一個(gè)列標(biāo)簽,則不會(huì)添加該字段,因?yàn)槿绻麅H存在一個(gè)列字段,則不需要該字段。


但由于您低級(jí)別添加了一個(gè)數(shù)據(jù)字段作為列字段,因此它缺少該 colFields字段。這就是為什么在打開文件時(shí)出錯(cuò)的原因Excel。


如果設(shè)置了多個(gè)列標(biāo)簽,則apache poi添加該colFields字段。這就是它起作用的原因。


因此,在低級(jí)別創(chuàng)建數(shù)據(jù)字段后,將以下內(nèi)容添加到您的代碼中:


...

   // at least one field in colFields is needed if there are multiple data fields

   CTColFields colFields;

   if(pivotTable.getCTPivotTableDefinition().getColFields() != null) {

    colFields = pivotTable.getCTPivotTableDefinition().getColFields();

   } else {

    colFields = pivotTable.getCTPivotTableDefinition().addNewColFields();

   }

   CTField field;

   if (colFields.getFieldList().size() == 0) {

    field = colFields.addNewField();

    field.setX(-2);

   }

...

這將添加一個(gè)新colFields元素(如果尚不存在)。它會(huì)field在那里添加該元素(如果尚未存在)。


再次完整的例子:


import java.io.FileOutputStream;


import org.apache.poi.ss.SpreadsheetVersion;

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

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

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

import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;


class CreatePivotTableCalculatedFields {


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

  createPivotTable();

 }


 private static void createPivotTable() throws Exception {

  try (XSSFWorkbook wb = new XSSFWorkbook(); 

       FileOutputStream fileOut = new FileOutputStream("Output.xlsx")) {


   XSSFSheet dataSheet = wb.createSheet("1econtent");

   XSSFSheet pivotSheet = wb.createSheet("1e");


   setCellData(dataSheet, wb);


   AreaReference source = new AreaReference("A1:F5", SpreadsheetVersion.EXCEL2007);

   CellReference position = new CellReference(0,0);


   XSSFPivotTable pivotTable = pivotSheet.createPivotTable(source, position,wb.getSheet("1econtent"));

   pivotTable.addRowLabel(2);

   pivotTable.addRowLabel(0);


   pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 3);


   pivotSheet.setDisplayGridlines(false);


   wb.setSelectedTab(1);

   wb.setActiveSheet(1);


   // customize pivot table

   CTCacheFields ctCacheFields = pivotTable.getPivotCacheDefinition().getCTPivotCacheDefinition().getCacheFields();

   CTCacheField ctCacheField = ctCacheFields.addNewCacheField();

   ctCacheField.setName("Field");

   ctCacheField.setFormula("'Actuals' / 'Estimates'");

   ctCacheField.setDatabaseField(false);

   ctCacheFields.setCount(ctCacheFields.sizeOfCacheFieldArray());


   CTPivotField pivotField = pivotTable.getCTPivotTableDefinition().getPivotFields().addNewPivotField();

   pivotField.setDataField(true);

   pivotField.setDragToCol(false);

   pivotField.setDragToPage(false);

   pivotField.setDragToRow(false);

   pivotField.setShowAll(false);

   pivotField.setDefaultSubtotal(false);


   CTDataFields dataFields;

   if(pivotTable.getCTPivotTableDefinition().getDataFields() != null) {

    dataFields = pivotTable.getCTPivotTableDefinition().getDataFields();

   } else {

    dataFields = pivotTable.getCTPivotTableDefinition().addNewDataFields();

   }

   CTDataField dataField = dataFields.addNewDataField();

   dataField.setName("Calculated Field");

   dataField.setFld(pivotTable.getPivotCacheDefinition().getCTPivotCacheDefinition().getCacheFields().getCount()-1);

   dataField.setBaseItem(0);

   dataField.setBaseField(0);

   DataFormat dataformat =  pivotTable.getParentSheet().getWorkbook().createDataFormat();

   short numFmtId = dataformat.getFormat("0.0%");

   dataField.setNumFmtId(numFmtId);


   // at least one field in colFields is needed if there are multiple data fields

   CTColFields colFields;

   if(pivotTable.getCTPivotTableDefinition().getColFields() != null) {

    colFields = pivotTable.getCTPivotTableDefinition().getColFields();

   } else {

    colFields = pivotTable.getCTPivotTableDefinition().addNewColFields();

   }

   CTField field;

   if (colFields.getFieldList().size() == 0) {

    field = colFields.addNewField();

    field.setX(-2);

   }


   wb.write(fileOut);

  }

 }


 public static void setCellData(XSSFSheet sheet, XSSFWorkbook wb){

  Object[][] data = new Object[][] {

   new Object[] {"Names", "Age", "Dept", "Salary", "Actuals", "Estimates"},

   new Object[] {"Adam", 22d, "Sales", 10d, 12d, 60d},

   new Object[] {"Bran", 24d, "Finance", 20d, 24d, 60d},

   new Object[] {"Jane", 23d, "IT", 30d, 30d, 60d},

   new Object[] {"Dave", 30d, "Sales", 50d, 6d, 60d}

  };


  XSSFRow row;

  XSSFCell cell;

  for (int r = 0; r < data.length; r++) {

   row = sheet.createRow(r);

   for (int c = 0 ; c < data[r].length; c++) {

    cell = row.createCell(c);

    if (data[r][c] instanceof String) {

     cell.setCellValue((String)data[r][c]);

    } else if (data[r][c] instanceof Double) {

     cell.setCellValue((Double)data[r][c]);

    }

   }

  }

 } 

}



查看完整回答
反對(duì) 回復(fù) 2023-10-13
  • 1 回答
  • 0 關(guān)注
  • 148 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)