Excelには固定幅のテキストファイルをインポートする機能があり、フィールドの開始と終了を列に配置する場所を選択できるダイアログが表示されます。
また、既存のスプレッドシートを使用して、固定幅のテキストファイルにexportできる機能もありますか?
もしそうなら、私はこれにどのようにアクセスしますか? [名前を付けて保存]を使用して[テキストファイル]を選択しようとしましたが、タブ区切り形式でしか保存されないようです。これは役に立ちません。
問題がある場合、これはExcel 2003です。
ネイティブのExcel機能から最も近いものは名前を付けて保存|書式付きテキスト(スペース区切り)(* .prn)だと思います。幅が自動的に決定され、必要に応じてその幅になるようにスペースが挿入されます。
さらに、マクロやその他のアドインが必要です。
Office Professionalをお持ちの場合は、ExcelファイルをAccessで開いてから、Accessからエクスポートできます。 Accessでは、エクスポートされたファイルの固定幅レイアウトを指定でき、それらの幅を指定するための非常にきめ細かい制御を提供します。
うわー、私はこの質問を自分でするつもりでしたが、すでに質問されていました。すべての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
まず、データをCourier New(または他の固定幅フォント)としてフォーマットします。次に.prnとして保存すると、真の固定幅が得られます。
ジェフ・アトウッドの答えを拡張します。そこではコメントできません。
私は彼のマクロを変更して、列幅をその列の最も広いセルに設定し、各列に独自の幅を持たせました。彼のマクロは、最初の行で最も広いセルを見つけ、すべての列の幅をそれに設定しました。
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
それはそのままAccessで動作します: https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140 #bmsteps この方法で、非常に簡単かつ高速に管理しました-Excelよりも優れています。私の場合、それはテーブルの変換でした。
これは私にとってキラーです。また、いくつかのオプションがあります。
http://www.sensefulsolutions.com/2010/10/format-text-as-table.html