使用openpyxl在两个Excel单元格之间画一条线

时间:2019-02-14 17:07:08

标签: python excel openpyxl

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

使用openpyxl我创建了一个相当大的查找表。查找表中的许多点都是从充满已知点的手中插入的。

我想在使用已知点创建的单元格之间画线。这些线会有点圈出内插的区域。

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

enter image description here

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

openpyxl文档暗示这是可能的,但我不知道如何。

类似的东西:

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

我想这就是我想要的。

[更多数据]

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

line = ws.Shapes.Addline(3,4,70,80).Line

但是由于Excel中的其他限制,我必须使用openpyxl离线创建此文件。 Other_Limitations
因此,重新表达我的问题:
openpyxl还能画线吗?

我开始认为我将不得不使用openpyxl创建电子表格,然后使用Excel打开新创建的工作簿并使用Excel绘制线条。

2 个答案:

答案 0 :(得分:0)

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

我确定matplotlib,seaborn或其他图形库具有更适合此工作的工具。

答案 1 :(得分:0)

所以我最初的问题是,是否可以使用 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)

这将在“开始”的中心到“图纸上的结束”的中心之间绘制一条线。