【问题标题】:Draw a line between two excel cells using openpyxl使用openpyxl在两个excel单元格之间画一条线
【发布时间】:2019-02-14 17:07:08
【问题描述】:

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

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

我想在使用已知点创建的单元格之间画线。这些线会在某种程度上圈出被插值的区域。

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

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

openpyxl 文档提示这是可能的,但我不明白如何。

类似的东西:

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

我想这就是我要找的。​​p>

[更多数据]

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

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

但是对于 Excel 中的其他限制,我必须使用 openpyxl 离线创建它。 Other_Limitations
所以重新表述我的问题:
openpyxl 甚至可以画线吗?

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

【问题讨论】:

    标签: python excel openpyxl


    【解决方案1】:

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

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

    【讨论】:

    • Excel 不是理想的工具。我同意。然而,这是我所坚持的。此电子表格的结果用于其他电子表格。结果和着色都用于其他工作表。这些线条只是为了帮助可视化映射中某些数据的来源。
    【解决方案2】:

    所以我最初的问题是这是否可以通过 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)
    

    这将在图纸上从 Start 的中心到 End 的中心绘制一条线。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      相关资源
      最近更新 更多