繁体   English   中英

使用VBA将Excel中的一系列数据导出到ASCII纯文本格式的表CSV或txt文件

[英]Export a range of data in excel to ascii plain text formatted table csv or txt file using vba

我只需要将一系列数据从Excel或LibreOffice Calc文件导出到ascii纯文本表-文本文件。 输出应采用以下格式:

+--------+--------------+--------+
| Name   | Place        | Phone  |
+========+==============+========+
| JOHN   | TEXAS        | 123456 |
+--------+--------------+--------+
| ROBERT | INDIANAPOLIS | 234567 |
+--------+--------------+--------+
| JEANNE | CAMBODIA     | 345678 |
+--------+--------------+--------+
| ANN    | CANADA       | 456789 |
+--------+--------------+--------+
| RICK   | HAGUE        | 567890 |
+--------+--------------+--------+

是否可以使用vba? 是的,数字应右对齐。

或者像这样:

+--------+--------------+--------+
| Name   | Place        | Phone  |
+========+==============+========+
| JOHN   | TEXAS        | 123456 |
| ROBERT | INDIANAPOLIS | 234567 |
| JEANNE | CAMBODIA     | 345678 |
| ANN    | CANADA       | 456789 |
| RICK   | HAGUE        | 567890 |
+--------+--------------+--------+

如果我没记错的话,纯文本文件根本不会为一列辩护。

也就是说,尝试一下: http : //www.excel-easy.com/vba/examples/write-data-to-text-file.html

好吧,我知道了。

Sub Convert2Text()
    Dim i As Integer, k As Integer, n As Integer, m As Integer
    Dim Rng As Range, Dpath As String
    Dim FSO As Scripting.FileSystemObject
    Dim TxtFile As TextStream
    Dim MaxLen As Integer

        Set Rng = Application.InputBox("Please Select range.", "-Convert to Text-", , -Range("R2").Left, Range("R2").Top, , , 8)
        If Rng Is Nothing Then
            Exit Sub
        End If
        Dpath = Environ("USERPROFILE") & "\Documents\"
        Set FSO = New FileSystemObject
        Set TxtFile = FSO.CreateTextFile(Dpath & "Outputfile.txt", True)

            MaxLen = 1
            For i = 1 To Rng.Columns.Count
                For k = 1 To Rng.Rows.Count
                If MaxLen < Len(Rng.Cells(i, k)) Then
                    MaxLen = Len(Rng.Cells(i, k))
                End If
                Next k
            Next i
            MaxLen = MaxLen + 4

            For i = 1 To Rng.Columns.Count
                TxtFile.Write "+"
                    For m = 1 To MaxLen
                        TxtFile.Write "="
                    Next m
            Next i
                TxtFile.Write "+"
                TxtFile.WriteLine

            For n = 1 To Rng.Rows.Count
                For i = 1 To Rng.Columns.Count
                        TxtFile.Write "|"
                        TxtFile.Write " "
                        TxtFile.Write " "
                        TxtFile.Write Rng.Cells(n, i)

                        For k = 1 To MaxLen - (Len(Rng.Cells(n, i))) - 2
                            TxtFile.Write " "
                        Next k
                Next i
                        TxtFile.Write "|"
                        TxtFile.WriteLine

                For i = 1 To Rng.Columns.Count
                        TxtFile.Write "+"
                            For m = 1 To MaxLen
                                TxtFile.Write "-"
                        Next m
                Next i
                        TxtFile.Write "+"
                        TxtFile.WriteLine
            Next n

        MsgBox "Done!"
        Shell "explorer.exe " & Dpath, vbNormalFocus

End Sub

现在,我必须集中精力使数字正确对齐。 谢谢大家的建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM