SpreadsheetLight中行数多于列数时柱状图自动转为行图的问题
问题描述
使用SpreadSheetLight生成图表时,当数据行数多于列数时,图表会自动将数据系列从列方向转为行方向——原本需要的是列作为系列的折线图,结果变成了行作为系列的样式。例如13列14行、10列11行的数据集都会触发该问题,且无法通过转置数据解决(会出现反向问题)。因需对比20条趋势线,无法限制行数,特此求助。
当前使用的两种代码写法均出现该问题:
第一种实现:
spreadsheet = new SLDocument(); var chart = spreadsheet.CreateChart("Dati", "A1", "M14"); chart.SetChartPosition(0, 0, 22, 10); chart.PlotDataSeriesAsSecondaryLineChart(2, SLChartDataDisplayType.Normal, false); spreadsheet.AddChart(cart); spreadsheet.SaveAs(memoryStream);
第二种实现:
spreadsheet = new SLDocument(); var chart = spreadsheet.CreateChart("Dati", "A1", "M14"); chart.SetChartPosition(0, 0, 22, 10); chart.SetChartType(SpreadsheetLight.Charts.SLLineChartType.Line); spreadsheet.AddChart(cart); spreadsheet.SaveAs(memoryStream);
解决方法
问题根源是SpreadSheetLight默认会根据行列数量自动判断数据系列的绘制方向,当行数多于列数时自动切换为行作为系列。要强制指定按列作为数据系列,只需在创建图表后调用SetPlotBy方法,明确指定按列绘制:
修改后的代码示例(第一种写法)
spreadsheet = new SLDocument(); var chart = spreadsheet.CreateChart("Dati", "A1", "M14"); chart.SetChartPosition(0, 0, 22, 10); // 强制设置按列作为数据系列,覆盖自动判断逻辑 chart.SetPlotBy(SpreadsheetLight.Charts.SLPlotBy.Column); chart.PlotDataSeriesAsSecondaryLineChart(2, SLChartDataDisplayType.Normal, false); spreadsheet.AddChart(chart); // 修正原代码变量名错误:cart → chart spreadsheet.SaveAs(memoryStream);
修改后的代码示例(第二种写法)
spreadsheet = new SLDocument(); var chart = spreadsheet.CreateChart("Dati", "A1", "M14"); chart.SetChartPosition(0, 0, 22, 10); chart.SetPlotBy(SpreadsheetLight.Charts.SLPlotBy.Column); chart.SetChartType(SpreadsheetLight.Charts.SLLineChartType.Line); spreadsheet.AddChart(chart); // 修正原代码变量名错误:cart → chart spreadsheet.SaveAs(memoryStream);
注意:原代码中存在变量名错误(cart应为chart),需一并修正,否则会导致编译错误。
内容的提问来源于stack exchange,提问作者CoffeDeveloper
相关产品推荐
相关产品推荐

