Delete legend entries of trendlines via legendEntries.getLegendEntry(i).setDeleted(true); in Java

Hi,

Please run the following sample and see
1. that legend entries are not getting deleted for trenlines
If this is not the right approach, please let me know how can I delete legend entries of trendlines alone from the chart.
2. chart.getLegend().getLegendEntries().size() gives me 0
3. Also, when can I expect trendlines on generated image?

Thanks
Muhammed


import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.lang.reflect.Array;

import com.aspose.cells.ASeries;
import com.aspose.cells.CellsHelper;
import com.aspose.cells.Chart;
import com.aspose.cells.ChartType;
import com.aspose.cells.DisplayUnitType;
import com.aspose.cells.FileFormatType;
import com.aspose.cells.GradientColorType;
import com.aspose.cells.GradientDirectionType;
import com.aspose.cells.GradientFill;
import com.aspose.cells.GradientFillType;
import com.aspose.cells.GradientStyleType;
import com.aspose.cells.ImageFormat;
import com.aspose.cells.ImageOptions;
import com.aspose.cells.LegendEntries;
import com.aspose.cells.PatternFill;
import com.aspose.cells.TickLabelPositionType;
import com.aspose.cells.TrendlineType;
import com.aspose.cells.Workbook;
import com.aspose.cells.Worksheet;
import com.aspose.slides.OleObjectFrame;
import com.aspose.slides.Presentation;
import com.aspose.slides.Slide;

public class VerticalBarChartMaker {

public static void main(String args[]) {

try {
String[] cellsName = new String[] { "B1", "B2", "B3", "B4",
"C1", "C2", "C3", "C4",
"D1", "D2", "D3", "D4",
"E1", "E2", "E3", "E4",
"F1", "F2", "F3", "F4"
};

//Array of cell data
int[] cellsValue = new int[] { 67, 86, 68, 91,
44, -64, -89, 48,
46, -97, 78, 60,
43, -29, 69, 26,
24, 40, -38, 25 };

Workbook wb = new Workbook();
Worksheet dataSheet = wb.getWorksheets().getSheet(0);
String dataSheetName = "DataSheet";
dataSheet.setName(dataSheetName);

dataSheet.getCells().getCell("A1").setValue("IN");
dataSheet.getCells().getCell("A2").setValue("US");
dataSheet.getCells().getCell("A3").setValue("UK");
dataSheet.getCells().getCell("A4").setValue("JP");
dataSheet.getCells().getCell("A5").setValue("CH");

//Populate DataSheet with data
int size = Array.getLength(cellsName);
for (int i = 0; i < size; i++) {
String cellName = cellsName[i];
int cellValue = cellsValue[i];
dataSheet.getCells().getCell(cellName).setValue(cellValue);
}

//Add a chart sheet
Worksheet chartSheet = wb.getWorksheets().addSheet();
chartSheet.setName("ChartSheet");
int chartSheetIdx = chartSheet.getIndex();

//Add a chart in ChartSheet with data series from DataSheet
int chartWidth = 600;
int chartHeight = 400;

int chartHeightInRows = 0;
int chartWidthInCols = 0;
int cellWidth = dataSheet.getCells().getColumnWidthPixel(0);
int cellHeight = dataSheet.getCells().getRowHeightPixel(0);
chartWidthInCols = (int)(chartWidth / cellWidth);
chartHeightInRows = (int)(chartHeight / cellHeight);
chartWidth = chartWidthInCols * cellWidth;
chartHeight = chartHeightInRows * cellHeight;

Chart chart = chartSheet.getCharts().addChart(ChartType.COLUMN_CLUSTERED, 0, 0, 0, 0, chartWidth, chartHeight);
chart.getNSeries().add(dataSheetName + "!B1:F4", false);

LegendEntries legendEntries = chart.getLegend().getLegendEntries();
int seriesCount = chart.getNSeries().size();

for (int i = 0; i < seriesCount; i++) {
ASeries series = chart.getNSeries().get(i);

PatternFill pf = new PatternFill();
pf.setBackgroundColor(wb.getPalette().getColor(i));
pf.setForegroundColor(wb.getPalette().getColor(i));
series.getArea().setFill(pf);

/*GradientFill gf = new GradientFill();
gf.setGradientColorType(GradientColorType.TWO_COLORS);
gf.setColor1(wb.getPalette().getColor(i));
gf.setColor2(wb.getPalette().getColor(i * 2));
gf.setDirection(GradientDirectionType.FROM_CENTER);
series.getArea().setFill(gf);*/

//Trendlines
int trendLineIndex = series.getTrendlines().addTrendline(TrendlineType.LINEAR);
series.getTrendlines().get(trendLineIndex).getLine().setFill(pf);

**legendEntries.getLegendEntry(seriesCount + i).setDeleted(true);**
//legendEntries.getLegendEntry(i).setDeleted(true);
}

/*
System.out.println( **chart.getLegend().getLegendEntries().size()** );
for (int i = 0; i < legendEntries.size(); i++) {
System.out.println(legendEntries.getLegendEntry(i).getKey());
}*/

String categoryAreaRef = dataSheet.getName() + "!A1:A5";
chart.getNSeries().setCategoryData(categoryAreaRef);

chart.getCategoryAxis().setDisplayUnitLabelShown(false);
chart.getCategoryAxis().setTickLabelPosition(TickLabelPositionType.NONE);

chart.getTitle().setText("Aspose.Cells");

chart.getCategoryAxis().getTitle().setText("Category Axis");
chart.getValueAxis().getTitle().setText("Value Axis");

//Get Chart as image.
ImageOptions imgOpts = new ImageOptions();
imgOpts.setImageFormat(ImageFormat.PNG);
imgOpts.setFashion(FileFormatType.EXCEL2003);

chart.toImage(new FileOutputStream("D:\\Temp\\chart.png"), imgOpts);

wb.getWorksheets().setActiveSheet(chartSheetIdx);
wb.setOleSize(0, chartHeightInRows - 1, 0, chartWidthInCols - 1);

//Save the workbook to stream
ByteArrayOutputStream bout = new ByteArrayOutputStream();
wb.save(bout);
wb.save(new FileOutputStream("D:\\Temp\\output.xls"));

Presentation pres = new Presentation();
Slide sld = pres.getSlideByPosition(1);

int slideWidth = (int) pres.getSlideSize().getX();
int slideHeight = (int) pres.getSlideSize().getY();

int x = (slideWidth - chartWidth * 8) / 2;
int y = (slideHeight - chartHeight * 8) / 2;

OleObjectFrame oof = sld.getShapes().addOleObjectFrame(800, 500, chartWidth * 8, chartHeight * 8, "Excel.Sheet.8", bout.toByteArray());
com.aspose.slides.Picture pic = new com.aspose.slides.Picture(pres, new FileInputStream("D:\\Temp\\chart.png"));
int picId = pres.getPictures().add(pic);
oof.setPictureId(picId);

//Write the presentation on disk
pres.write(new FileOutputStream("D:\\Temp\\output.ppt"));
System.out.println("successfully completed!!!" + CellsHelper.getReleaseVersion());

}
catch (Exception e) {
e.printStackTrace();
}
}

}

Hi,

Thank you for sharing the sample code.

We have found your mentioned issue after an initial test. We will look into it and get back to you soon. Your issue has been registered in our internal issue tracking system with issue id: CELLSJAVA-15560.

Thank You & Best Regards,

Hi,

Please try the attached latest version of Aspose.Cells. We have fixed the issue of deleting Legend entries for trendline.

For the issue of "LegendEntries.size()", as it is described in the javadoc of this api, this method only returns the count of legend entries that user has defined. Commonly legend entry objects will be created when user calls LegendEntries.getLegendEntry(int). For a newly created Chart, the LegendEntry collection is empty before user call LegendEntries.getLegendEntry(int).

For the generation of trendlines for Chart2Image, we need more time to work on it.

Thank You & Best Regards,

Hi,

Legend entries for trendlines are getting deleted.

Thanks
Muhammed

The issues you have found earlier (filed as 15560) have been fixed in this update.


This message was posted using Notification2Forum from Downloads module by aspose.notifier.