同一行上的Excel单元报告不同的顶部位置

我用C#编写了一个Excel电子表格(快乐!),并且在Range.Top属性中看到了奇怪的行为。

我正在build立一个networking图(请不要问我为什么使用Excel,但知道这不是我的决定,它不能改变),所以许多单元(节点)通过线(弧)连接使用Worksheet.Shapes.addLine(...)绘制。 不幸的是,我的许多弧线与我的节点没有很好的结合。

每次我向图中添加一个节点(通过用节点ID填充单元格的值),我查询它的位置,以便我可以计算它的中心,并将其用作线路锚点。

在我看到的一个例子中,我debugging时添加了两个节点,一个在单元格C3,另一个在E3。 对于每个单元格Range.Top属性给出了一个不同的数字!

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

我已经阅读了手册 ,测量是在行的顶端,而不是与其内容有关,所以我没有理由为什么财产应该改变在这里。

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

任何Excel大师可以解释这个非常奇怪的结果,还是告诉我我在哪里造成的问题? 非常感谢。

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

我试图在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 

我没有find。对于同一行中的单元格, .Top是不同的,尽pipe我用各种线条粗细的范围围绕.VerticalAlignment和框进行了试验。

在至less一个单元上具有不同的线.Top变化 – 但是两个单元同步。 两个单元的线宽都不同。 .Top走粗线。

我的MsgBox R1和R2之间的一个区别可以看作合并的单元格: R1.Height报告总高度,而R2.Height报告第一个单元格的高度。

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