[*] Автоматически обнаруживает, когда копируется новый текст. Html для обеспечения совместимости. < /Li>
< /ul>
< /li>
Преобразование в docx: < /p>
использует LibreOffice для преобразования HTML в DOCX. < /Li>
< /ul>
< /li>
Подключается к LibreOffice в режиме без головы. < /Li>
Открывает документ .docx < /code>. Текст: < /p>
Пользователь может вставить текст в любую другую программу при поддержании форматирования. При попытке открыть документ .docx с использованием API LibreOffice uno, я получаю следующую ошибку:
< /code>
Вот мой текущий код: < /p>
def copy_from_libreoffice(docx_file):
"""Opens LibreOffice via API and copies formatted content"""
try:
print("
loader = Lo.load_office(Lo.ConnectPipe())
# **Absolute path of the document**
doc_path = Path(docx_file).resolve(strict=False) # Uses Pathlib to create an absolute path
doc_path_str = os.path.abspath(str(doc_path))
# ** Debug: Verify values before opening the document**
print(f"Absolute document path: {doc_path_str}")
print(f"Received path type: {type(doc_path_str)}")
# **Check if the file really exists before trying to open it**
if not doc_path.exists():
print(f"Error: The path {doc_path_str} does not exist!")
return
# **
try:
doc = Write.open_doc(loader, doc_path) # **This line may be causing the error**
except Exception as e:
print(f"Error opening document in LibreOffice: {e}")
return
if not doc:
print("Error opening document in LibreOffice!")
return
print("Document opened successfully!")
# Create cursor to select all content
cursor = Write.get_cursor(doc)
cursor.gotoStart(False) # Move to the beginning of the document
cursor.gotoEnd(True) # Select all content
# Copy to system clipboard
Write.copy_selected_text(doc)
time.sleep(1) # Small delay to ensure content is copied
# Retrieve copied content
clipboard_text = pyperclip.paste()
if clipboard_text.strip():
print("Text copied successfully!")
else:
print("No content copied!")
except TypeError as te:
print(f"
except Exception as e:
print(f"
< /code>
Я не привязан к текущему подходу. Все, что мне нужно, - это простой способ копировать форматированный контент с .docx в буфер обмена, гарантируя, что: < /p>
Жирный, курсив, подчеркивание и цвета сохраняются. установлен. Write.open_doc () .
Отладил результаты doc_path , чтобы подтвердить, что это была действительная строка. /> Этот скрипт Python воспроизводит проблему: < /p>
Запуск LibreOffice в режиме без головы. < /li>
Открытие файла .docx. < /li>
Попытка копировать его контент.import os
import time
import pyperclip
from pathlib import Path
# Configura as variáveis de ambiente do UNO para que ele seja encontrado
os.environ["URE_BOOTSTRAP"] = "vnd.sun.star.pathname:C:/Program Files/LibreOffice/program/fundamental.ini"
os.environ["UNO_PATH"] = "C:/Program Files/LibreOffice/program"
os.environ["PATH"] += os.pathsep + os.environ["UNO_PATH"]
sys.path.append(os.environ["UNO_PATH"])
from ooodev.loader.lo import Lo
from ooodev.write import Write
# Path to the DOCX file
DOCX_PATH = "C:\\caminho_arquivo_exemplo\\output.docx"
def copy_from_libreoffice(docx_file):
"""Open LibreOffice and copy formatted text."""
try:
print("
loader = Lo.load_office(Lo.ConnectPipe())
# Convert path to absolute string
doc_path = Path(docx_file).resolve(strict=False)
doc_path_str = str(doc_path)
print(f"
print(f"
# Open DOCX in LibreOffice
doc = Write.open_doc(loader, doc_path_str) #
if not doc:
print("
return
print("
# Select all text
cursor = Write.get_cursor(doc)
cursor.gotoStart(False)
cursor.gotoEnd(True)
# Copy selected text
Write.copy_selected_text(doc)
time.sleep(1)
# Retrieve copied content
clipboard_text = pyperclip.paste()
if clipboard_text.strip():
print("
else:
print("
except Exception as e:
print(f"
copy_from_libreoffice(DOCX_PATH)
Подробнее здесь: https://stackoverflow.com/questions/795 ... ng-docx-in