web-dev-qa-db-ja.com

Excelスプレッドシートを固定幅のテキストファイルにエクスポートしますか?

Excelには固定幅のテキストファイルをインポートする機能があり、フィールドの開始と終了を列に配置する場所を選択できるダイアログが表示されます。

また、既存のスプレッドシートを使用して、固定幅のテキストファイルにexportできる機能もありますか?

もしそうなら、私はこれにどのようにアクセスしますか? [名前を付けて保存]を使用して[テキストファイル]を選択しようとしましたが、タブ区切り形式でしか保存されないようです。これは役に立ちません。

問題がある場合、これはExcel 2003です。

24
RationalGeek

ネイティブのExcel機能から最も近いものは名前を付けて保存|書式付きテキスト(スペース区切り)(* .prn)だと思います。幅が自動的に決定され、必要に応じてその幅になるようにスペースが挿入されます。

さらに、マクロやその他のアドインが必要です。

24
squillman

Office Professionalをお持ちの場合は、ExcelファイルをAccessで開いてから、Accessからエクスポートできます。 Accessでは、エクスポートされたファイルの固定幅レイアウトを指定でき、それらの幅を指定するための非常にきめ細かい制御を提供します。

14
davidcl

うわー、私はこの質問を自分でするつもりでしたが、すでに質問されていました。すべてのExcelクリップボード出力は tab デフォルトで区切られます。固定幅のフォントを使用しているが、必ずしもタブ区切り文字をサポートしていない場合、これは「実際の」プレーンテキスト出力には不快です。

とにかく、現在選択されている領域を単純な固定幅の列としてコピーする小さなExcelマクロを見つけて変更しましたASCIIテーブル-次のように:

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

これがマクロコードです。これを使用するには、Excel 2007以降を使用している場合はExcelオプションの[開発]タブを有効にするになっていることを確認してください。

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

まず、データをCourier New(または他の固定幅フォント)としてフォーマットします。次に.prnとして保存すると、真の固定幅が得られます。

4
dkusleika

ジェフ・アトウッドの答えを拡張します。そこではコメントできません。

私は彼のマクロを変更して、列幅をその列の最も広いセルに設定し、各列に独自の幅を持たせました。彼のマクロは、最初の行で最も広いセルを見つけ、すべての列の幅をそれに設定しました。

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

それはそのままAccessで動作します: https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140 #bmsteps この方法で、非常に簡単かつ高速に管理しました-Excelよりも優れています。私の場合、それはテーブルの変換でした。

0
Alex

これは私にとってキラーです。また、いくつかのオプションがあります。

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