Ошибка: ожидаемый STR, Bytes или OS.Pathlike, а не Pyuno при открытии DOCX в API LibreOffice UnoPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка: ожидаемый STR, Bytes или OS.Pathlike, а не Pyuno при открытии DOCX в API LibreOffice Uno

Сообщение Anonymous »

Система буферизащика контролирует буфер обмена пользователя и процессы, скопированный текст, гарантируя, что форматирование форматирования документа. Он использует LibreOffice через API UNO для манипулирования .docx < /code> файлы, преобразование HTML в DOCX и копирование форматированного контента в буфер обмена. Дублирование. < /li>
[*] Автоматически обнаруживает, когда копируется новый текст. Html для обеспечения совместимости. < /Li>
< /ul>
< /li>
Преобразование в docx: < /p>

использует LibreOffice для преобразования HTML в DOCX. < /Li>
< /ul>
< /li>



Подключается к LibreOffice в режиме без головы. < /Li>
Открывает документ .docx < /code>. Текст: < /p>

Пользователь может вставить текст в любую другую программу при поддержании форматирования. При попытке открыть документ .docx с использованием API LibreOffice uno, я получаю следующую ошибку:
❌ Unexpected error copying from LibreOffice: expected str, bytes or os.PathLike object, not pyuno
< /code>
Вот мой текущий код: < /p>
def copy_from_libreoffice(docx_file):
"""Opens LibreOffice via API and copies formatted content"""
try:
print("🔄 Connecting to LibreOffice...")
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

# **🔹 Attempt to open the document differently**
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"❌ TypeError: {te} -> The path might be interpreted as the wrong object.")
except Exception as e:
print(f"❌ Unexpected error copying from LibreOffice: {e}")
< /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("🔄 Connecting to LibreOffice...")
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"📂 Document Path: {doc_path_str}")
print(f"📂 Path Type: {type(doc_path_str)}") # Expected

# Open DOCX in LibreOffice
doc = Write.open_doc(loader, doc_path_str) # ❌ ERROR HAPPENS HERE
if not doc:
print("❌ Failed to open document in LibreOffice!")
return

print("✅ Document opened successfully!")

# 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("✅ Text copied successfully!")
else:
print("⚠️ No content copied!")

except Exception as e:
print(f"❌ Error copying from LibreOffice: {e}")

copy_from_libreoffice(DOCX_PATH)



Подробнее здесь: https://stackoverflow.com/questions/795 ... ng-docx-in
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»