Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2023, 20:09   #1
Esprit
Пользователь
 
Регистрация: 14.12.2023
Сообщений: 30
По умолчанию Копирование текста с сохранением форматирования

Я создаю журнал буфера обмена (подобный журнал есть на windows 10) - сохранение копий текста в списке для их последующего использования. В упрощенном виде принцип работы кода такой:
If pyperclip.paste():
List.append(pyperclip.paste()) Проблема в том, что, когда я извлекаю какой-либо элемент (копию текста) из списка List и вставляю его в word, все исходное форматирование (шрифт, курсив и т.д.) теряются и вставляется просто текст без форматирования, а скопированные таблицы вообще не отображаются (я уже понял, что pyperclip копирует только текст). Я думал копать в строну модуля win32clipboard, но информация подается очень сложно, и ее мало, мне новичку непонятно. Что делать?
Esprit вне форума Ответить с цитированием
Старый 14.12.2023, 20:58   #2
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

и сколько фрагментов из буфера обмена получаете в переменную? для справки - ворд умеет держать в памяти 24 объекта, можно код имеющегося?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 14.12.2023, 21:12   #3
Esprit
Пользователь
 
Регистрация: 14.12.2023
Сообщений: 30
По умолчанию

Что значит фрагментов?
Esprit вне форума Ответить с цитированием
Старый 14.12.2023, 21:17   #4
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

Цитата:
Сообщение от Esprit Посмотреть сообщение
фрагментов
=объектов))
Ципихович Эндрю вне форума Ответить с цитированием
Старый 14.12.2023, 21:39   #5
Esprit
Пользователь
 
Регистрация: 14.12.2023
Сообщений: 30
По умолчанию

Я не очень понимаю, новичок. Копирую текст с сайтов, с ворда грубо говоря так: pyperclip.copy(pyperclip.paste), после чего пытаюсь вставить его ворд (обычно он предлагает варианты вставки: вставить исходное форматирование (то есть стиль текста источника) либо вставить только текст (такая вставка подстраивается под общий стиль в ворде)), но после того как текст "пройдет" через pyperclip он вставляется в ворд только как голый текст. А мне нужно добиться, чтобы при вставке в ворд установился стиль источника текста (сайта, другого документа и т.д.)
Esprit вне форума Ответить с цитированием
Старый 14.12.2023, 21:48   #6
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

Цитата:
Сообщение от Esprit Посмотреть сообщение
Копирую текст с сайтов
програмно? тогда код программы приложите
Цитата:
Сообщение от Esprit Посмотреть сообщение
с ворда
програмно? тогда код программы приложите
Ципихович Эндрю вне форума Ответить с цитированием
Старый 14.12.2023, 21:49   #7
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

Цитата:
Сообщение от Esprit Посмотреть сообщение
грубо говоря так
не грубо, а точно как?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 14.12.2023, 21:54   #8
Esprit
Пользователь
 
Регистрация: 14.12.2023
Сообщений: 30
По умолчанию

import pyperclip
import keyboard
import tkinter as tk
from tkinter import ttk
from tkinter import *
from PIL import Image, ImageTk
import time
import win32gui
import win32api
import os






#список для накопления копий
spisok=[]
pyperclip.copy('')
sh=[]




#окно
root=Tk()
root.title('Advanced Сlipboard')
root.geometry('296x350')
root.resizable(width=False, height=False)
root.attributes("-topmost",True)
root.configure(bg='lightblue')
try:
i=os.path.abspath('ico.ico')#'C:/Users/Sonya/Documents/Bandicam/ic.ico'
icon = Image.open(i)
icon_photo = ImageTk.PhotoImage(icon)
root.iconphoto(True, icon_photo)
except:
pass



def move(event):
global hwnd
hwnd = win32gui.GetForegroundWindow()
if hwnd and hwnd!=0:
sh.append(hwnd)
if len(sh) > 20:
del sh[0:15]



root.bind('<Motion>', move)

def b1(event):
if hwnd!=0:
win32gui.SetForegroundWindow(hwnd)
else:
win32gui.SetForegroundWindow(sh[-1])
root.bind('<Button-1>', b1)

#функция копирования
def act():
if win32api.GetKeyboardLayout()==68748 313:
keyboard.press_and_release('ctrl+с' )
else:
keyboard.press_and_release('ctrl+c' )
el=pyperclip.paste()
if el and el not in spisok and el != '\r\n':
spisok.append(el)
time.sleep(0.3)
#дублер функции кнопки копирования с привязкой конфигурации кнопок
def act2():
if win32api.GetKeyboardLayout()==68748 313:
keyboard.press_and_release('ctrl+с' )
else:
keyboard.press_and_release('ctrl+c' )
el=pyperclip.paste()
if el and el not in spisok and el != '\r\n':
spisok.append(el)


#кнопки
def configP1():
pyperclip.copy(spisok[0])
keyboard.press_and_release('ctrl+v' )
if len(spisok) >= 1:
p1=Button(root,text=spisok[0][:15],width=15,height=1,font=('Times New Roman',12),bg='white',command=confi gP1)
p1.place(x=0,y=0)

def configP2():
pyperclip.copy(spisok[1])
keyboard.press_and_release('ctrl+v' )
if len(spisok) >= 2:
p2=Button(root,text=spisok[1][:15],width=15,height=1,font=('Times New Roman',12),bg='white',command=confi gP2)
p2.place(x=0,y=30)

def configP3():
pyperclip.copy(spisok[2])
keyboard.press_and_release('ctrl+v' )
if len(spisok) >= 3:
p3=Button(root,text=spisok[2][:15],width=15,height=1,font=('Times New Roman',12),bg='white',command=confi gP3)
p3.place(x=0,y=60)

def configP4():
pyperclip.copy(spisok[3])
keyboard.press_and_release('ctrl+v' )
if len(spisok) >= 4:
p4=Button(root,text=spisok[3][:15],width=15,height=1,font=('Times New Roman',12),bg='white',command=confi gP4)
p4.place(x=0,y=90)




#кнопка копирования
def actact():
act()
act2()
k1=Button(root, text='Копировать',width=15,height=1 , font=('Times New Roman',12),bg='#556B2F', command=actact)
k1.place(x=0,y=315)

#кнопка очистки
def delete():
for widget in root.winfo_children():
widget.destroy()
k1=Button(root, text='Копировать',width=15,height=1 ,font=('Times New Roman',12),bg='#556B2F', command=actact)
k1.place(x=0,y=315)
k2=Button(root, text='Очистить',width=15,height=1,f ont=('Times New Roman',12),bg='#556B2F', command=delete)
k2.place(x=150,y=315)
spisok.clear()
pyperclip.copy('')
k2=Button(root, text='Очистить',width=15,height=1,f ont=('Times New Roman',12),bg='#556B2F', command=delete)
k2.place(x=150,y=315)



root.mainloop()
Esprit вне форума Ответить с цитированием
Старый 15.12.2023, 07:30   #9
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

Esprit - зачем такие пропуски между блоками? выкладывайте без абзацев и после выкладывания на форум нужно код выделить и нажать кнопку [CODE] - тогда в се отступы будут, а так они съехали
Ципихович Эндрю вне форума Ответить с цитированием
Старый 15.12.2023, 18:41   #10
Esprit
Пользователь
 
Регистрация: 14.12.2023
Сообщений: 30
По умолчанию

Код:
import pyperclip
import keyboard
import tkinter as tk
from tkinter import ttk
from tkinter import *
from PIL import Image, ImageTk
import time
import win32gui
import win32api
import os
#список для накопления копий
spisok=[]
pyperclip.copy('')
sh=[]
#окно	
root=Tk()
root.title('Advanced Сlipboard')
root.geometry('296x350')
root.resizable(width=False, height=False)
root.attributes("-topmost",True)
root.configure(bg='lightblue')
try:
	i=os.path.abspath('ico.ico')#'C:/Users/Sonya/Documents/Bandicam/ic.ico'
	icon = Image.open(i)
	icon_photo = ImageTk.PhotoImage(icon)
	root.iconphoto(True, icon_photo)
except:
	pass
def move(event):
	global hwnd
	hwnd = win32gui.GetForegroundWindow()
	if hwnd and hwnd!=0:
		sh.append(hwnd)
	if len(sh) > 20:
		del sh[0:15]
root.bind('<Motion>', move)
def b1(event):
	if hwnd!=0:
		win32gui.SetForegroundWindow(hwnd)
	else:
		win32gui.SetForegroundWindow(sh[-1])
root.bind('<Button-1>', b1)
#функция копирования 
def act():
	if win32api.GetKeyboardLayout()==68748313:
		keyboard.press_and_release('ctrl+с')
	else:
		keyboard.press_and_release('ctrl+c')
	el=pyperclip.paste()
	if el and el not in spisok and el != '\r\n':
		spisok.append(el)
	time.sleep(0.3)
#дублер функции кнопки копирования (так нужно:))
def act2():
	if win32api.GetKeyboardLayout()==68748313:
		keyboard.press_and_release('ctrl+с')
	else:
		keyboard.press_and_release('ctrl+c')
	el=pyperclip.paste()
	if el and el not in spisok and el != '\r\n':
		spisok.append(el)
	#кнопки	
	def configP1():
		pyperclip.copy(spisok[0])
		keyboard.press_and_release('ctrl+v')
	if len(spisok) >= 1:
		p1=Button(root,text=spisok[0][:15],width=15,height=1,font=('Times New Roman',12),bg='white',command=configP1)
		p1.place(x=0,y=0)
	def configP2():
		pyperclip.copy(spisok[1])
		keyboard.press_and_release('ctrl+v')
	if len(spisok) >= 2:
		p2=Button(root,text=spisok[1][:15],width=15,height=1,font=('Times New Roman',12),bg='white',command=configP2)
		p2.place(x=0,y=30)
	def configP3():
		pyperclip.copy(spisok[2])
		keyboard.press_and_release('ctrl+v')
	if len(spisok) >= 3:
		p3=Button(root,text=spisok[2][:15],width=15,height=1,font=('Times New Roman',12),bg='white',command=configP3)
		p3.place(x=0,y=60)
	def configP4():
		pyperclip.copy(spisok[3])
		keyboard.press_and_release('ctrl+v')
	if len(spisok) >= 4:
		p4=Button(root,text=spisok[3][:15],width=15,height=1,font=('Times New Roman',12),bg='white',command=configP4)
		p4.place(x=0,y=90)
#кнопка копирования	
def actact():
	act()
	act2()
k1=Button(root, text='Копировать',width=15,height=1, font=('Times New Roman',12),bg='#556B2F', command=actact)
k1.place(x=0,y=315)
#кнопка очистки 
def delete():
	for widget in root.winfo_children():
		widget.destroy()
	k1=Button(root, text='Копировать',width=15,height=1,font=('Times New Roman',12),bg='#556B2F', command=actact)
	k1.place(x=0,y=315)
	k2=Button(root, text='Очистить',width=15,height=1,font=('Times New Roman',12),bg='#556B2F', command=delete)
	k2.place(x=150,y=315)
	spisok.clear()
	pyperclip.copy('')
k2=Button(root, text='Очистить',width=15,height=1,font=('Times New Roman',12),bg='#556B2F', command=delete)
k2.place(x=150,y=315)
root.mainloop()
Esprit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование текста из RichEdit в EXCEL построчно с сохранением формата okunevskiy Общие вопросы Delphi 2 09.03.2016 16:04
перенести документ Word (таблица) в MS Excel c сохранением форматирования или обеспечить всплывающие подсказки в Word Serge_Bliznykov Microsoft Office Word 6 11.07.2011 11:02
Копирование значений и форматирования Eugenio Microsoft Office Excel 21 22.03.2010 19:28
Копирование таблицы без потери форматирования k1r1ch Microsoft Office Excel 3 09.07.2009 11:00
RichText1 с сохранением форматирования andrey4623 Общие вопросы Delphi 1 23.03.2008 21:06