如何使用C#在excel电子表格中重新定位X轴标签

时间:2012-06-06 19:05:31

标签: c# visual-studio-2010 excel

我已经在MS论坛中发布了这个问题,但唯一的回应(创建一个宏并从VBA代码中推断出来)并没有帮助。我得到的唯一模糊提示是使用TickLabelPosition - 这显然只有在您使用VB时才有用,而且我使用的是C#

我想做的事情应该是世界上最简单和最常见的事情:我只想将X轴标签移动到图表的底部。这有多难?好吧,我承认我在C#或Excel互操作中没有过多的经验,但目前似乎不可能。

我正在编写一个C#程序(VS2010)来从导入的数据创建Excel电子表格。实际创建包含所有正确数据和范围的电子表格没有问题。我不知道的是如何移动X轴的标签。它必须是我想要的简单事物,但事情总是出现在零线上,因为我的价值观是负面的,这意味着它正好在图表的中间。如果我使用模板,现在我可以把它放到我想要的位置,但我不想这样做。

这是一个代码snippit:

         const string topLeft = "A9";
        const string bottomRight = "B18";
        const string graphTitle = "Graph Title";
        const string xAxis = "Time";
        const string yAxis = "Value";
        string chartTabName;


        var range = workSheet.get_Range(topLeft, bottomRight);    

// Add chart.
var charts = workSheet.ChartObjects() as
    Microsoft.Office.Interop.Excel.ChartObjects;


var chartObject = charts.Add(20, 20, 750, 500) as
    Microsoft.Office.Interop.Excel.ChartObject;
var chart = chartObject.Chart;

// Set chart range.

chart.SetSourceData(range);

chart.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlXYScatterSmooth;

// chart.ApplyChartTemplate(@" Chart1.crtx"); (< - template)

chart.ChartWizard(Source: range,
    Title: graphTitle,
    CategoryTitle: xAxis,
    ValueTitle: yAxis);

使用此项将水平值轴置于图表的中间,因为x轴变为负值。现在我可以手动移动,或者使用图表模板(就像我一样),但这不是最好的计划。最好的计划是以编程方式移动它,但我找不到办法。我可以找到一种方法来移动LEGEND(chart.Legend)而不是值。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

虽然它完全没有记录,但此命令仍然有效: chart.Axes(2).CrossesAt = chart.Axes(2).MinimumScale;

答案 1 :(得分:0)

如果要将X轴标签移动到“低”位置,以下是VBA中的代码可能会有所帮助:

chart.Axes(xlCategory).TickLabelPosition = xlLow

常量定义为:

Const xlCategory = 1
Const xlLow = -4134 (&HFFFFEFDA)

如果你想移动整个X轴(标签和刻度线),这里是VBA代码:

chart.Axes(xlValue).CrossesAt = -15

其中-15是Y范围内的最小数字。请注意,我们实际上是在修改Y轴:

Const xlValue = 2

我意识到你要求提供C#代码,但这很容易转换为C#(我没有一个Visual Studio项目可以方便地测试Excel Interop)。