Les cuento: tenemos una aplicación muy vieja la cual toma un archivo de excel y lo transforma a un .txt, la cual no funciona con archivos .ods y obviamente no hay soporte para la reprogramación de la aplicación, por lo cual corresponde hacer una macro que sustituya dicha aplicación.
El txt generado tiene los siguientes requsitos:
Largo de caracteres necesario en cada columna
Columna A (3)
Columna B (1)
Columna C (5)
Columna D (8)
Columna E (10)
Columna F (10)
Columna G (1)
Columna H (15)
Columna I (10)
Columna J (8)
Columna K (28)
Columna L(2)
El largo total de las columnas debe ser de 101 digitos.
Ejemplo: Si en la columna H que es de 15 digitos, ponemos solo 5, en el txt deben estar los 5 y completar los restantes 11 con espacios en blanco.
Hasta ahora tengo el siguiente código el cual exporta las columnas a un archivo txt, pero no he podido dar con el tema de los largos, solo toma el dato que esta en la celda y lo pasa.
Código: Seleccionar todo
Sub ExportarATxt
'----------------------------------------------------------------------
' Guardar documento
Dim documento As Object
Dim dispatcher As Object
documento = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(documento, ".uno:Save", "", 0, Array())
'----------------------------------------------------------------------
' Exportar a archivo de texto
Dim oDoc As Object ' El documento actual
Dim oHojas As Object ' La colección de hojas del documento
Dim oHoja As Object ' Hoja en específico
Dim oHojaDefault As Object ' Hoja para definir donde quedará
Dim sNewFilename As String ' Nuevo nombre de texto
Dim sExt As String ' La nueva extensión a aplicar
Dim sURL As String ' URL existente en el documento
Dim sCurrDir As String ' Directorio actual
Dim FileProperties(2) As New com.sun.star.beans.PropertyValue
oDoc = thisComponent
oHojas = oDoc.Sheets()
oHoja = oHojas.getByName("Temp")
oHojaDefault = oHojas.getByName("Resumen")
sURL = ConvertFromURL(oDoc.getLocation())
sCurrDir = Mid(sURL,1,Len(sURL)-Len(Dir(sURL)))
FileProperties(0).Name = "Overwrite"
FileProperties(0).Value = True
FileProperties(1).Name = "FilterName"
FileProperties(1).Value = "Text - txt - csv (StarCalc)"
FileProperties(2).Name = "FilterOptions"
'FileProperties(2).Value = "9,0,ANSI,1"
'FileProperties(2).Value = "FIX,,0,1,0/2/10/36/19/4"
FileProperties(2).Value = "FIX,,2,5,3/2/10/36/19/4"
'Separación,Inicio de fila,
sExt = ".txt"
sNewFilename = "Archivo" & sExt
oDoc.CurrentController.setActiveSheet(oHoja)
oDoc.storeToURL(ConvertToURL(sCurrDir & sNewFilename),FileProperties())
oDoc.CurrentController.setActiveSheet(oHojaDefault) ' Seteamos la hoja a mostrar
MsgBox("¡Archivo .txt creado con éxito!")
End Sub