<!DOCTYPE html>
<html lang="es" dir="ltr">
<head>
<base href="../../../../">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Dar formato a bordes en Calc con macros</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="bm_id41582391760114"></a>
<meta itemprop="keywords" content="macros,format borders">
<h1 id="hd_id461623364876507" dir="auto">
<a id="title"></a>Dar formato a bordes en Calc con macros</h1>
<p id="par_id461630536347127" class="paragraph" dir="auto">Es posible utilizar los lenguajes de programación BASIC y Python para escribir macros que apliquen formatos a intervalos de celdas en Calc.</p>
<h2 id="hd_id81630536486560" dir="auto">Dar formato a bordes en intervalos de celdas</h2>
<p id="par_id871630536518700" class="paragraph" dir="auto">El siguiente fragmento de código crea una <span class="literal">Sub</span> llamada <span class="literal">FormatCellBorder</span> que aplica formatos a los bordes de un intervalo en la hoja de Calc en uso.</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">
Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
' Crea la estructura UNO que almacenará el formato de línea nuevo
Dim lineFormat as New com.sun.star.table.BorderLine2
lineFormat.LineStyle = newStyle
lineFormat.LineWidth = newWidth
If Not IsMissing(newColor) Then lineFormat.Color = newColor
' Obtiene la celda de destino
Dim oCell as Object
Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
' Aplica el formato nuevo a todos los bordes
oCell.TopBorder = lineFormat
oCell.RightBorder = lineFormat
oCell.LeftBorder = lineFormat
oCell.BottomBorder = lineFormat
End Sub
</code></pre></div>
<p id="par_id141630537941393" class="paragraph" dir="auto">La <span class="literal">Sub</span> descrita anteriormente utiliza cuatro argumentos:</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="par_id841630538209958" class="listitem" dir="auto"><span class="emph">cellAddress</span> es una cadena que indica el intervalo que se formateará en el formato «A1».</p>
</li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto">
<p id="par_id821630538210271" class="listitem" dir="auto"><span class="emph">newStyle</span> es un valor entero que corresponde al estilo de la línea del borde (véase <a target="_top" href="es/text/sbasic/guide/calc_borders.html#LineStyles_h2">Estilos de línea</a> más abajo).</p>
</li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto">
<p id="par_id191630538210607" class="listitem" dir="auto"><span class="emph">newWidth</span> es un valor entero que define el grosor de la línea.</p>
</li>
<li itemprop="itemListElement" itemscope="true" itemtype="http://schema.org/ItemListUnordered" dir="auto">
<p id="par_id71630538211142" class="listitem" dir="auto"><span class="emph">newColor</span> es un valor entero que corresponde a un color que se define con la función <a target="_top" href="es/text/sbasic/shared/03010305.html">RGB</a>.</p>
</li>
</ul>
<p id="par_id201630538522838" class="paragraph" dir="auto">Para llamar a <span class="literal">FormatCellBorder</span>, cree una macro nueva y pase los argumentos deseados como se muestra a continuación:</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">
Sub MyMacro
' Da acceso a las constantes de estilo de línea
Dim cStyle as Object
Set cStyle = com.sun.star.table.BorderLineStyle
' Da formato a «B5» de bordes azules sólidos
FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
' Formatea todos los bordes en el intervalo «D2:F6» con líneas punteadas rojas
FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
End Sub
</code></pre></div>
<p id="par_id31630540159114" class="paragraph" dir="auto">Es posible implementar la misma funcionalidad en Python:</p>
<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">
from uno import createUnoStruct
from scriptforge import CreateScriptService
def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
# Define el formato de línea nuevo
line_format = createUnoStruct("com.sun.star.table.BorderLine2")
line_format.LineStyle = newStyle
line_format.LineWidth = newWidth
line_format.Color = newColor
# Servicio de ScriptForge para acceder a los intervalos de celdas
doc = CreateScriptService("Calc")
cell = doc.XCellRange(cellAddress)
cell.TopBorder = line_format
cell.RightBorder = line_format
cell.LeftBorder = line_format
cell.BottomBorder = line_format
</code></pre></div>
<p id="par_id931630541661889" class="paragraph" dir="auto">El fragmento de código siguiente implementa una macro llamada <span class="literal">myMacro</span> que llama a <span class="literal">formatCellBorder</span>:</p>
<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">
from com.sun.star.table import BorderLineStyle as cStyle
def myMacro():
bas = CreateScriptService("Basic")
formatCellBorder("B5", cStyle.SOLID, 20, bas.RGB(0, 0, 255))
formatCellBorder("D2:F6", cStyle.DOTTED, 20, bas.RGB(255, 0, 0))
</code></pre></div>
<div class="note">
<div class="noteicon" dir="auto"><img src="media/icon-themes/res/helpimg/note.svg" alt="note" style="width:40px;height:40px;"></div>
<div class="notetext"><p id="par_id261630541889040" dir="auto">El código Python presentado anteriormente utiliza la biblioteca <a target="_top" href="es/text/sbasic/shared/03/lib_ScriptForge.html">ScriptForge</a> que está disponible desde LibreOffice 7.2.</p></div>
</div>
<br>
<a id="LineStyles_h2"></a>
<h2 id="hd_id361630539136798" dir="auto">Estilos de línea</h2>
<p id="par_id501630539147234" class="paragraph" dir="auto">Los estilos de línea se definen como constantes de enteros. La tabla siguiente enumera las constantes de los estilos de línea disponibles en <span class="menuitem">Formato ▸ Celdas ▸ Bordes</span>:</p>
<table border="1" class="" cellpadding="0" cellspacing="0">
<tr>
<th rowspan="" colspan="" class="tableheadcell" dir="auto">
<p id="par_id651630604006712" class="tableheadintable" dir="auto">Nombre de constante</p>
</th>
<th rowspan="" colspan="" class="tableheadcell" dir="auto">
<p id="par_id501630539273987" class="tableheadintable" dir="auto">Valor de entero</p>
</th>
<th rowspan="" colspan="" class="tableheadcell" dir="auto">
<p id="par_id191630539273987" class="tableheadintable" dir="auto">Nombre de estilo de línea</p>
</th>
</tr>
<tr>
<td rowspan="" colspan="" dir="auto">
<p id="par_id301630604024530" class="tablecontentintable" dir="auto">SOLID</p>
</td>
<td rowspan="" colspan="" dir="auto">
<p id="par_id861630539273987" class="tablecontentintable" dir="auto">0</p>
</td>
<td rowspan="" colspan="" dir="auto">
<p id="par_id691630539273987" class="tablecontentintable" dir="auto">Sólido</p>
</td>
</tr>
<tr>
<td rowspan="" colspan="" dir="auto">
<p id="par_id571630604044791" class="tablecontentintable" dir="auto">DOTTED</p>
</td>
<td rowspan="" colspan="" dir="auto">
<p id="par_id321630539319305" class="tablecontentintable" dir="auto">1</p>
</td>
<td rowspan="" colspan="" dir="auto">
<p id="par_id591630539325162" class="tablecontentintable" dir="auto">Punteado</p>
</td>
</tr>
<tr>
<td rowspan="" colspan="" dir="auto">
<p id="par_id921630604090581" class="tablecontentintable" dir="auto">DASHED</p>
</td>
<td rowspan="" colspan="" dir="auto">
<p id="par_id261630539430102" class="tablecontentintable" dir="auto">2</p>
</td>
<td rowspan="" colspan="" dir="auto">
<p id="par_id881630539433260" class="tablecontentintable" dir="auto">Discontinuo</p>
</td>
</tr>
<tr>
<td rowspan="" colspan="" dir="auto">
<p id="par_id981630604124169" class="tablecontentintable" dir="auto">FINE_DASHED</p>
</td>
<td rowspan="" colspan="" dir="auto">
<p id="par_id701630539460809" class="tablecontentintable" dir="auto">14</p>
</td>
<td rowspan="" colspan="" dir="auto">
<p id="par_id111630539463634" class="tablecontentintable" dir="auto">Fina, discontinua</p>
</td>
</tr>
<tr>
<td rowspan="" colspan="" dir="auto">
<p id="par_id311630604157101" class="tablecontentintable" dir="auto">DOUBLE_THIN</p>
</td>
<td rowspan="" colspan="" dir="auto">
<p id="par_id101630539468131" class="tablecontentintable" dir="auto">15</p>
</td>
<td rowspan="" colspan="" dir="auto">
<p id="par_id261630539471483" class="tablecontentintable" dir="auto">Doble, delgada</p>
</td>
</tr>
<tr>
<td rowspan="" colspan="" dir="auto">
<p id="par_id911630604171290" class="tablecontentintable" dir="auto">DASH_DOT</p>
</td>
<td rowspan="" colspan="" dir="auto">
<p id="par_id851630539475055" class="tablecontentintable" dir="auto">16</p>
</td>
<td rowspan="" colspan="" dir="auto">
<p id="par_id671630539478101" class="tablecontentintable" dir="auto">Trazo-punto</p>
</td>
</tr>
<tr>
<td rowspan="" colspan="" dir="auto">
<p id="par_id841630604186084" class="tablecontentintable" dir="auto">DASH_DOT_DOT</p>
</td>
<td rowspan="" colspan="" dir="auto">
<p id="par_id481630539481944" class="tablecontentintable" dir="auto">17</p>
</td>
<td rowspan="" colspan="" dir="auto">
<p id="par_id701630539484498" class="tablecontentintable" dir="auto">Trazo-punto-punto</p>
</td>
</tr>
</table>
<br>
<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="par_id751630539680866" dir="auto">Consulte <a target="_blank" href="https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1table_1_1BorderLineStyle.html">Referencia de la constante BorderLineStyle</a> en la documentación de la API de LibreOffice para más detalles de las constantes de estilos de línea.</p></div>
</div>
<br>
<h2 id="hd_id31630542361666" dir="auto">Formato de bordes mediante TableBorder2</h2>
<p id="par_id11630542436346" class="paragraph" dir="auto">Los objetos del intervalo poseen una propiedad denominada <span class="literal">TableBorder2</span> que puede utilizarse para dar formato a los bordes del intervalo tal como se hace en el cuadro de diálogo <span class="menuitem">Formato ▸ Celdas ▸ Bordes</span>, sección <span class="emph">Disposición de líneas</span>.</p>
<p id="par_id641630542724480" class="paragraph" dir="auto">Además de los bordes superior, inferior, izquierdo y derecho, <span class="literal">TableBorder2</span> también define los bordes vertical y horizontal. La siguiente macro afecta solo a los bordes superior e inferior del intervalo «B2:E5».</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">
Sub TableBorder2Example
Dim cStyle as Object
Set cStyle = com.sun.star.table.BorderLineStyle
' Define el formato de línea nuevo
Dim lineFormat as New com.sun.star.table.BorderLine2
lineFormat.LineStyle = cStyle.SOLID
lineFormat.LineWidth = 15
lineFormat.Color = RGB(0, 0, 0)
' Estructura que almacena la definición de TableBorder2 nueva
Dim tableFormat as New com.sun.star.table.TableBorder2
tableFormat.TopLine = lineFormat
tableFormat.BottomLine = lineFormat
tableFormat.IsTopLineValid = True
tableFormat.IsBottomLineValid = True
' Aplica el formato de tabla al intervalo «B2:E5»
Dim oCell as Object
oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
oCell.TableBorder2 = tableFormat
End Sub
</code></pre></div>
<p id="par_id401630544066231" class="paragraph" dir="auto">La macro se puede implementar en Python de la manera siguiente:</p>
<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">
from com.sun.star.table import BorderLineStyle as cStyle
from scriptforge import CreateScriptService
def tableBorder2Example():
bas = CreateScriptService("Basic")
line_format = createUnoStruct("com.sun.star.table.BorderLine2")
line_format.LineStyle = cStyle.SOLID
line_format.LineWidth = 18
line_format.Color = bas.RGB(0, 0, 0)
table_format = createUnoStruct("com.sun.star.table.TableBorder2")
table_format.TopLine = line_format
table_format.BottomLine = line_format
table_format.IsTopLineValid = True
table_format.IsBottomLineValid = True
doc = CreateScriptService("Calc")
cell = doc.XCellRange("B2:E5")
cell.TableBorder2 = table_format
</code></pre></div>
<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="par_id751630539680102" dir="auto">Consulte la <a target="_blank" href="https://api.libreoffice.org/docs/idl/ref/structcom_1_1sun_1_1star_1_1table_1_1TableBorder2.html"> referencia a la estructura TableBorder2 </a> en la documentación de la API de LibreOffice para más información.</p></div>
</div>
<br>
<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/shared/03/lib_ScriptForge.html">La biblioteca <span class="literal">ScriptForge</span></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/calc_borders.xhp" target="_blank">/text/sbasic/guide/calc_borders.xhp</a></p>
<p dir="auto">Title is: Dar formato a bordes en Calc con macros</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>