我想使用openpyxl在Excel工作表中的两个(不相邻)单元格的中心之间画一条线。
使用openpyxl我创建了一个相当大的查找表。查找表中的许多点都是从充满已知点的手中插入的。
我想在使用已知点创建的单元格之间画线。这些线会有点圈出内插的区域。
预期结果:
(这是实际的Excel生成的电子表格,线条是在Excel中手动添加的。我想使线条图自动化。)
在这种情况下,白色单元格是已知的数据点。绿色(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绘制线条。
答案 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)
这将在“开始”的中心到“图纸上的结束”的中心之间绘制一条线。