You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:23:11