代码之家  ›  专栏  ›  技术社区  ›  code4life

Excel vsto调用v2003和v2007之间的结果不同-为什么?

  •  0
  • code4life  · 技术社区  · 14 年前

    我的Excel2003加载项中有这段C代码:

    var leafPoint = m_worksheet.Shapes.Item("aPoint").Duplicate();
    
    leafPoint.Name = "Shape" + (m_shapesNameIndex++).ToString();
    leafPoint.OnAction = m_worksheet.CodeName + ".PointClicked";
    leafPoint.AlternativeText = 
    
    string.Format("Correlation Value: {0}",     
        item.PointData.Correlation.ToString("0.0000;-0.0000"));
    
    leafPoint.Top = item.LeftChildNode.Top + 
        ((item.RightChildNode.Top - item.LeftChildNode.Top) / 2) + 
        (leafPoint.Height / 2);
    

    当我在Excel2003中运行它时,它工作得很好。但是,当我在Excel2007中运行它时,形状的最大值为off…它总是比预期位置高出几个像素!

    当我查看日志时,在Excel2003中,形状始终被放置在正确的位置,但在Excel2007中,当代码试图放置形状的顶部位置时,Excel2007似乎出于某种原因覆盖了该值(我认为)。

    例如,在一种情况下, leafPoint.Top 值解析为 206.25 . 在Excel2003中,这确实是结果。然而,在Excel2007中,这个值最终变成了 204.2954

    有人对这个问题有什么见解吗?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Todd Main    14 年前

    这是 .Duplicate 执行此操作的函数。它不能复制相同的 .Top .Left . 我的猜测是,变化是由于客户反馈无法找到他们复制的形状(您可以手动复制,也可以选择形状并单击 CTRL+D .

    你可以把它们发到原始形状的 顶部 . 。下面是VBA中的一个示例:

    Sub AddShapeAndDuplicate()
        Dim sh As Shape
        Set mysheet = Worksheets(1)
        With mysheet.Shapes
        Set sh = .AddShape(msoShapeRectangle, 144, 144, 72, 72)
            With sh
                .Name = "Red Square"
                .Fill.ForeColor.RGB = RGB(255, 0, 0)
            End With
        End With
    
        Dim sh2 As Shape
        Set sh2 = sh.Duplicate
        With sh2
            .Top = sh.Top
            .Left = sh.Left
        End With
    End Sub
    
        2
  •  0
  •   code4life    14 年前

    我终于明白了。基于此链接 Excel 2007 Service Pack 2 – the official fix list ,它在固定的错误中提到:

    的Top属性的值 线条对象受缩放级别的影响。 这会导致错误放置 设置此值时的线条形状 以编程方式到工作表上的行 它被放大到除 100%。

    我想如果线条对象受到影响,可能形状对象也有问题吗?

    所以我检查了我的模板,实际上,它被设置为80%。(顺便说一下,行对象工作得很好,因为我的Excel版本安装了SP2)。当我将缩放级别设置为100%时,形状对象会突然渲染到预期的位置。

    另一个注意事项: 这个问题只发生在 在期间 致使。绘制完所有形状后,我可以将缩放级别设置为所需的任何级别,并且形状本身的位置也会正确。

    结论: 在Excel中绘制形状时, 总是 将缩放级别设置为100%。完成所有绘图后,可以将缩放级别设置回原始所需的缩放。