2011-12-19 29 views
1

我编程构建在C#中的Excel电子表格(快乐!),我在Range.Top财产看到怪异行为。Excel单元格报告不同的顶部位置

我建立一个网络图(请不要问我为什么使用Excel,但知道这是不是我决定的,它不能改变)这么多的细胞(节点)由线连接的(弧)使用Worksheet.Shapes.addLine(...)绘制。不幸的是,我的许多弧线与我的节点没有很好的结合。

每次我将节点添加到所述图(通过填充一个单元格的值与节点ID)我查询其位置,这样我可以计算其中心,并使用它作为一个线锚定点。

在一个示例中调试时我在E3添加两个节点,在1小区C3和2 I所看到的。对于每个单元格,Range.Top属性会给出不同的数字!

Range cell = ws.Cells[3, 3]; // y (rows) before x (cols) 
node.renderSmallerX = Convert.ToDouble(cell.Left); // e.g. 100 
node.renderSmallerY = Convert.ToDouble(cell.Top); // e.g. 100 
node.renderLargerX = node.renderSmallerX + Convert.ToDouble(cell.Width); // e.g. 130 
node.renderLargerY = node.renderSmallerY + Convert.ToDouble(cell.Height); // e.g. 115 

// ... (next loop) 

Range cell = ws.Cells[3, 5]; 
node.renderSmallerX = Convert.ToDouble(cell.Left); // e.g. 100 
node.renderSmallerY = Convert.ToDouble(cell.Top); // e.g. 114.25 
node.renderLargerX = node.renderSmallerX + Convert.ToDouble(cell.Width); // e.g. 130 
node.renderLargerY = node.renderSmallerY + Convert.ToDouble(cell.Height); // e.g. 129.25 

我已阅读the manual和测量是该行的顶部,并没有丝毫关系到它的内容,所以我认为没有理由物业应该在这里改变。

我对这个问题非常恼火,我现在要首先遍历所有必需的列和行来创建坐标字典,而不是查询单元格在使用时的位置,以便至少如果它们“他们错以同样的方式错了。

任何Excel的大师们能解释一下这个非常奇怪的结果,或者告诉我在哪里,我导致的吗?非常感谢。

编辑:应该提到 - .NET V4,V11的Microsoft.Office.Interop.Excel

+0

如果您不清楚您在示例代码中的第一个和第二个“顶部”测量之间做了什么,则很难进行调试。 – 2011-12-19 07:13:04

回答

2

我试图通过各种细胞上运行一个按键下面的代码来模拟在Excel 2003中的问题

Sub GetCoord() 
Dim R1 As Range, R2 As Range 

    Set R1 = Selection 
    Set R2 = Selection.Cells(1, 1) 

    MsgBox "T/L/W/H:" & vbCrLf & _ 
      R1.Top & "/" & R1.Left & "/" & R1.Width & "/" & R1.Height & vbCrLf & _ 
      R2.Top & "/" & R2.Left & "/" & R2.Width & "/" & R2.Height 

End Sub 

我没发现.Top对于同一行中的单元格是不同的,尽管我用.VerticalAlignment进行了实验,并且围绕具有各种线条粗细的范围进行了试验。

随着细胞上的.Top变化中的至少一个不同的线厚度 - 但在同步两个小区。两个单元的线条厚度不同,.Top的线条较粗。在我的MsgBox可以看出对于合并单元R1和R2之间

一个更差:R1.Height报告总高度而R2.Height仅报告所述第一小区的高度。

不是一个答案,但也许是一个灵感,你在哪里看下。

+0

这已经足够接近真正的问题来帮助我弄清楚了。我将单元格边框设置为“XlLineStyle.xlDouble”,据我所知,这应该无关紧要,因为.Top测量仍然在更改后进行,但将其更改为单个边界线可以解决问题。我很想弄清楚在这里发生了什么,但一如既往的预算意味着我必须对解决问题感到满意。 – tomfumb 2011-12-19 23:00:59

+0

@tomfumb所以对于'XlLineStyle.xlDouble'看来,heigth计算的定位点不在外线的外部,而是_somewhere_。这给了我一个dejavu ... MS可以有他们的_box models_ *大声笑*的根本问题。很高兴成为帮助 – MikeD 2011-12-21 00:10:04

相关问题