我正在寻找一种方法来切换使用Syncfusion XlsIO库生成的图表的轴。我无法找到任何解决方案,因为该库是商业化的,使用较少,知识库非常有限。
基本上,我使用excel模板来创建新工作表并相应地填充一些数据。我能够做任何事情,但不知何故,轴不按我想要的方式出现。我想要一种方法来简单地执行(Excel.exe中的切换行/列按钮)对生成的图表(即图表的切换轴)所做的操作。或者可以以编程方式控制轴,并使用代码在X
轴和Y
轴之间切换。
虽然,我有一个解决方案,我们可以为我正在生成的Transpose
生成图表的数据,但它似乎是一个非常大的交易,因为维护的应用程序是实时的,它是现在几乎不可能改变数据的方向(转置)。
这是我的代码:
IChartShapes cs = ws.Charts; // ws is the worksheet being generated
foreach (IChart cs1 in cs)
{
string strCName = cs1.Name;
IRange rngs = ws.Range[cs1.Name]; //chart name and named range are the same
cs1.PrimaryValueAxis.Font.Size = 4;
cs1.PrimaryCategoryAxis.Font.Size = 4;
cs1.DisplayBlanksAs = ExcelChartPlotEmpty.NotPlotted;
cs1.DataRange = rngs;
IChartCategoryAxis csa = cs1.PrimaryCategoryAxis;
csa.CategoryLabels.WrapText = true;
}
非常感谢任何帮助。
答案 0 :(得分:1)
得到了答案!这太简单了。虽然似乎没有人对这个问题感兴趣,但是如果有人碰巧遇到这样的问题,这可能对他/她有帮助。
基本上,答案只是将图表IsSeriesInRows
的属性默认为True
设置为False
,并在将范围添加到图表后调用此方法。
所以这是更正后的代码。
IChartShapes cs = ws.Charts; // ws is the worksheet being generated
foreach (IChart cs1 in cs)
{
string strCName = cs1.Name;
IRange rngs = ws.Range[cs1.Name]; //chart name and named range are the same
cs1.PrimaryValueAxis.Font.Size = 4;
cs1.PrimaryCategoryAxis.Font.Size = 4;
cs1.DisplayBlanksAs = ExcelChartPlotEmpty.NotPlotted;
cs1.DataRange = rngs;
//// Answer added here ////
cs1.IsSeriesInRows = false; //This tells the chart that the series are to be picked from the row itself.
//// Answer ends here ////
IChartCategoryAxis csa = cs1.PrimaryCategoryAxis;
csa.CategoryLabels.WrapText = true;
}