2010-01-25 19:02:42 +0000 2010-01-25 19:02:42 +0000
24
24

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

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

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

Если да, то как мне получить к нему доступ? Я пробовал использовать Save As и выбирать Text File, но, похоже, он сохраняется только как Tab-delimited, что мне не помогает.

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

Ответы (7)

24
24
24
2010-01-25 19:16:55 +0000

Я думаю, что ближе всего вы можете получить от родной функциональности Excel Save As | Formatted Text (Space Delimited) (*.prn). Он будет автоматически определять ширину и вставлять пробелы для прокладки на эту ширину по мере необходимости.

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

14
14
14
2010-01-25 20:34:43 +0000

Если у вас есть Office Professional, вы можете открыть файл Excel в разделе “Доступ”, а затем “Экспорт из доступа”. Доступ позволит задать для экспортируемого файла формат с фиксированной шириной, а также предоставит вам чрезвычайно детальные элементы управления для задания такой ширины.

5
5
5
2010-03-18 01:43:08 +0000

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

В любом случае, я нашел и модифицировал маленький Excel Macro, который скопирует текущую выбранную область как простую таблицу 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
4
4
4
2010-01-25 21:12:44 +0000

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

2
2
2
2015-07-02 17:00:34 +0000

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

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

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
0
0
0
2015-05-28 08:21:09 +0000

Для меня это убийца. У него есть несколько вариантов. http://www.sensefulsolutions.com/2010/10/format-text-as-table.html

0
0
0
2018-06-13 11:29:12 +0000

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