为什么这个 VBA 脚本会损坏文件?

问题描述 投票:0回答:1

我创建了一个 VBA 脚本来将 xlsx 文件保存为分号-del CSV 格式,但不幸的是,它在保存时损坏了输出/CSV 文件(在笔记本中我只看到 PK )。谁能告诉我为什么会发生这种情况?

具体用例: 我希望能够从 FTP 下载一个以分号分隔的文件 (features_AFX.csv),使用 Power Query 编辑器导入 Excel(以在转换中保留特殊字符),进行编辑,然后保存/输出为半格式- 冒号分隔。更改我的区域设置以使用分号作为默认分隔符是不切实际的,因为我通常使用逗号作为分隔符,并且只需要为几个文件使用分号。此外,我想确保导出到 csv 时保留单元格内的特殊字符(也可以包括分号)。

  • 注意:所有文件都保存在文件路径 C:\Users\Julie 中

VBA 脚本:

Private Sub commaReplace()

    Dim objFSO
    Dim filePath
    Dim migratorFileName
    Dim strFullPath1
    Dim strFullPath2
    Const ForReading = 1
    'define a TextStream object
    Dim objTS
    Dim strContents As String

    'note, my code actually uses the below commented out filepath
    'as the location of the workbook can be arbitrary, e.g.
    'Worksheets("FilePath").[A2:A2].Value is determined when workbook
    'is opened
    'filePath = Worksheets("FilePath").[A2:A2].Value
    filePath = "C:\Users\julie\"

    'our original file that we've exported as csv file in another section of code
    migratorFileName = "features_AFXMASTER.xlsx"
    strFullPath1 = filePath + migratorFileName

    'the path and file name we want to save to, semicolon separated vs. comma
    migratorFileName = "features_AFX.csv"
    strFullPath2 = filePath + migratorFileName

    'read everything from the csv file, replacing comma with semicolon
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTS = objFSO.OpenTextFile(strFullPath1, ForReading)
    strContents = objTS.ReadAll
    strContents = Replace(strContents, ",", ";")
    objTS.Close

    'write everything out to another file, note, this could just overwrite
    'the original file if you pass the optional overwrite flag
    Set objTS = objFSO.CreateTextFile(strFullPath2)
    objTS.Write strContents
    objTS.Close

End Sub

谢谢!! 朱莉

尝试过:

尝试 1:将 features_AFX.csv(已用分号分隔)下载到 C:\Users\Julie。使用 Power Query 编辑器导入到 Excel,并指定文件名 features_AFXMASTER.xlsm。将 VBA 脚本附加到 features_AFXMASTER.xlsm 并运行该脚本。没有出现错误,features_AFX 文件已更新,但打开文件时,它已损坏。

尝试 2:将 features_AFX.csv 下载到 C:\Users\Julie。使用 Power Query 编辑器导入到 Excel,并指定文件名 features_AFXMASTER.xlsm。 (尝试 1 中保留的文件,附加了 VBA)已删除 features_AFX.csv。在 features_AFXMASTER 中运行 VBA 脚本。没有出现错误,并且 features_AFX.csv 文件已创建。打开 .csv 时,它已损坏。

尝试 3:创建一个名为 features_VBA.xlsm 的单独文件,并附加 VBA 脚本。将 features_AFX.csv 下载到 C:\Users\Julie。使用 Power Query 编辑器导入到 Excel,并指定文件名 features_AFXMASTER.xlsm。 (这是一个新创建的文件,不是之前尝试留下的)已删除 features_AFX.csv。在 features_VBA 中运行 VBA 脚本。没有出现错误,并且 features_AFX.csv 文件已创建。打开 .csv 时,它已损坏。

预计:

features_AFX.csv 应以分号作为分隔符保存

excel vba export-to-csv automatic-semicolon-insertion
1个回答
0
投票

我有类似的需求,并制作了一个 .vbs 来调用,它将在平面文件中将一个字符大规模更改为另一个字符。 它有三个参数

Const ForReading = 1
Const ForWriting = 2
strFileName = Wscript.Arguments(0)
strOldText = Wscript.Arguments(1)
strNewText = Wscript.Arguments(2)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)
strText = objFile.ReadAll
objFile.Close
newText = Replace(strText, strOldText, strNewText)
Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.WriteLine newText
objFile.Close

创建了一个小测试文件 'TestDoc.txt': Col1,col2,col3,col4 打开 CMD 提示符(在包含脚本的文件夹中:“RawMod.vbs”和测试文件并运行 rawmod.vbs "TestDoc.txt" "," "|" TestDoc.txt 已更新为:Col1|col2|col3|col4

请告诉我这是否有用

© www.soinside.com 2019 - 2024. All rights reserved.