El texto con formato (.prn) está limitado a 240 caracteres por línea en Excel

Síntomas

En Microsoft Excel, al guardar una hoja de cálculo como un archivo de texto con formato (delimitado por espacios) (.prn), los caracteres que superen los doscientos caracteres se ajustan a la línea siguiente.

Nota:

Si varias filas de la misma hoja contienen texto de más de 240 caracteres, el texto comienza a ajustarse en la fila posterior a la última fila que contiene texto.

Por ejemplo, tenga en cuenta la siguiente hoja:

Cell Número de caracteres
A1 40
A2 255
A3 10
A4 21
A5 2
A6 52
A7 255
A8 5
A9 3
A20 13

El archivo de texto con formato resultante contiene líneas con el siguiente número de caracteres:

Número de línea Characters
1 40
2 240
3 10
4 21
5 2
6 52
7 240
8 5
9 3
10-19 0
20 13
21 0
22 15
23-26 0
27 15

Después de la última línea (en este ejemplo, línea 20), la numeración de líneas comienza en 1 para las líneas que se ajustan. En efecto, la línea 21 corresponde a la línea 1, la línea 22 corresponde a la línea 2, etc.

Causa

Este comportamiento se produce porque, por diseño, los archivos de texto con formato (delimitados por espacios) (.prn) tienen un límite de 240 caracteres por línea.

Solución alternativa

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía, ya sea expresa o implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. Se considera que está familiarizado con el lenguaje de programación que se muestra y con las herramientas para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos adaptados a sus necesidades específicas. Para crear un archivo de texto delimitado por espacios que supere la limitación de 240 caracteres por línea, use una macro similar a la siguiente macro de ejemplo.

Nota:

Antes de ejecutar esta macro, haga lo siguiente:

  • Seleccione las celdas que se incluirán en el archivo de texto.
  • Compruebe que los anchos de columna son lo suficientemente anchos como para ver la cadena más grande de cada columna. El ancho máximo de columna de una sola columna de Excel es de 255 caracteres cuando se le da formato con una fuente de ancho fijo.
  • Use los comandos del menú Estilo para dar formato a la hoja de cálculo para que use una fuente de ancho fijo. Por ejemplo, Courier es una fuente de ancho fijo.

El código de ejemplo siguiente se puede modificar para exportar datos delimitados con caracteres distintos de un espacio. Debe seleccionar el intervalo de datos que se exportarán antes de ejecutar esta macro de ejemplo.

Sub ExportText()

Dim delimiter As String
   Dim quotes As Integer
   Dim Returned As String

       delimiter = " "

       quotes = MsgBox("Surround Cell Information with Quotes?", vbYesNo)

' Call the WriteFile function passing the delimiter and quotes options.
      Returned = WriteFile(delimiter, quotes)

' Print a message box indicating if the process was completed.
      Select Case Returned
         Case "Canceled"
            MsgBox "The export operation was canceled."
         Case "Exported"
            MsgBox "The information was exported."
      End Select

End Sub

'------------------------------------------------------------

Function WriteFile(delimiter As String, quotes As Integer) As String

  ' Dimension variables to be used in this function.
   Dim CurFile As String
   Dim SaveFileName
   Dim CellText As String
   Dim RowNum As Integer
   Dim ColNum As Integer
   Dim FNum As Integer
   Dim TotalRows As Double
   Dim TotalCols As Double

   ' Show Save As dialog box with the .TXT file name as the default.
   ' Test to see what kind of system this macro is being run on.
   If Left(Application.OperatingSystem, 3) = "Win" Then
      SaveFileName = Application.GetSaveAsFilename(CurFile, _
      "Text Delimited (*.txt), *.txt", , "Text Delimited Exporter")
   Else
       SaveFileName = Application.GetSaveAsFilename(CurFile, _
      "TEXT", , "Text Delimited Exporter")
   End If

   ' Check to see if Cancel was clicked.
      If SaveFileName = False Then
         WriteFile = "Canceled"
         Exit Function
      End If
   ' Obtain the next free file number.
      FNum = FreeFile()

   ' Open the selected file name for data output.
      Open SaveFileName For Output As #FNum

   ' Store the total number of rows and columns to variables.
      TotalRows = Selection.Rows.Count
      TotalCols = Selection.Columns.Count

   ' Loop through every cell, from left to right and top to bottom.
      For RowNum = 1 To TotalRows
         For ColNum = 1 To TotalCols
            With Selection.Cells(RowNum, ColNum)
            Dim ColWidth as Integer
            ColWidth=Application.RoundUp(.ColumnWidth, 0)
            ' Store the current cells contents to a variable.
            Select Case .HorizontalAlignment
               Case xlRight
                  CellText = Space(Abs(ColWidth - Len(.Text))) & .Text
               Case xlCenter
                  CellText = Space(Abs(ColWidth - Len(.Text))/2) & .Text & _
                             Space(Abs(ColWidth - Len(.Text))/2)
               Case Else
                  CellText = .Text & Space(Abs(ColWidth - Len(.Text)))
            End Select
            End With
   ' Write the contents to the file.
   ' With or without quotation marks around the cell information.
            Select Case quotes
               Case vbYes
                  CellText = Chr(34) & CellText & Chr(34) & delimiter
               Case vbNo
                  CellText = CellText & delimiter
            End Select
            Print #FNum, CellText;

   ' Update the status bar with the progress.
            Application.StatusBar = Format((((RowNum - 1) * TotalCols) _
               + ColNum) / (TotalRows * TotalCols), "0%") & " Completed."

   ' Loop to the next column.
         Next ColNum
   ' Add a linefeed character at the end of each row.
         If RowNum <> TotalRows Then Print #FNum, ""
   ' Loop to the next row.
      Next RowNum

   ' Close the .prn file.
      Close #FNum

   ' Reset the status bar.
      Application.StatusBar = False
      WriteFile = "Exported"
   End Function

Nota:

El archivo de salida que crea esta rutina es, por definición, diferente de un archivo de texto con formato (*.prn). Por definición, el archivo de texto con formato no puede contener más de 240 caracteres por línea. Además, el archivo de texto con formato también contiene información de fuente de la impresora. Esta macro de ejemplo no lo hace. Esta solución está diseñada para proporcionar flexibilidad al exportar a archivos de texto.