Hi FD,

The code has been merged by r1840076. It might appear in release 4.0.0 or 4.0.1 
(we are currently busy with 4.0.0 RC1).

Best regards,
Alain

> On 4 Sep 2018, at 00:27, Alain FAGOT BÉAREZ <abea...@for-scala.it> wrote:
> 
> Hi FD,
> 
> I think all you need is the following method on XSSFDrawing:
> 
> ```
>    /**
>     * Imports the chart from the <code>srcChart</code> into this drawing.
>     *
>     * @param srcChart
>     *            the source chart to be cloned into this drawing.
>     * @return the newly created chart.
>     * @throws XmlException
>     * @throws IOException
>     */
>    public XSSFChart importChart(XSSFChart srcChart) throws IOException, 
> XmlException {
>        CTTwoCellAnchor anchor = ((XSSFDrawing) 
> srcChart.getParent()).getCTDrawing().getTwoCellAnchorArray(0);
>        CTMarker from = (CTMarker) anchor.getFrom().copy();
>        CTMarker to = (CTMarker) anchor.getTo().copy();
>        XSSFClientAnchor destAnchor = new XSSFClientAnchor(from, to);
>        destAnchor.setAnchorType(AnchorType.MOVE_AND_RESIZE);
>        XSSFChart destChart = createChart(destAnchor);
>        destChart.getCTChartSpace().set(srcChart.getCTChartSpace().copy());
>        destChart.getCTChart().set(srcChart.getCTChart().copy());
>        return destChart;
>    }
> ```
> 
> I feel that retrieving the source chart and creating the new destination 
> drawing are better handled outside.
> 
> I will open a PR for code review.
> 
> Best regards,
> Alain
> 
> 
>> On 24 Aug 2018, at 10:50, monnomiznog...@gmail.com wrote:
>> 
>> Hi Alain,
>> 
>> I'll paste some test code here. In my work we have a lot of restrictions 
>> when it comes to websites.
>> 
>> Sorry I don't know how to format this code.
>> 
>> Important: the chartModel.xlsx should contain a chart, preferably with no 
>> relations. After all you need the model to be copied to your report but then 
>> you must at least implement the data source for the chart, maybe also the 
>> title, the series names, etc. But the heavy customization of the chart is 
>> already done in the model.
>> 
>>   //Open chart model file
>>      //My use experience: one chart par xlsx model file, in one sheet. Could 
>> be otherwise of course.
>>      FileInputStream in = new FileInputStream("c:/temp/chartModel.xlsx");
>>   XSSFWorkbook srcWB = new XSSFWorkbook(in);
>>   XSSFWorkbook destWB = new XSSFWorkbook();
>>   XSSFSheet destSH = destWB.createSheet();
>>   XSSFDrawing destDR = destSH.createDrawingPatriarch();
>>   int sheetNum = 0; 
>>   XSSFSheet srcSH = srcWB.getSheetAt(sheetNum);
>> 
>>   List<POIXMLDocumentPart> srcRels = 
>> srcSH.createDrawingPatriarch().getRelations();
>>   for (POIXMLDocumentPart srcRel : srcRels)
>>   {
>>     if (srcRel instanceof XSSFChart)
>>     {
>>       XSSFChart srcChart = (XSSFChart) srcRel;
>>              
>>              //Create chartSpace and chart by parsing source chart
>>          CTChartSpace chartSpace = 
>> ChartSpaceDocument.Factory.parse(srcChart.getPackagePart().getInputStream(), 
>> POIXMLTypeLoader.DEFAULT_XML_OPTIONS).getChartSpace(); 
>>          CTChart ctc = chartSpace.getChart();
>> 
>>       //XSSFClientAnchor origAnch = chart.getGraphicFrame().getAnchor();
>>              //Frame is null ! I tried to get anchor using the following:
>>       CTMarker from = ((XSSFDrawing) 
>> srcChart.getParent()).getCTDrawing().getTwoCellAnchorArray(0).getFrom();
>>       CTMarker to = ((XSSFDrawing) 
>> srcChart.getParent()).getCTDrawing().getTwoCellAnchorArray(0).getTo();
>>       XSSFClientAnchor anchor = new XSSFClientAnchor((int) from.getColOff(), 
>> (int) from.getRowOff(), (int) to.getColOff(), (int) to.getRowOff(), 
>> from.getCol(), from.getRow(), to.getCol(), to.getRow());
>>       anchor.setAnchorType(AnchorType.MOVE_AND_RESIZE);
>>      //Create chart in the destination workbook
>>       XSSFChart destChart = destDR.createChart(anchor);
>>              
>>              //A new XSSFChart constructor is needed maybe. The following 2 
>> lines use reflection in order to force values for these 2 private variables 
>> of XSSFChart
>>       Utilities.setVariable(destChart, "chartSpace", chartSpace, true);
>>       Utilities.setVariable(destChart, "chart", ctc, true);
>>        }
>>      }
>>      
>>      //Write the new workbook (could also be one you already have opened for 
>> edition)
>>   FileOutputStream out = new FileOutputStream("c:/temp/test.xlsx");
>>   destWB.write(out);
>>   out.flush();
>>   out.close();
>>   in.close();
>>   srcWB.close();
>>   destWB.close();
>>              
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@poi.apache.org
>> For additional commands, e-mail: dev-h...@poi.apache.org
> 

Reply via email to