从.csv写入txt文件,但列之间具有不同的空间模式

时间:2015-10-16 14:13:46

标签: vba csv export-to-text

我有一个包含4列的.csv文件。我想将我的Excel数据放入txt文件中,但是,我希望在txt文件中的列之间有不同的间距选项。

示例 - 如果第1行包含4列[列a = 2列b = 3,列c = 4,列d = 5],则文本文件中的输出将为:

2       3    4              5

2和3之间有一个标签,3和4之间有4个空格,4和5之间有14个空格。这是非常随机的,但格式化是由于先前的文件创建的。

我根据教程编写了以下代码,但我不确定如何操作它以获得每行的不同间距。

Sub excelToTxt()

Dim FilePath As String
Dim CellData As String
Dim LastCol As Long
Dim LastRow As Long

LastCol = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
LastRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

CellData = vbTab

FilePath = Application.DefaultFilePath & "\test.txt"

Open FilePath For Output As #2
For i = 1 To LastRow

For j = 1 To LastCol

    If j = LastCol Then
        CellData = CellData + Trim(ActiveCell(i, j).Value)
    Else
        CellData = Trim(ActiveCell(i, j).Value) + CellData
    End If

Next j

Write #2, CellData
CellData = vbTab

Next i

Close #2


End 

有人能够帮助解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您必须修改要写出值的部分。检查您要写出的列,并在列之间添加所需的值。

像这样。

    For j = 1 To LastCol

        If j = LastCol Then
            CellData = CellData + Trim(ActiveCell(i, j).Value)
        Elseif j = 1 Then
            CellData = Trim(ActiveCell(i, j).Value) + CellData
        Elseif j = 2 Then
            CellData = Trim(ActiveCell(i, j).Value) + vbTab
        Elseif j = 3 Then
            CellData = Trim(ActiveCell(i, j).Value) + "    "
        Elseif j = 4 Then
            CellData = Trim(ActiveCell(i, j).Value) + "         "
        Elseif j = 5 Then
            CellData = Trim(ActiveCell(i, j).Value) + "  "
        End If

    Next j

    Write #2, CellData
    CellData = vbTab

答案 1 :(得分:1)

您可以使用以下内容:

Dim spacing As Variant

Select Case Cells(i, j).Column
    Case 1: spacing = vbTab
    Case 2: spacing = Space(4) - Len(Cells(i, j).Value)
    Case 3: spacing = Space(14) - Len(Cells(i, j).Value)
End Select

Write #2, Cells(i, j).Value & spacing