<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wiki.open-office.es/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://wiki.open-office.es/index.php?action=history&amp;feed=atom&amp;title=Macros_en_Basic_para_OpenOffice_Writer</id>
		<title>Macros en Basic para OpenOffice Writer - Historial de revisiones</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.open-office.es/index.php?action=history&amp;feed=atom&amp;title=Macros_en_Basic_para_OpenOffice_Writer"/>
		<link rel="alternate" type="text/html" href="https://wiki.open-office.es/index.php?title=Macros_en_Basic_para_OpenOffice_Writer&amp;action=history"/>
		<updated>2026-06-04T03:11:37Z</updated>
		<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
		<generator>MediaWiki 1.23.5</generator>

	<entry>
		<id>https://wiki.open-office.es/index.php?title=Macros_en_Basic_para_OpenOffice_Writer&amp;diff=14221&amp;oldid=prev</id>
		<title>Salva en 18:49 2 sep 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-office.es/index.php?title=Macros_en_Basic_para_OpenOffice_Writer&amp;diff=14221&amp;oldid=prev"/>
				<updated>2015-09-02T18:49:31Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Menu|cat=Basic|subcat=|Titulo=Macros en Basic para Writer|vers=4.1.x}}&lt;br /&gt;
&amp;lt;seo title=&amp;quot;Macros en Basic para Writer - Apache OpenOffice Basic&amp;quot; &lt;br /&gt;
metakeywords=&amp;quot;macro,basic,writer,starbasic,manual,curso,tutorial,open,office,openoffice,apache openoffice,libreoffice&amp;quot; &lt;br /&gt;
metadescription=&amp;quot;OpenOffice.org Basic, también conocido como OOo Basic o StarBasic, es el nombre de uno de los cuatro lenguajes de macros incluidos en la suites Apache OpenOffice y LibreOffice&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;menu-articulo&amp;quot;&amp;gt;&lt;br /&gt;
* [[#Exportar un documento de Writer a PDF|Exportar un documento de Writer a PDF]]&lt;br /&gt;
* [[#Definir el formato de página|Definir el formato de página]]&lt;br /&gt;
* [[#Definir el ancho de las columnas de una tabla|Definir el ancho de las columnas de una tabla]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exportar un documento de Writer a PDF ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;oobas&amp;quot;&amp;gt;&lt;br /&gt;
Function Writer2Pdf( cRutayNombreURL as string, optional oDoc as Object ) as boolean&lt;br /&gt;
'--------------------------------------------------------------------------------------------    &lt;br /&gt;
' Exporta el documento actual a formato PDF en la ruta especificada como argumento&lt;br /&gt;
' La ruta tiene que estar indicada en formato URL&lt;br /&gt;
' Devuelve True si se exportó el documento&lt;br /&gt;
'          False si no es un documento Writer o no se exportó&lt;br /&gt;
&lt;br /&gt;
Dim a(2) As New com.sun.star.beans.PropertyValue&lt;br /&gt;
Dim oDispatch as Object, oFrame as Object&lt;br /&gt;
&lt;br /&gt;
On Local Error GoTo Error_NoEsUnDocumentoWriter &lt;br /&gt;
  &lt;br /&gt;
  oDispatch = createUnoService(&amp;quot;com.sun.star.frame.DispatchHelper&amp;quot;)  &lt;br /&gt;
  oFrame = ThisComponent.CurrentController.Frame&lt;br /&gt;
    &lt;br /&gt;
  If IsMissing(oDoc) then oDoc = ThisComponent&lt;br /&gt;
  If oDoc.SupportsService(&amp;quot;com.sun.star.text.TextDocument&amp;quot;) then&lt;br /&gt;
&lt;br /&gt;
    a(0).Name = &amp;quot;URL&amp;quot;&lt;br /&gt;
    a(0).Value = cRutayNombreURL ' formato URL, ejemplo &amp;quot;file:///H:/mi_documento.pdf&amp;quot;&lt;br /&gt;
    a(1).Name = &amp;quot;FilterName&amp;quot;&lt;br /&gt;
    a(1).Value = &amp;quot;writer_pdf_Export&amp;quot; &lt;br /&gt;
&lt;br /&gt;
    oDispatch.executeDispatch(oFrame, &amp;quot;.uno:ExportDirectToPDF&amp;quot;, &amp;quot;&amp;quot;, 0, a())&lt;br /&gt;
    Writer2Pdf = true	&lt;br /&gt;
  Else&lt;br /&gt;
	&lt;br /&gt;
Error_NoEsUnDocumentoWriter:&lt;br /&gt;
    Writer2Pdf = False&lt;br /&gt;
  End If&lt;br /&gt;
End Function&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Definir el formato de página ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;oobas&amp;quot;&amp;gt;&lt;br /&gt;
Sub FormatoPagina(cmAncho as single, cmAlto as single, _&lt;br /&gt;
    cmMargenIzq as single, cmMargenDer as single, _&lt;br /&gt;
    cmMargenSup as single, cmMargenInf as single, _&lt;br /&gt;
    lOrientacionApaisada as boolean, _&lt;br /&gt;
    cDisenyoPagina as string )&lt;br /&gt;
'--------------------------------------------------------------------------------------------    &lt;br /&gt;
  ' cDisenyoPagina puede ser DI para derecha, izquierda&lt;br /&gt;
  ' R para reflejado, D para derecha, I para izquierda &lt;br /&gt;
    &lt;br /&gt;
  Dim oStyleFamilies, oFamilies, oPageStyles, oStyle&lt;br /&gt;
  Dim oVCurs, oPageStyleName&lt;br /&gt;
  Dim oDoc&lt;br /&gt;
  &lt;br /&gt;
  oDoc = ThisComponent&lt;br /&gt;
  oVCurs = oDoc.CurrentController.getViewCursor() &lt;br /&gt;
  oPageStyleName = oVCurs.PageStyleName&lt;br /&gt;
  oPageStyles = oDoc.StyleFamilies.getByName(&amp;quot;PageStyles&amp;quot;)&lt;br /&gt;
  oStyle  = oPageStyles.getByName(oPageStyleName)&lt;br /&gt;
&lt;br /&gt;
  With oStyle&lt;br /&gt;
    .Width = cmAncho*1000&lt;br /&gt;
    .Height = cmAlto*1000 &lt;br /&gt;
    .LeftMargin = cmMargenIzq*1000&lt;br /&gt;
    .TopMargin = cmMargenSup *1000&lt;br /&gt;
    .RightMargin = cmMargenDer*1000&lt;br /&gt;
    .BottomMargin = cmMargenInf*1000&lt;br /&gt;
    .IsLandscape = lOrientacionApaisada&lt;br /&gt;
    &lt;br /&gt;
    select case uCase(cDisenyoPagina)&lt;br /&gt;
    case &amp;quot;DI&amp;quot;&lt;br /&gt;
        .PageStyleLayout = com.sun.star.style.PageStyleLayout.ALL&lt;br /&gt;
    case &amp;quot;R&amp;quot;&lt;br /&gt;
        .PageStyleLayout = com.sun.star.style.PageStyleLayout.MIRRORED&lt;br /&gt;
    case &amp;quot;I&amp;quot;&lt;br /&gt;
        .PageStyleLayout = com.sun.star.style.PageStyleLayout.LEFT&lt;br /&gt;
    case &amp;quot;D&amp;quot;&lt;br /&gt;
        .PageStyleLayout = com.sun.star.style.PageStyleLayout.RIGHT&lt;br /&gt;
    end select      &lt;br /&gt;
  End With&lt;br /&gt;
&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Definir el ancho de las columnas de una tabla ==&lt;br /&gt;
Esta macro permite definir el ancho de las columnas de la &amp;lt;u&amp;gt;tabla seleccionada&amp;lt;/u&amp;gt; de forma proporcional a las medidas indicadas.&lt;br /&gt;
&lt;br /&gt;
Writer define el ancho de cada columna por la posición relativa que ocupa cada separador de columna.&lt;br /&gt;
&lt;br /&gt;
Por lo tanto, una tabla con 5 columnas dispondrá de 4 separadores.&lt;br /&gt;
&lt;br /&gt;
El ancho relativo de la tabla se establece en 10000, por lo que cada separador ocupa una posición relativa a este valor máximo.&lt;br /&gt;
&lt;br /&gt;
Si las columnas de esa tabla tienen el mismo ancho, los separadores mostrarán los valores 2000,4000,6000 y 8000, respectivamente.&lt;br /&gt;
&lt;br /&gt;
Esta macro permite definir el ancho de las columnas de forma proporcional;  así, si las 5 columnas deseamos que se distribuyan en la proporción '''1,1,5,2,1''', lo especificaremos de esta forma en el diálogo que presenta la macro.&lt;br /&gt;
[[Image:openoffice-macro-writer-ancho-columnas.png|center|link=]]&lt;br /&gt;
También podemos indicar '''10,10,50,20,10''', o '''100,100,500,200,100''', o '''1000,1000,5000,2000,1000''', etc., ya que lo que se evalúa son las proporciones que mantienen las cifras indicadas.&lt;br /&gt;
&lt;br /&gt;
Si deseamos indicar valores en cm o mm podemos hacerlo, pero teniendo en cuenta que la coma decimal debe indicarse como un punto decimal.&lt;br /&gt;
&lt;br /&gt;
Así podremos indicar que las columnas midan '''2.1, 2.8, 5.0, 7.3, 1.6'''; si la suma no coincide con el ancho de la tabla, la macro no redimensionará las columnas según estas medidas, sino según sus proporciones relativas.&lt;br /&gt;
&lt;br /&gt;
Si queremos indicar las proporciones en % también podemos hacerlo, pero no debemos indicar el %; así, si queremos que se distribuyan como un 15%,20%,10%,30%,25% indicaremos '''15,20,10,30,25''', que en total suman 100; en realidad, la macro sigue teniendo en cuenta las proporciones entre las cifras indicadas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;oobas&amp;quot;&amp;gt;&lt;br /&gt;
Sub Writer_TablasColumnaAncho()&lt;br /&gt;
'--------------------------------------------------------------------------------------------    &lt;br /&gt;
  ' redimensiona según las proporciones indicadas las columnas de la tabla seleccionada&lt;br /&gt;
  Dim i As Long, n As Long&lt;br /&gt;
  Dim oTabla As Object      ' Tabla seleccionada&lt;br /&gt;
  Dim aAnchos() As Double   ' Matriz de anchos&lt;br /&gt;
  Dim cAnchos As String     ' Cadena con los anchos&lt;br /&gt;
  Dim cNAnchos As String    ' Cadena con los nuevos anchos&lt;br /&gt;
  Dim nColumnas As Long     ' Número de columnas&lt;br /&gt;
  Dim nFactor As Double     ' Factor&lt;br /&gt;
  Dim nAnchoTotal As Double ' Ancho total deseado&lt;br /&gt;
  Dim oTblColSeps           ' Separadores de columnas&lt;br /&gt;
  Dim oSeleccion As Object  ' Texto seleccionado&lt;br /&gt;
  Dim cTitulo As String     ' Título en los diálogos&lt;br /&gt;
&lt;br /&gt;
  cTitulo = &amp;quot;Ancho Columnas&amp;quot;&lt;br /&gt;
  oSeleccion = ThisComponent.CurrentController.getViewCursor&lt;br /&gt;
  On Error GoTo error_NoHayTabla&lt;br /&gt;
  oTabla=oSeleccion.TextTable  ' Tabla seleccionada&lt;br /&gt;
  On Error GoTo 0&lt;br /&gt;
&lt;br /&gt;
  oTblColSeps = oTabla.TableColumnSeparators ' separadores&lt;br /&gt;
  nColumnas = UBound(oTblColSeps)+2  ' Número de columnas&lt;br /&gt;
&lt;br /&gt;
  ReDim aAnchos(nColumnas-1)&lt;br /&gt;
&lt;br /&gt;
  ' el ancho de la columna viene definido por la posición relativa del separador&lt;br /&gt;
  ' calculo ancho de columnas&lt;br /&gt;
  For n=0 To UBound(oTblColSeps)&lt;br /&gt;
    aAnchos(n)=oTblColSeps(n).Position&lt;br /&gt;
  Next&lt;br /&gt;
  aAnchos(n)=10000&lt;br /&gt;
&lt;br /&gt;
  For n=UBound(aAnchos) To 1 Step -1&lt;br /&gt;
    aAnchos(n) = aAnchos(n)-aAnchos(n-1)&lt;br /&gt;
  Next&lt;br /&gt;
&lt;br /&gt;
  ' Solicito nuevos anchos&lt;br /&gt;
  cAnchos = Join(aAnchos,&amp;quot;,&amp;quot;)&lt;br /&gt;
  Do While True&lt;br /&gt;
    cNAnchos = InputBox( &amp;quot;Indique el ancho relativo de las &amp;quot; &amp;amp; _&lt;br /&gt;
    nColumnas &amp;amp; &amp;quot; columnas de la tabla, separados por comas:&amp;quot;, _&lt;br /&gt;
    cTitulo, cAnchos)&lt;br /&gt;
&lt;br /&gt;
    If cNAnchos=&amp;quot;&amp;quot; Then Exit Sub ' cancelado por el usuario&lt;br /&gt;
&lt;br /&gt;
    aAnchos = Split(cNAnchos, &amp;quot;,&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    If UBound(oTblColSeps)&amp;lt;&amp;gt;UBound(aAnchos)-1 Then ' Si no ha indicado un número correcto de columnas&lt;br /&gt;
      MsgBox &amp;quot;Error en '&amp;quot; &amp;amp; oTabla.getName() &amp;amp; &amp;quot;': ha indicado un número incorrecto de columnas&amp;quot;, 176, cTitulo&lt;br /&gt;
    Else&lt;br /&gt;
      '  el array aAnchos es ahora tipo string; lo convierto a numérico&lt;br /&gt;
      For n=0 To UBound(aAnchos)&lt;br /&gt;
        aAnchos(n)=Val(aAnchos(n))&lt;br /&gt;
        nAnchoTotal = nAnchoTotal + aAnchos(n)&lt;br /&gt;
      Next&lt;br /&gt;
&lt;br /&gt;
      nFactor = 10000/nAnchoTotal ' Calculamos el factor de conversión sobre el total de 10.000 que utiliza Writer&lt;br /&gt;
&lt;br /&gt;
      oTblColSeps(0).position = nFactor * aAnchos(0) ' calculo la posición del primer separador&lt;br /&gt;
&lt;br /&gt;
      For n = 1 To UBound(oTblColSeps) ' para el resto de separadores&lt;br /&gt;
        oTblColSeps(n).position =  oTblColSeps(n-1).position + (nFactor * aAnchos(n))&lt;br /&gt;
      Next&lt;br /&gt;
&lt;br /&gt;
      oTabla.TableColumnSeparators = oTblColSeps ' actualizo la tabla con los nuevos anchos&lt;br /&gt;
      Exit Do&lt;br /&gt;
&lt;br /&gt;
    End If&lt;br /&gt;
  Loop&lt;br /&gt;
  Exit Sub&lt;br /&gt;
&lt;br /&gt;
error_noHayTabla:&lt;br /&gt;
  MsgBox (&amp;quot;No se ha seleccionado ninguna tabla&amp;quot;, 176, cTitulo)&lt;br /&gt;
&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Pie|Macros en Basic para OpenOffice Calc|Macros en Basic para Calc|cat=Basic|subcat=}}&lt;br /&gt;
[[Category:Ver.4.0.x]][[Category:Ver.3.4.x]][[Category:Ver.3.3.x]][[Category:Ver.3.2.x]][[Category:Ver.3.1.x]]&lt;/div&gt;</summary>
		<author><name>Salva</name></author>	</entry>

	</feed>