从.csv写入txt文件,列之间有不同的空格

时间:2015-10-16 16:17:26

标签: excel vba csv

我已经编写了下面的vba代码来获取excel文件,并将其读/写到新的文本文件中。我这样做的主要问题是新文本文件中所需的间距不均匀。那么,我的意思是如果第一行有四列是[列a = 2列b = 3,列c = 4,列d = 5],文本文件中的输出将是:

2       3    4              5

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

我成功完成了这个问题的一个方面,但是,有两个新问题出现了。

在我的Excel文件的第三列中,并非所有数字都具有相同的长度。前 - Cells(3, 3).Value = 79.13Cells(4, 3).Value = 81.6

如何获得以下内容(现在发生的事情):

"302277600       19940130    79.13              18.06"
"302277600       19940131    81.6              18.06"

转向:

"302277600       19940130    79.13              18.06"
"302277600       19940131    81.6               18.06" 

基本上,根据长度更改值之间的间距。 那么,有没有办法摆脱引号?

Sub excelToTxt()

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

LastCol = 4
LastRow = 19954

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

Open FilePath For Output As #2

For i = 1 To LastRow

    CellData = ""

    For j = 1 To LastCol
        If j = 1 Then
            CellData = CellData + Trim(ActiveCell(i, j).Value) & "       "
        ElseIf j = 2 Then
            CellData = CellData + Trim(ActiveCell(i, j).Value) & "    "
        ElseIf j = 3 Then
            CellData = CellData + Trim(ActiveCell(i, j).Value) & "              "
        ElseIf j = LastCol Then
            CellData = CellData & Trim(ActiveCell(i, j).Value)
        End If

Next j

Write #2, CellData

Next i

Close #2

End Sub

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

1 个答案:

答案 0 :(得分:1)

将if与you if语句结合使用。

Public Function PadSpace(nMaxSpace As Integer, nNumSpace As Integer) As String
    If nMaxSpace < nNumSpace Then
        PadSpace = ""
    Else
        PadSpace = Space(nMaxSpace - nNumSpace)
    End If
End Function

您可以使用列宽和值的长度来调用它。它返回一个字符串,其中包含要在值和下一个值之间放置的空格数。 “垫”

    If j = 1 Then
        CellData = CellData + Trim(ActiveCell(i, j).Value) & PadSpace(16, Len(Trim(ActiveCell(i, j).Value)))
    ElseIf j = 2 Then
        CellData = CellData + Trim(ActiveCell(i, j).Value) & PadSpace(12, Len(Trim(ActiveCell(i, j).Value)))
    ElseIf j = 3 Then
        CellData = CellData + Trim(ActiveCell(i, j).Value) & PadSpace(19, Len(Trim(ActiveCell(i, j).Value)))
    ElseIf j = LastCol Then
        CellData = CellData & Trim(ActiveCell(i, j).Value)
    End If