<!DOCTYPE html>
<html lang="es" dir="ltr">
<head>
<base href="../../../../">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>De BASIC a Python</title>
<link rel="shortcut icon" href="media/navigation/favicon.ico">
<link type="text/css" href="normalize.css" rel="Stylesheet">
<link type="text/css" href="prism.css" rel="Stylesheet">
<link type="text/css" href="default.css" rel="Stylesheet">
<script type="text/javascript" src="polyfills.js"></script><script type="text/javascript" src="languages.js"></script><script type="text/javascript" src="es/langnames.js"></script><script type="text/javascript" src="flexsearch.debug.js"></script><script type="text/javascript" src="prism.js"></script><script type="text/javascript" src="help2.js" defer></script><script type="text/javascript" src="a11y-toggle.js" defer></script><script type="text/javascript" src="paginathing.js" defer></script><script type="text/javascript" src="es/bookmarks.js" defer></script><script type="text/javascript" src="es/contents.js" defer></script><script type="text/javascript" src="help.js" defer></script><meta name="viewport" content="width=device-width,initial-scale=1">
</head>
<body>
<header id="TopLeftHeader"><a class="symbol" href="es/text/shared/05/new_help.html"><div></div></a><a class="logo" href="es/text/shared/05/new_help.html"><p dir="auto">Ayuda de LibreOffice 25.2</p></a><div class="dropdowns"><div class="modules">
<button type="button" data-a11y-toggle="modules-nav" id="modules" aria-haspopup="true" aria-expanded="false" aria-controls="modules-nav">Módulo</button><nav id="modules-nav" hidden=""></nav>
</div></div></header><aside class="leftside"><input id="accordion-1" name="accordion-menu" type="checkbox"><label for="accordion-1" dir="auto">Contenido</label><div id="Contents" class="contents-treeview"></div></aside><div id="SearchFrame"><div id="Bookmarks">
<input id="search-bar" type="search" class="search" placeholder="Buscar en los marcadores del módulo elegido" dir="auto"><div class="nav-container" tabindex="0"><nav class="index" dir="auto"></nav></div>
</div></div>
<div id="DisplayArea" itemprop="softwareHelp" itemscope="true" itemtype="http://schema.org/SoftwareApplication">
<noscript><div id="WarnJS"><h1 dir="auto">Active JavaScript en el navegador para mostrar las páginas de ayuda de LibreOffice.</h1></div></noscript>
<a id="N0430"></a> <meta itemprop="keywords" content="BASIC,llamadas a Python">
<meta itemprop="keywords" content="API,SimpleFileAccess">
<meta itemprop="keywords" content="API,PathSettings">
<meta itemprop="keywords" content="API,XScript">
<h1 id="hd_id811571848401485" dir="auto">
<a id="basic2python"></a>Invocar secuencias de Python desde Basic</h1>
<p id="N0432" class="paragraph" dir="auto">Se pueden invocar secuencias de Python desde las macros de LibreOffice Basic y así sacar provecho de funcionalidades como las siguientes:</p>
<ul itemprop="Unordered" itemscope="true" itemtype="http://schema.org/ItemList" dir="auto">
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0433" class="listitem" dir="auto">Posibilidad de identificar el valor de <span class="literal">ComputerName</span> o detectar <span class="literal">OSName</span>,</p></li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0434" class="listitem" dir="auto">Las funciones <span class="literal">FileLen()</span> de Basic y <a target="_blank" href="https://api.libreoffice.org/docs/idl/ref/servicecom_1_1sun_1_1star_1_1ucb_1_1SimpleFileAccess.html">com.sun.star.ucb.SimpleFileAccess.</a><span class="literal">getSize()</span> de la API tienen un límite máximo del tamaño de archivo de 2 Gigabytes que se puede superar con Python.</p></li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0435" class="listitem" dir="auto">Es posible normalizar <a target="_blank" href="https://api.libreoffice.org/docs/idl/ref/servicecom_1_1sun_1_1star_1_1util_1_1PathSettings.html">com.sun.star.util.PathSettings</a></p></li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0436" class="listitem" dir="auto">y mucho más.</p></li>
</ul>
<div class="tip">
<div class="noteicon" dir="auto"><img src="media/icon-themes/res/helpimg/tip.svg" alt="tip" style="width:40px;height:40px;"></div>
<div class="notetext"><p id="N0437" dir="auto">Se recomienda familiarizarse con las prestaciones de LibreOffice BASIC y la <a target="_blank" href="https://api.libreoffice.org/">interfaz de programación de aplicaciones (API)</a> antes de realizar invocaciones interlenguaje desde BASIC hacia Python, JavaScript u otro motor de ejecución de secuencias de órdenes.</p></div>
</div>
<br>
<h2 id="N0438" dir="auto">Recuperar secuencias de órdenes Python</h2>
<p id="N0439" class="paragraph" dir="auto">Las secuencias de Python pueden ser independientes, compartidas o estar incrustadas en los documentos. Para ejecutarlas, se deben incluir las ubicaciones de las secuencias de Python en LibreOffice Basic. Ubicando objetos UNO que se ajusten a la interfaz <a target="_blank" href="https://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1script_1_1provider_1_1XScript.html">com.sun.star.script.provider.XScript</a> permite que se ejecuten las secuencias de Python.</p>
<div class="bascode" itemscope="true" itemtype="http://schema.org/SoftwareSourceCode" itemprop="codeSampleType" content="snippet" data-tooltip="Pulse en el texto para copiarlo en el portapapeles"><pre dir="auto"><code class="language-visual-basic line-numbers">
Option Explicit
Public Function GetPythonScript(macro As String, _
Optional location As String) As com.sun.star.script.provider.Xscript
''' Tomar el objeto con las secuencias de Python antes de ejecutar
' Argumentos:
' macro : como «library/module.py$macro» o «module.py$macro»
' location: como «document», «share», «user» o ENUM(eración)
' Resultado:
' localizose el servicio de UNO com.sun.star.script.provider.XScript'''
If IsMissing(location) Then location = "user"
Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
Dim sp As Object ' compatible con com.sun.star.script.provider.XScriptProvider
Dim uri As String
If location="document" Then
sp = ThisComponent.getScriptProvider()
Else
mspf = CreateUnoService("com.sun.star.script.provider.MasterScriptProviderFactory")
sp = mspf.createScriptProvider("")
End If
uri = "vnd.sun.star.script:"& macro &"?language=Python&location="& location
GetPythonScript = sp.getScript(uri)
End Function ' GetPythonScript
</code></pre></div>
<h2 id="N0463" dir="auto">Ejecutar secuencias de órdenes de Python</h2>
<div class="embedded">
<a id="APIScriptingFramework"></a>
<p id="N0336" class="paragraph" dir="auto">El marco de programación de macros de la API (interfaz de programación de aplicaciones) de LibreOffice admite la ejecución de secuencias de órdenes entre Python y Basic u otros lenguajes de programación admitidos. Los argumentos se pueden pasar de un lado a otro entre llamadas, siempre que representen tipos de datos primitivos que ambos lenguajes reconozcan y suponiendo que el marco de programación de macros los convierta de forma adecuada.</p>
</div>
<h3 id="N0464" dir="auto">Sintaxis</h3>
<p id="N0465" class="paragraph" dir="auto"><span class="literal">workstation_name = script.invoke(Array(), Array(), Array())</span></p>
<p id="N0466" class="paragraph" dir="auto"><span class="literal">opSysName = script.invoke(Array(), in_outs, Array())</span> ' in_out es una matriz</p>
<p id="N0467" class="paragraph" dir="auto"><span class="literal">file_len = script.invoke(Array(systemFilePath), Array(), Array())</span></p>
<p id="N0468" class="paragraph" dir="auto"><span class="literal">normalizedPath = script.invoke(Array(systemFilePath), Array(), Array())</span></p>
<h3 id="N0469" dir="auto">Ejemplos de secuencias de órdenes incrustadas</h3>
<p id="N0470" class="paragraph" dir="auto">Las rutinas que se describen a continuación, <span class="literal">ComputerName</span> y <span class="literal">GetFilelen</span>, llaman a sus homólogas en Python utilizando la función <span class="literal">GetPythonScript</span> ya mencionada. No se detallará el tratamiento de excepciones.</p>
<div class="bascode" itemscope="true" itemtype="http://schema.org/SoftwareSourceCode" itemprop="codeSampleType" content="snippet" data-tooltip="Pulse en el texto para copiarlo en el portapapeles"><pre dir="auto"><code class="language-visual-basic line-numbers">
Option Explicit
Option Compatible ' Se admiten propiedades
Private scr As Object ' com.sun.star.script.provider.XScript
Private Property Get ComputerName As String
'''Nombre de la estación de trabajo'''
scr = GetPythonScript("Platform.py$computer_name", "document")
ComputerName = scr.invoke(Array(), Array(), Array())
End Property ' ComputerName
Private Function GetFilelen(systemFilePath As String) As Currency
'''Tamaño del archivo en bytes'''
scr = GetPythonScript("Os/Path.py$get_size", Script.ISEMBEDDED)
GetFilelen = scr.invoke(Array(systemFilePath), Array(), Array(),)
End Function ' GetFilelen
Private Type _SCRIPT_LOCATION
ISEMBEDDED As String ' secuencia de órdenes del documento
ISPERSONAL As String ' secuencia de órdenes del usuario
ISSHARED As String ' macro de LibreOffice
End Type ' _SCRIPT_LOCATION
Public Function Script() As Object ' Text enumeration
Static enums As _SCRIPT_LOCATION : With enums
If .ISEMBEDDED = "" Then
.ISEMBEDDED = "document" ' secuencia de órdenes del documento
.ISPERSONAL = "user" ' secuencias de órdenes del usuario
.ISSHARED = "share" ' macro de LibreOffice
End If : End With ' enums
Script = enums
End Function ' Script
</code></pre></div>
<p id="N0503" class="paragraph" dir="auto">Se llaman dos módulos del lenguaje de programación Python. Estos pueden o estar incrustados en el documento actual o estar almacenados en el sistema de archivos. La comprobación de los tipos de argumento se ha omitido para mayor claridad:</p>
<ul itemprop="Unordered" itemscope="true" itemtype="http://schema.org/ItemList" dir="auto">
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0504" class="paragraph" dir="auto">Platform.py</p></li>
</ul>
<div class="pycode" itemscope="true" itemtype="http://schema.org/SoftwareSourceCode" itemprop="codeSampleType" content="snippet" data-tooltip="Pulse en el texto para copiarlo en el portapapeles"><pre dir="auto"><code class="language-python line-numbers">
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import platform
def computer_name() -> str:
return platform.node()
def OSname() -> str:
return platform.system()
</code></pre></div>
<ul itemprop="Unordered" itemscope="true" itemtype="http://schema.org/ItemList" dir="auto">
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0515" class="paragraph" dir="auto">Os/Path.py</p></li>
</ul>
<div class="pycode" itemscope="true" itemtype="http://schema.org/SoftwareSourceCode" itemprop="codeSampleType" content="snippet" data-tooltip="Pulse en el texto para copiarlo en el portapapeles"><pre dir="auto"><code class="language-python line-numbers">
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import os.path
def get_size(systemFilePath: str) -> str:
return str(os.path.getsize(systemFilePath))
def normalyze(systemPath: str) -> str:
return os.path.normpath(systemPath)
</code></pre></div>
<h3 id="N0526" dir="auto">Ejemplos de secuencias personales o compartidas</h3>
<p id="N0527" class="paragraph" dir="auto">El mecanismo de llamada de las secuencias Python personales o compartidas es idéntico al de las secuencias incrustadas. Los nombres de las bibliotecas se asignan a carpetas. Calcular el perfil de usuario de LibreOffice y las rutas de los archivos de módulos compartidos se puede llevar a cabo como se detalla en <a target="_top" href="es/text/sbasic/python/python_session.html">Obtener información de la sesión</a>. Las rutinas que se describen a continuación, <span class="literal">OSName</span>, <span class="literal">HelloWorld</span> y <span class="literal">NormalizePath</span>, llaman a sus homólogas en Python utilizando la función <span class="literal">GetPythonScript</span> ya mencionada. No se detallará el tratamiento de excepciones.</p>
<div class="bascode" itemscope="true" itemtype="http://schema.org/SoftwareSourceCode" itemprop="codeSampleType" content="snippet" data-tooltip="Pulse en el texto para copiarlo en el portapapeles"><pre dir="auto"><code class="language-visual-basic line-numbers">
Option Explicit
Option Compatible ' Se admiten propiedades
Private scr As Object ' com.sun.star.script.provider.XScript
Private Property Get OSName As String
'''Nombre de plataforma, como «Linux», «Darwin» o «Windows»'''
scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
OSName = scr.invoke(Array(), Array(), Array())
End Property ' OSName
Private Sub HelloWorld()
'''ejemplo de Python compartido en LibreOffice'''
scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
scr.invoke(Array(), Array(), Array(),)
End Sub ' HelloWorld
Public Function NormalizePath(systemFilePath As String) As String
'''Quitar el «\..» superfluo de la ruta'''
scr = GetPythonScript("Os/Path.py$normalyze", "user")
NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
End Function ' NormalizePath
</code></pre></div>
<h2 id="N0550" dir="auto">Módulos estándares de Python</h2>
<p id="N0551" class="paragraph" dir="auto">La versión de Python incluida en LibreOffice contiene numerosas bibliotecas estándares que puede aprovechar. Entre sus funcionalidades se encuentran:</p>
<ul itemprop="Unordered" itemscope="true" itemtype="http://schema.org/ItemList" dir="auto">
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0552" class="listitem" dir="auto"><span class="emph">argparse</span>: analizador sintáctico para opciones, argumentos y subórdenes de consola</p></li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0553" class="listitem" dir="auto"><span class="emph">cmath</span>: funciones matemáticas para números complejos</p></li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0554" class="listitem" dir="auto"><span class="emph">csv</span>: lectura y guardado de archivos CSV</p></li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0555" class="listitem" dir="auto"><span class="emph">datetime</span>: tipos de fecha y hora genuinos</p></li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0556" class="listitem" dir="auto"><span class="emph">json</span>: codificador y descodificador de JSON</p></li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0557" class="listitem" dir="auto"><span class="emph">math</span>: funciones matemáticas</p></li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0558" class="listitem" dir="auto"><span class="emph">re</span>: operaciones con expresiones regulares</p></li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0559" class="listitem" dir="auto"><span class="emph">socket</span>: interfaz de redes de bajo nivel</p></li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0560" class="listitem" dir="auto"><span class="emph">sys</span>: parámetros y funciones específicas del sistema</p></li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0561" class="listitem" dir="auto"><span class="emph">unittest</span> y <span class="emph">trace</span>: marco para pruebas unitarias y seguimiento de ejecución para Python</p></li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto"><p id="N0562" class="listitem" dir="auto"><span class="emph">xml.etree.ElementTree</span>: API de ElementTree en XML</p></li>
</ul>
<a id="relatedtopics"></a><div class="relatedtopics">
<p class="related" itemprop="mentions" dir="auto"><a id="related"></a><span class="emph">Temas relacionados</span></p>
<div class="relatedbody" itemprop="mentions">
<div class="embedded"><p class="embedded" dir="auto"><a target="_top" href="es/text/sbasic/python/python_2_basic.html">Llamar macros en Basic desde Python</a></p></div>
<div class="embedded"><p class="embedded" dir="auto"><a target="_top" href="es/text/sbasic/shared/main0601.html">Ayuda de LibreOffice Basic</a></p></div>
<div class="embedded"><p class="embedded" dir="auto"><a target="_top" href="es/text/sbasic/python/main0000.html">Ayuda con las macros en Python en LibreOffice</a></p></div>
</div>
</div>
</div>
<div id="DonationFrame"></div>
<footer><h2 style="text-align: center;"><a href="https://books.libreoffice.org" target="_blank">Libros de LibreOffice</a></h2>
<div class="noteicon" dir="auto" style="display:flex;justify-content:center;flex-wrap:wrap;row-gap:15px;">
<img src="media/navigation/libo-writer.svg" alt="Writer Icon" style="width:60px;height:60px;"><img src="media/navigation/libo-calc.svg" alt="Calc Icon" style="width:60px;height:60px;"><img src="media/navigation/libo-impress.svg" alt="Impress Icon" style="width:60px;height:60px;"><img src="media/navigation/libo-draw.svg" alt="Draw Icon" style="width:60px;height:60px;"><img src="media/navigation/libo-base.svg" alt="Base Icon" style="width:60px;height:60px;"><img src="media/navigation/libo-math.svg" alt="Math Icon" style="width:60px;height:60px;"><img src="media/navigation/libo-symbol-black.svg" alt="Getting Started Icon" style="width:60px;height:60px;">
</div>
<div id="DEBUG" class="debug">
<h3 class="bug">Help content debug info:</h3>
<p dir="auto">This page is: <a href="https://opengrok.libreoffice.org/xref/help/source/text/sbasic/guide/basic_2_python.xhp" target="_blank">/text/sbasic/guide/basic_2_python.xhp</a></p>
<p dir="auto">Title is: De BASIC a Python</p>
<p id="bm_module" dir="auto"></p>
<p id="bm_system" dir="auto"></p>
<p id="bm_HID" dir="auto"></p>
</div></footer>
</body>
</html>