使用openpyx在两个excel单元格之间画一条线

2021-05-13 14:55:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用openpyxl在Excel工作表的两个(非相邻)单元格的中心之间画一条线。在

使用openpyxl,我创建了一个相当大的查找表。查寻表中的许多点都是从一个满是已知点的手插值而来的。在

我想在使用已知点创建的单元格之间绘制线条。这些线会在一定程度上圈出插值的区域。在

预期结果:
(这是实际Excel生成的电子表格,行是在Excel中手工添加的。我想自动绘制线条。)在

enter image description here

在这种情况下,白细胞是已知的数据点。绿色(ish)单元格位于边界三角形的内部。雷迪什蓝色在外面。 此工作表中的所有数据都是通过使用openpyxl的新工作表填充的。在

openpyxl文档暗示这是可能的,但我不明白如何实现。在

大致如下:

ws.Line['A1':'P17].style['heavy','black']

我想这就是我要找的。在

[更多数据]

使用Excel和win32com我可以自动绘制这些线条。在

^{pr2}$

然而,为了克服Excel的其他限制,我不得不使用openpyxl离线创建这个。Other_Limitations
所以,我想重新表述一下我的问题:
openpyxl甚至能画线吗?

我开始想我必须用openpyxl创建电子表格,然后用Excel打开新创建的工作簿并用Excel画线。在

2条回答
网友
1楼 ·

所以我最初的问题是,这是否可以用Openpyxl来实现 这个问题仍然存在。在

不过,我的解决方案是在Excel中直接用win32com/Python绘制线条。
这对我的情况不太理想,但很管用。在

def Drawline(Sheet,Start,End):
    StartCell = Sheet.Cells(Start[0],Start[1])
    StartAdjacent = Sheet.Cells(Start[0]+1,Start[1]+1)
    EndCell = Sheet.Cells(End[0],End[1])
    EndAdjacent = Sheet.Cells(End[0]+1,End[1]+1)
    Y1 = ( StartCell.Top + StartAdjacent.Top ) / 2
    X1 = ( StartCell.Left + StartAdjacent.Left ) / 2
    Y2 = ( EndCell.Top + EndAdjacent.Top ) / 2
    X2 = ( EndCell.Left + EndAdjacent.Left ) / 2
    Sheet.Shapes.AddLine(X1,Y1,X2,Y2)

这将在图纸上从起点中心到终点中心绘制一条线。在

网友
2楼 ·

我真的不认为Excel适合这个。绘图子系统使用与工作表本身完全不同的坐标系。因此,虽然有可能在两个单元格之间“锚定”一个图形,但是比例将非常难以计算。在

我确信matplotlib、seaborn或其他图形库有更适合这项工作的工具。在

相关问题