Нарисуйте линию между двумя ячейками Excel, используя openpyxl - PullRequest
0 голосов
/ 14 февраля 2019

Я хотел бы нарисовать линию между центрами двух (несмежных) ячеек на рабочем листе Excel, используя openpyxl.

Используя 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 голосов
/ 01 марта 2019

Итак, мой первоначальный вопрос был, можно ли это сделать с помощью Openpyxl .
Этот вопрос остается в силе.

Однако вот мое решение рисовать линии с помощью win32com / Python в Excelнапрямую.
Это не идеально для моей ситуации, но работает.

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)

Это проведет линию от центра Начала к центру Конца на Листе.

0 голосов
/ 14 февраля 2019

Я действительно не думаю, что Excel подходит для этого.Подсистема рисования использует совершенно другую систему координат для самой таблицы.Таким образом, хотя можно «привязать» чертеж между двумя ячейками, пропорции будет чрезвычайно трудно вычислить.

Я уверен, что в библиотеках matplotlib, seaborn или других графических сред есть инструменты, более подходящие для этой работы.

...