导出到不带引号的pipe道分隔的.txt文件
我创build了一个VBA代码,可以将数据从单个硬编码工作表导出到export.txt文件。 我不得不使用两个For循环,因为我不知道以什么不同(和简单)的方式,我会跳过由导出视angular(文件types和主键为另一个macros)不必要的信息组成的两行。 尽pipe如此,macros观的工作…
Sub VBA_Write_to_a_text_file() Dim filename As String Dim rng As Range Dim cellValue As Variant Dim i As Integer Dim j As Integer filename = Application.ThisWorkbook.Path & "/export.txt" Open filename For Output As #1 Set rng = Sheets(22).Range("A1:G1") For i = 1 To rng.Rows.Count For j = 1 To rng.Columns.Count cellValue = rng.Cells(i, j).Value If j = rng.Columns.Count Then Write #1, cellValue Else Write #1, cellValue, End If Next j Next i Set rng = Sheets(22).Range("A4:G18") For i = 1 To rng.Rows.Count For j = 1 To rng.Columns.Count cellValue = rng.Cells(i, j).Value If j = rng.Columns.Count Then Write #1, cellValue Else Write #1, cellValue, End If Next j Next i Close #1 End Sub
…除了两个问题的例外:
-
pipe道分隔符问题:我不能更改逗号“,”pipe道分隔符“|” 改变下面的语法。 这个语法可能只保留给逗号分隔的文件。 你会推荐什么?
If j = rng.Columns.Count Then Write #1, cellValue Else Write #1, cellValue,
-
不必要的引号:在上面提供的同一位,我使用写,而不是打印。 我知道打印将摆脱引号,但它也将删除分隔符产生制表符分隔的文件,这是不是一个选项。 pipe道问题的优先级比引用优先,但理想情况下,我的目标是解决这两个问题。
在此先感谢您的所有build议。
示例性的源数据:
完全同意Dave使用FileSystemObject
的build议 – 它可以在Microsoft Scripting Runtime库中使用,您应该将其添加到您的项目中。 我的另一个build议是迭代你的数据的行,并为每一行创build一个数组。 然后,您可以使用Join
函数将该数组转换为一个string,每个值都用您select的分隔符(例如|
分隔 。
将一行Range
转换为1维数组需要使用Transpose
函数的一些小技巧。 它可以让你不必总是检查最后一个字段,也不会在该迭代中输出分隔符。 这也节省了你不得不使用嵌套循环。
代码如下:
Option Explicit Sub Export() 'for file system Dim objFs As New FileSystemObject Dim tsOut As TextStream 'for data Dim rngHeaders As Range Dim rngData As Range Dim rngRow As Range Dim varRowData As Variant Dim strRowData As String Dim strDelimiter As String 'counters Dim lngCounter As Long 'set up data Set rngHeaders = Sheet2.Range("A1:F1") Set rngData = Sheet2.Range("A3:F10") 'set delimiter strDelimiter = "|" 'set up file system Set tsOut = objFs.CreateTextFile("c:\temp\out.txt", True) 'output header varRowData = WorksheetFunction.Transpose(WorksheetFunction.Transpose(rngHeaders.Value)) strRowData = VBA.Join(varRowData, strDelimiter) tsOut.WriteLine strRowData 'output data For lngCounter = 1 To rngData.Rows.Count Set rngRow = rngData.Rows(lngCounter) varRowData = WorksheetFunction.Transpose(WorksheetFunction.Transpose(rngRow.Value)) strRowData = VBA.Join(varRowData, strDelimiter) tsOut.WriteLine strRowData Next lngCounter 'clean up tsOut.Close Set tsOut = Nothing Set objFs = Nothing End Sub
使用FileSystemObject来创build您的文本文件,并写任何你想要的:
Dim oFso : Set oFso = CreateObject("Scripting.FileSystemObject") Dim oFile : Set oFile = oFso.CreateTextFile("C:\temp\myfile.txt")
然后你可以用下面的命令写任何你想要的东西:
oFile.WriteLine "This will write a line and end it with a vbNewLine" oFile.Write "Where this write method will " oFile.Write "just write to the file without the new line on the end of the text." oFile.WriteLine "You|can|send|pipe|delimited|text|or|whatever|else|you|like" oFile.Close 'close and save the updated text file
您可以根据需要控制是否通过加倍发送报价,例如:
oFile.WriteLine """This is quoted text"""
将在您的文件中打印“这是引用文字”。