【问题标题】:How to reposition the X Axis label in an excel spread sheet using C#如何使用 C# 在 Excel 电子表格中重新定位 X 轴标签
【发布时间】:2012-06-07 21:58:21
【问题描述】:

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

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

我正在编写一个 C# 程序 (VS2010) 来从导入的数据创建 Excel 电子表格。实际上,我没有问题创建具有所有正确数据和范围的电子表格。我不知道如何移动 X 轴的标签。我错过了一些简单的东西,但它总是出现在零线上,因为我的值变成负数,这意味着它就在图表的中间。现在,如果我使用模板,我可以将它放到我想要的位置,但我不想这样做。

这是一个代码片段:

         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"); (

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

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

感谢您的帮助。

【问题讨论】:

    标签: c# visual-studio-2010 excel


    【解决方案1】:

    虽然它完全没有记录,但这个命令可以工作: chart.Axes(2).CrossesAt = chart.Axes(2).MinimumScale;

    【讨论】:

    • 真的有点像拼图游戏。您会注意到该页面没有提及 CrossesAt 或 MinimumScale 调用。但那里还有其他同样有价值的信息。我不知道您是如何找到该链接的,因为当我搜索时,这是我以msdn.microsoft.com/query/… 结尾的链接我的链接中没有示例。不过感谢您的跟进,我真的很感激!
    • 哦,事实证明,虽然那个 PARTICULAR 命令有效,但其他命令都没有(比如这个 onechart.Axes(2).DisplayUnit = ...)。
    【解决方案2】:

    如果您想将 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 互操作性)。

    【讨论】:

    • 对不起,这些命令似乎只适用于 VB。不过谢谢。
    • 那行不通,但这段代码可以:chart.Axes(2).CrossesAt = chart.Axes(2).MinimumScale;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多