2017-08-11 11 views
0

私はVBでプロジェクトを進めています。私はVisual Studio 2017で作業しています。 私はテキストファイルにエクスポートする必要があるDataGridViewを持っています。DataGridViewをテキストファイルを保持する列にエクスポート

私は、VBからテキストファイルへのエクスポート機能でいくつかのヘルプを使用することができました。

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 = "exportappliance.txt" 
     Dim tw As TextWriter = New StreamWriter(strDestinationFile) 

     'writing the header 
     For count As Integer = 0 To numCols - 1 
      tw.Write(dgvApplianceList.Columns(count).HeaderText) 
      If (count <> numCols - 1) Then 
       tw.Write(vbTab) 
      End If 
     Next 
     tw.WriteLine() 

     For count As Integer = 0 To numRows - 1 
      For count2 As Integer = 0 To numCols - 1 
       tw.Write(dgvApplianceList.Rows(count).Cells(count2).Value) 
       If (count2 <> numCols) Then 
        tw.Write(vbTab) 
       End If 
      Next 
      tw.WriteLine() 
     Next 
     tw.Close() 
    End Sub 

Current Export results

+0

「フィールド」や特定のサイズの仮想列にテキストを埋め込むような配置にすることはありません。 [ask]を読んで[ツアー]をしてください – Plutonix

+0

タブを挿入するifステートメントを取り出して、書き込むときに 'tw.Write(dgvApplianceList.Columns(count).HeaderText.PadRight(20))'を使用してください。フラットファイル20を任意の幅で置き換えることができます。異なるカラムサイズが必要な場合は、カラムインデックスに応じてカラムを変更することができます。 – soohoonigan

+0

各カラムおよびパッドに最大の文字数のセルを指定するだけで、エクスポートを実行する前の文字数? – ThatGuy

答えて

0

をあなたは他の人が示唆しているとして、テキストを整列するための一つの方法が適切にスペースを使用して達成することができる「テキスト」ファイルに書いているので:ここで私が使用していたコードです。これには、各列に対して「定義済み」列「幅」が必要です。写真を例にすると、カラム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 

希望します。

関連する問題