をあなたは他の人が示唆しているとして、テキストを整列するための一つの方法が適切にスペースを使用して達成することができる「テキスト」ファイルに書いているので:ここで私が使用していたコードです。これには、各列に対して「定義済み」列「幅」が必要です。写真を例にすると、カラム0(ゼロ)は「アプライアンスタイプ」になり、そのカラムに最大25の文字幅の「幅」を与えることができます。列2「kwh」は、列の最大幅が15などと設定できます。
"列の幅"が設定されていると、文字列を列の幅に塗りつぶすのに必要なスペースをX個追加するだけで簡単です。例では、列2が次の列2と並んでいることを確認するために、各列1の文字列はすべて同じ長さでなければなりません。文字列を列1の長さに「塗りつぶす」スペースを各列1文字列に入力することで、列2のテキストが正しく整列するようになります。明らかに、同じロジックが後続の列に適用されます。
GetBufferedString
メソッド(下記)は、文字列を指定された列幅にバッファリングする1つの方法を示します。このメソッドは、文字列originalString
、int maxLength
および位置揃えタイプを取ります。このメソッドは、長さがmaxLength
の文字列を返します。正当な型がLEFTの場合、メソッドは指定された文字列の最後にスペースを埋め込みます。行揃えタイプがRIGHTの場合、メソッドは文字列の先頭にスペースが追加されるようにmaxLength
の文字列を返します。最後に、正当化タイプがCENTERの場合、メソッドは文字列の前にスペースを半分、最後に半分の文字列を返します。指定された文字列の長さがmaxLength
より大きい場合、返される文字列はmaxLength
の文字列の切り捨てになります。
これにより、各列の調停タイプを個別に設定できるようになります。以下のコードは、各行の位置揃えタイプを単に右に設定しています。
これは一例ですが、実際の列の数と列の幅の数に不一致があるかどうかを確認するエラーはありません。
いくつかのグローバル変数...整数配列columnLengths
は、各列の幅を保持するために使用されます...また、位置揃えタイプの列挙体です。右、左、中央。各列は幅
Dim columnLengths(6) As Integer
Enum JustifyType
LEFT
RIGHT
CENTER
End Enum
セット...
Private Sub FillColumnLength()
columnLengths(0) = 25
columnLengths(1) = 12
columnLengths(2) = 12
columnLengths(3) = 12
columnLengths(4) = 12
columnLengths(5) = 12
End Sub
GetBufferedString
メソッドを使用するには、ボタンのクリックイベントのセーブ更新。
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
Dim numCols As Integer = dgvApplianceList.ColumnCount
Dim numRows As Integer = dgvApplianceList.RowCount - 1
Dim strDestinationFile As String = "D:\Test\exportappliance.txt"
Dim tw As TextWriter = New StreamWriter(strDestinationFile)
Dim textToOutput = ""
For count As Integer = 0 To numCols - 1
textToOutput = GetBufferedString(dgvApplianceList.Columns(count).HeaderText, columnLengths(count), JustifyType.CENTER)
tw.Write(textToOutput)
Next
tw.WriteLine()
For count As Integer = 0 To numRows - 1
For count2 As Integer = 0 To numCols - 1
textToOutput = GetBufferedString(dgvApplianceList.Rows(count).Cells(count2).Value, columnLengths(count2), JustifyType.RIGHT)
tw.Write(textToOutput)
Next
tw.WriteLine()
Next
tw.Close()
End Sub
最後に、GetBufferedString
メソッド。
Private Function GetBufferedString(originalString As String, maxLength As Int16, justifyType As JustifyType) As String
If (originalString.Length < maxLength) Then
Dim bufString = Space(maxLength - originalString.Length)
Select Case justifyType
Case JustifyType.LEFT
Return originalString + bufString
Case JustifyType.RIGHT
Return bufString + originalString
Case JustifyType.CENTER
Dim halfString = bufString.Substring(bufString.Length/2)
originalString = halfString + originalString
bufString = Space(maxLength - originalString.Length)
Return originalString + bufString
Case Else
Return ""
End Select
Else
Return originalString.Substring(0, maxLength)
End If
End Function
希望します。
「フィールド」や特定のサイズの仮想列にテキストを埋め込むような配置にすることはありません。 [ask]を読んで[ツアー]をしてください – Plutonix
タブを挿入するifステートメントを取り出して、書き込むときに 'tw.Write(dgvApplianceList.Columns(count).HeaderText.PadRight(20))'を使用してください。フラットファイル20を任意の幅で置き換えることができます。異なるカラムサイズが必要な場合は、カラムインデックスに応じてカラムを変更することができます。 – soohoonigan
各カラムおよびパッドに最大の文字数のセルを指定するだけで、エクスポートを実行する前の文字数? – ThatGuy