Il testo formattato (con estensione prn) è limitato a 240 caratteri per riga in Excel

Sintomi

In Microsoft Excel, quando si salva un foglio di lavoro come file formattato di testo (delimitato da spazi) (con estensione prn), tutti i caratteri che superano i duecento fortieti vengono racchiusi nella riga successiva.

Nota

Se più righe dello stesso foglio contengono testo superiore a 240 caratteri, il testo inizia a capo alla riga dopo l'ultima riga che contiene testo.

Si consideri, ad esempio, il foglio seguente:

Cella Numero di caratteri
A1 40
A2 255
A3 10
A4 21
A5 2
A6 52
A7 255
A8 5
A9 3
A20 13

Il file di testo formattato risultante contiene righe con il numero di caratteri seguente:

Numero di riga Personaggi
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

Dopo l'ultima riga (in questo esempio, la riga 20), la numerazione della riga inizia da 1 per le righe di cui è stato eseguito il wrapping. In effetti, la riga 21 corrisponde alla riga 1, la riga 22 corrisponde alla riga 2 e così via.

Causa

Questo comportamento si verifica perché, per impostazione predefinita, i file formattati di testo (delimitato da spazi) (con estensione prn) hanno un limite di 240 caratteri per riga.

Soluzione alternativa

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presuppone che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle procedure. Gli esperti Microsoft sono autorizzati a fornire spiegazioni in merito alla funzionalità di una particolare routine, ma in nessun caso a modificare questi esempi per fornire funzionalità aggiuntive o a creare routine atte a soddisfare specifiche esigenze. Per creare un file di testo delimitato da spazi che supera il limite di 240 caratteri per riga, utilizzare una macro simile alla macro di esempio seguente.

Nota

Prima di eseguire questa macro, eseguire le operazioni seguenti:

  • Selezionare le celle da includere nel file di testo.
  • Verificare che la larghezza della colonna sia sufficientemente ampia da visualizzare la stringa più grande in ogni colonna. La larghezza massima della colonna per una singola colonna di Excel è di 255 caratteri se formattata con un tipo di carattere a larghezza fissa.
  • Usare i comandi di menu Stile per formattare il foglio di lavoro in modo da usare un tipo di carattere a larghezza fissa. Ad esempio, Courier è un tipo di carattere a larghezza fissa.

Il codice di esempio seguente può essere modificato per esportare i dati delimitati da caratteri diversi da uno spazio. È necessario selezionare l'intervallo di dati da esportare prima di eseguire questa macro di esempio.

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

Il file di output creato da questa routine è, per definizione, diverso da un file Formattato (*.prn). Per definizione, il file di testo formattato non può contenere più di 240 caratteri per riga. Inoltre, il file di testo formattato contiene anche informazioni sul tipo di carattere della stampante. Questa macro di esempio non lo fa. Questa soluzione è progettata per offrire flessibilità durante l'esportazione in file di testo.