Wie man die Größe eines Diagramms mit XSSF (Apache POI 3.8)?

Frage ich mich, ob es einen Weg gibt, um die Größe eines Diagramms mithilfe von Apache POI (XSSF). Momentan benutze ich eine Excel-Vorlage, die hat eine Karte, die ändert, wenn mehr Daten eingefügt, mit namedRanges.

Funktioniert alles einwandfrei, das einzige Probleme, die ich bin vor sind:

  • Die Grafik bleibt immer die gleiche Größe, so dass, wenn es mehr Einträge, wird es unübersichtlich machen das Diagramm ziemlich nutzlos.
  • Ich bin mit Terminen, aber ich bin nicht in der Lage zu repräsentieren, das Datum als Tag/Monat(17/10) auf der Karte. Im Grunde statt 04/01/2001, es schreibt 36982.

Den Zweck der Arbeitsmappe ist die Liste mehrere jobs haben, und prüfen Sie, ob Sie dauerte länger an einem bestimmten Datum, die Grafik ist für die Unterstützung zu identifizieren, die Ereignisse von mehr vergangen Zeiten. Die jobs, die Laufzeit kann Bereich von Sekunden bis Stunden.

Dies ist der code den ich verwende:

package le_package.poi_tests.xssflibrary;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Name;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class POIReadFile {
    public static void main(String[] args) {
        try
        {           
            String jobName = "I am a job"; 
            String jobParent = "I am your father, Job.";        
            int rowNum = 40;
            int deface = 4;

            //Open Excel as OOXML
            XSSFWorkbook currentWorkbook = new XSSFWorkbook( OPCPackage.open("include/excelTemplate.xlsx"));

            //Get sheet in position 0
            Sheet currentSheet = currentWorkbook.getSheetAt(0);

            //Get sheet name for processing
            String sheetName = currentSheet.getSheetName();

            //Set values for headers
            currentSheet.getRow(1).getCell(0).setCellValue(jobName);            
            currentSheet.getRow(1).getCell(1).setCellValue(jobParent);              

            for (int i=0; i<rowNum; i++)
            {
                //Create row in a given position
                Row newRow = currentSheet.createRow(i+deface);

                //Create cell within row
                Cell newCell0 = newRow.createCell(0);
                Cell newCell1 = newRow.createCell(1);
                Cell newCell2 = newRow.createCell(2);
                String cellDate = "";

                /* Set CellType
                 *  0 - Numeric | 1 - String | 2 - Formula | 3 - Blank | 4 - Boolean | 5 - Error */
                newCell0.setCellType(0);
                cellDate = "3/"+(i+1)+"/2001 00:00:00";

                //Convert text into date
                Date currentCellDate = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").parse(cellDate);
                //System.out.println(currentCellDate.toString()+"--"+cellDate);

                //Set CellValue
                newCell0.setCellValue(currentCellDate);


                cellDate = "4/"+(i+1)+"/2001 00:00:00"; 
                currentCellDate = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").parse(cellDate);
                //System.out.println(currentCellDate.toString()+"--"+cellDate);             
                newCell1.setCellType(0);
                newCell1.setCellValue(currentCellDate);

                //setCellFormula sets the formula to be evaluated by excel, it doesn't need to start with '=' 
                newCell2.setCellFormula("A" + (i+deface+1) + "-B" + (i+deface+1));              
            }           

            //Search for named range
            Name rangeCell = currentWorkbook.getName("startRange");         
            //Set new range for named range 
            String reference = sheetName + "!$A$" + ( deface+1 ) + ":$A$" + ( rowNum+deface );          
            //Assigns range value to named range
            rangeCell.setRefersToFormula(reference);

            rangeCell = currentWorkbook.getName("endRange");            
            reference = sheetName + "!$B$"+(deface+1) + ":$B$" + (rowNum+deface);
            rangeCell.setRefersToFormula(reference);            

            rangeCell = currentWorkbook.getName("elapsedTime");
            reference = sheetName + "!$C$"+(deface+1) + ":$C$" + (rowNum+deface);
            rangeCell.setRefersToFormula(reference);

            //Create a fileStream to write into a file
            FileOutputStream newExcelFile = new FileOutputStream(jobName+".xlsx");

            //Write Stream
            currentWorkbook.write(newExcelFile);

            //Close New Excel File
            newExcelFile.close();           
        }
        catch (Exception e)
        {
            System.out.println("AAAAARGH, I was wounded by the following exception!:");
            e.printStackTrace();
            System.out.println("Sorry, your program is dead :(");
        }
    }
}

Ist es möglich, das zu tun, was ich brauche?

Dank.

*Anmerkung: ich bin nicht zu Fragen, eine Tabelle zu erstellen, aus dem Grund brauche ich nur die Größe ändern, das man die Vorlage hat, und ändern Sie einige Zellen-bis-Datum anstelle der Zahl, die geschrieben wird.

InformationsquelleAutor StrayChild01 | 2012-10-17
Schreibe einen Kommentar