Вставьте Texbox в Excel, используя Python

Мне нужно вставить текстовое поле в лист Excel с помощью Python, я пробовал openpyxl, openpyxl.drawing.shape, точнее, xlsxwriter и другие, но это просто не работает.

from openpyxl import Workbook
from openpyxl.drawing.text import Paragraph, ParagraphProperties
from openpyxl.drawing.text import CharacterProperties
from openpyxl.drawing.shape import Shape

# Create a shape
shape = Shape()

# Initialize GraphicalProperties
graphical_properties = GraphicalProperties()

# Assign GraphicalProperties to spPr
shape.spPr = graphical_properties

# Add the shape to the worksheet
sheet.add_shape(shape)

# Save the workbook
workbook.save("output.xlsx")

Это последний код, который я пробовал.

Вы можете попробовать xlsxwriter, как в этом посте: stackoverflow.com/questions/39773544/…

rachel 26.03.2024 05:32

Я попробовал это, но выдал мне эту ошибку: xlwrsheet.insert_textbox(rrow,ccol,ttxt, xlwropts) AttributeError: объект «NoneType» не имеет атрибута «insert_textbox»

Berny 26.03.2024 16:19

Ваша проблема с предложенным кодом Xlsxwriter, скорее всего, связана с примером определения рабочего листа. В новой книге нет листа, который можно было бы найти по имени. Скорее всего, вы получили ошибку потому, что xlwrsheet не был объектом рабочего листа Xlsxwriter. Измените строку на xlwrsheet = xlwrwb.add_worksheet(). Обратите внимание также на Xlsxwriter; этот модуль создает новые книги, но не может открывать существующие книги.

moken 27.03.2024 00:49

Что, если вы просто скопируете пример из этого документа XlsxWriter: tutorialspoint.com/python_xlsxwriter/…

rachel 27.03.2024 01:25

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

Berny 27.03.2024 02:17

Формы действительно очень сложные. OOXML является общим для всех приложений и чрезвычайно абстрактным. Openpyxl 3.2 будет включать поддержку чтения/записи фигур, но я бы не рекомендовал ее для клиентского кода.

Charlie Clark 27.03.2024 11:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
186
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Openpyxl не очень хорошо работает с фигурами, поэтому лучше использовать Xlsxwriter, как уже упоминалось, или, если вы хотите добавить что-то в существующую книгу, вы можете использовать Xlwings или win32com.

Код ниже является примером для Xlwings;

Команда AddShape взята из Excel, а тип фигуры — из перечисления MsoAutoShapeType, например. 1 — прямоугольник, 9 — круг.

import xlwings as xw
from xlwings.utils import rgb_to_int

excel_file = 'shapes.xlsx'
with xw.App(visible=True) as app:
    wb = xw.Book(excel_file)
    ws = wb.sheets('Sheet1')

    ### Excel AddShape command, Values are Type, Left, Top, Width & Height
    shape1 = ws.api.Shapes.AddShape(1, 100, 50, 150, 30)  # 1 is a rectangle
    shape2 = ws.api.Shapes.AddShape(9, 1, 1, 20, 20)  # 9 is a circle

    shape1_name = shape1.Name
    shape1.Fill.ForeColor.RGB = rgb_to_int((255,233,0))

    shape2.TextFrame2.TextRange.Text = "Hello There"

    ### Some parameters are accessible from ws.shapes
    for shape in ws.shapes:
        if shape.name == shape1_name:
            shape.characters.api.Text = f"Shape Name = {shape.name}"
            shape.characters.font.name = 'Arial'
            shape.characters.font.color = (0,0,0)
            shape.characters.font.bold = True

            ### You can also add a macro to the object
            # shape.api.OnAction = "sample_sub"

    wb.save(excel_file)

Это работает, он открывает файл, в конце создает текстовое поле: wb.save(file) он показывает эту ошибку и останавливает цикл: self.impl.save(path, пароль=пароль) self.xl.SaveAs( v = self .__method(*args, **kwargs) в SaveAs возвращает self._oleobj_.InvokeTypes(3174, LCID, 1, (24, 0), ((12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (3, 49), (12, 17), (12, 17), (12, 17), (12, 17), (12 , 17), (12, 17)), Имя файла pywintypes.com_error: (-2147352567, «Произошло исключение.», (0, «Microsoft Excel», «Невозможно получить доступ к Brand_Health_Tracker - 2 03-26-2024.xlsx». ", 'xlmain11.chm', 0, -2146827284), Нет)

Berny 27.03.2024 03:22

Я пытаюсь представить ситуацию, в которой могла бы произойти такая ошибка. Вы упоминаете цикл, сохраняете ли вы книгу каждый раз во время цикла и записи в файл XLSX? В этом случае вам следует сохранять файл только один раз, в конце после записи всех данных и перед выходом из кода. Или это файл «Brand_Health_Tracker — 2 03-26-2024.xlsx». находится на диске, к которому вы можете потерять доступ? В противном случае мне, вероятно, нужно было бы посмотреть, что у вас за код (около раздела сохранения).

moken 27.03.2024 04:16

Независимо от существования файла, wb.save('Brand_Health_Tracker - 2 03-26-2024.xlsx') должен перезаписать существующий файл или создать и записать файл.

moken 27.03.2024 04:19

Другие вопросы по теме