Экспортировать электронную таблицу Excel в текстовый файл фиксированной ширины?

Excel имеет функциональность для импорта текстовых файлов фиксированной ширины, где он представляет собой диалоговое окно, которое позволяет выбрать, где начинается и заканчивается полей, которые он помещает в столбцы.

есть ли у него также функциональность, где, учитывая существующую таблицу, вы можете экспорт в текстовый файл фиксированной ширины?

Если да, то как получить к нему доступ? Я попытался использовать Save As и выбрать текстовый файл, но, похоже, только сохранить как разделитель табуляции, что не помогает тебя.

Это Excel 2003, если это имеет значение.

4
задан random
17.03.2023 14:23 Количество просмотров материала 2492
Распечатать страницу

7 ответов

Я думаю, что ближе всего вы можете получить от родной функциональности Excel Сохранить Как | Форматированный Текст (Разделители-Запятые) (*.prn). Он будет автоматически определять ширину и вставлять пробелы для заполнения этой ширины по мере необходимости.

кроме того, вам нужно иметь макрос или другую надстройку, которая позволит вам сделать больше.

23
отвечен squillman 2023-03-18 22:11

Если у вас есть Office профессиональный, Вы можете открыть файл Excel в Access, а затем экспортировать из Access. Access позволит вам указать макет с фиксированной шириной для экспортируемого файла и предоставит вам очень подробные элементы управления для указания этих Ширин.

12
отвечен davidcl 2023-03-19 00:28

Вау, я собирался задать этот вопрос сам, но он уже был задан. Все Excel выходной буфер tab разделитель по умолчанию. Это раздражает для "реального" вывода обычного текста, когда у вас есть шрифт фиксированной ширины, но не обязательно поддержка разделителей табуляции.

во всяком случае, я нашел и изменил небольшой макрос Excel, который скопирует текущую выбранную область в виде простой таблицы ASCII с фиксированной шириной столбцов - например:

187712 201    37     0.18   
2525   580    149    0.25   
136829 137    43     0.31   

вот код макроса. Чтобы использовать его, убедитесь, что вы включить вкладку Разработчик в Excel Options если вы используете Excel 2007 или более поздней.

Sub CopySelectionToClipboardAsText()

   ' requires a reference to "Windows Forms 2.0 Object Library"
   ' add it via Tools / References; if it does not appear in the list
   ' manually add it as the path C:\Windows\System32\FM20.dll

    Dim r As Long, c As Long
    Dim selectedrows As Integer, selectedcols As Integer

    Dim arr
    arr = ActiveSheet.UsedRange
    selectedrows = UBound(arr, 1)
    selectedcols = UBound(arr, 2)

    Dim temp As Integer
    Dim cellsize As Integer
    cellsize = 0
    For c = 1 To selectedcols
        temp = Len(CStr(Cells(1, c)))
        If temp > cellsize Then
            cellsize = temp
        End If
    Next c
    cellsize = cellsize + 1

    Dim line As String
    Dim output As String

    For r = 1 To selectedrows
        line = Space(selectedcols * cellsize)
        For c = 1 To selectedcols
            Mid(line, c * cellsize - cellsize + 1, cellsize) = Cells(r, c)
        Next c
        output = output + line + Chr(13) + Chr(10)
    Next r

    Dim MyData As MSForms.DataObject
    Set MyData = New DataObject
    MyData.SetText output
    MyData.PutInClipboard

    MsgBox "The current selection was formatted and copied to the clipboard"

End Sub
5
отвечен Jeff Atwood 2023-03-19 02:45

во-первых, формат данных как курьер новый (или другой моноширинный шрифт). Затем сохраните как .prn и вы получите истинную фиксированную ширину.

4
отвечен dkusleika 2023-03-19 05:02

расширяя ответ Джеффа Этвуда, так как он не позволил бы мне прокомментировать там:

Я изменил его макрос, чтобы установить ширину столбца на самую широкую ячейку в этом столбце и иметь каждый столбец свою ширину. Его макрос нашел только самую широкую ячейку в первой строке, а затем установил ширину всех столбцов.

Sub CopySelectionToClipboardAsText()

   ' requires a reference to "Windows Forms 2.0 Object Library"
   ' add it via Tools / References; if it does not appear in the list
   ' manually add it as the path C:\Windows\System32\FM20.dll

    Dim r As Long, c As Long, linesize As Long
    Dim selectedrows As Integer, selectedcols As Integer

    Dim arr
    arr = ActiveSheet.UsedRange
    selectedrows = UBound(arr, 1)
    selectedcols = UBound(arr, 2)
    ReDim CellSizes(1 To selectedcols, 2) As Integer

    Dim temp As Integer
    Dim cellsize As Integer
    linesize = 0
    For c = 1 To selectedcols
        cellsize = 0
        For r = 1 To selectedrows
            temp = Len(CStr(Cells(r, c)))
            If temp > cellsize Then
                cellsize = temp
            End If
        Next
        CellSizes(c, 0) = cellsize + 1
        CellSizes(c, 1) = linesize
        linesize = linesize + cellsize + 1
    Next c

    Dim line As String
    Dim output As String

    For r = 1 To selectedrows
        line = Space(linesize)
        For c = 1 To selectedcols
            Mid(line, CellSizes(c, 1) + 1, CellSizes(c, 0)) = Cells(r, c)
        Next c
        output = output + line + Chr(13) + Chr(10)
    Next r

    Dim MyData As MSForms.DataObject
    Set MyData = New DataObject
    MyData.SetText output
    MyData.PutInClipboard

    MsgBox "The current selection was formatted and copied to the clipboard"

End Sub
2
отвечен Peter 2023-03-19 07:19

Это убийца для меня. Он имеет несколько вариантов, а также.

http://www.sensefulsolutions.com/2010/10/format-text-as-table.html

0
отвечен sancho.s 2023-03-19 09:36

Он работает с доступом из коробки: https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140#bmsteps с этим способом я управлял довольно легко и быстро - лучше, чем с Excel. В моем случае это было преобразование таблицы.

0
отвечен Alex 2023-03-19 11:53

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх