I using FreeSpire(9.2.1) create a chart and want to export to excel and pdf. But when export to excel the data is correct but label is incorrect. When export to pdf the label is correct but the data is incorrect.
Chart in Excel:
Chart in PDF:
Here a part of my code:
- Code: Select all
public Stream ExportReportingPricedOrder(bool exportAsPdf, ExcelReportingModel model)
{
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
var sheet = workbook.CreateEmptySheet();
sheet.Name = "Data";
AddHeader(sheet, model);
AddTable(sheet, model);
if (model.Chart != null)
{
AddBarLineCombinationChar(workbook, model);
}
for (int i = 1; i < sheet.LastColumn; i++)
{
sheet.AutoFitColumn(i);
}
sheet.PageSetup.TopMargin = 0.25;
sheet.PageSetup.LeftMargin = 0.25;
sheet.PageSetup.RightMargin = 0.25;
sheet.PageSetup.BottomMargin = 0.25;
sheet.PageSetup.HeaderMarginInch = 0;
sheet.PageSetup.FooterMarginInch = 0;
var stream = new MemoryStream();
if (exportAsPdf)
{
workbook.ConverterSetting.SheetFitToPage = true;
workbook.SaveToStream(stream, Spire.Xls.FileFormat.PDF);
}
else
{
workbook.SaveToStream(stream, Spire.Xls.FileFormat.Version2007);
stream.Seek(0, SeekOrigin.Begin);
}
return stream;
}
- Code: Select all
private void AddBarLineCombinationChar(Workbook workbook, ExcelReportingModel model)
{
var dataSheet = workbook.Worksheets[0];
var chart = workbook.Charts.Add();
chart.Name = "Chart";
chart.ChartTitle = model.Title;
chart.ChartTitleArea.IsBold = true;
chart.ChartTitleArea.Size = 12;
chart.SeriesDataFromRange = false;
foreach (var col in model.Chart.SerieColumns)
{
var serie = chart.Series.Add();
serie.Name = col.Header;
serie.CategoryLabels = dataSheet.Range[startRow + 1, model.Chart.CategoryColumn.Order, model.Chart.CategoryColumn.Values.Count + startRow + 1, model.Chart.CategoryColumn.Order];
serie.Values = dataSheet.Range[startRow + 1, startCol + col.Order - 1, col.Values.Count + startRow + 1, startCol + col.Order - 1];
serie.SerieType = col.ChartType == ChartType.Bar ? ExcelChartType.ColumnClustered : ExcelChartType.LineMarkers;
serie.UsePrimaryAxis = col.IsUsePrimaryAxis;
}
chart.SecondaryCategoryAxis.IsMaxCross = true;
}
Here is how the data look like:
Any help would be apreciated. I waste so much time on this.
Thanks,
Thanh Phan