0

这是一个相关的问题: 从 Excel 电子表格中的每一行创建文本文件我已经使用以下代码实现了 ExactaBox 出色的解决方案:

Sub SaveRowsAsENW()

Dim wb As Excel.Workbook, wbNew As Excel.Workbook
Dim wsSource As Excel.Worksheet, wsTemp As Excel.Worksheet
Dim r As Long, c As Long

    Set wsSource = ThisWorkbook.Worksheets("worksheet1")

    Application.DisplayAlerts = False 'will overwrite existing files without asking

    r = 1
    Do Until Len(Trim(wsSource.Cells(r, 1).Value)) = 0
        ThisWorkbook.Worksheets.Add ThisWorkbook.Worksheets(1)
        Set wsTemp = ThisWorkbook.Worksheets(1)

        For c = 2 To 7
            wsTemp.Cells((c - 1) * 2 - 1, 1).Value = wsSource.Cells(r, c).Value
        Next c

        wsTemp.Move
        Set wbNew = ActiveWorkbook
        Set wsTemp = wbNew.Worksheets(1)
        'wbNew.SaveAs wsSource.Cells(r, 1).Value & ".csv", xlCSV 'old way
        wbNew.SaveAs "textfile" & r & ".enw", xlCSV 'new way
        'you can try other file formats listed at http://msdn.microsoft.com/en-us/library/office/aa194915(v=office.10).aspx
        wbNew.Close
        ThisWorkbook.Activate
        r = r + 1
    Loop

    Application.DisplayAlerts = True

End Sub
Option Explicit

我已经使用了这个解决方案,它工作正常。我唯一的麻烦是某些行在输出文件中得到引号。

这是输出文本文件的示例(第 2-3 行演示了错误):

0  Journal Article 'No quotation marks
"%A  Wofford, J.C."
"%A  Goodwin, Vicki L."
%T  A field study of a cognitive approach to understanding transformational and .. 'No quotation marks

这种格式似乎是在保存时添加的(它不是单元格格式的一部分)。你们中有人知道为什么会发生这种情况吗?/如何调整我的代码来修复它?

4

2 回答 2

1

真的。.csv代表逗号分隔的值,其中包含逗号的字段必须“转义”(此处带有引号),或者在每个逗号之前/之后拆分为不同的字段。然而,之前提供的答案确实提供了替代方案 - 其中制表符分隔是最合乎逻辑的。

于 2013-07-03T14:39:42.283 回答
0

这可能已经过了对你有帮助的地步,但是在我最近遇到这个问题之后,我想我会分享我的最终解决方案。您看到的格式实际上是 MS 保存问题的结果,它将引号附加到具有某些字符的行。

在我的情况下,我像往常一样写出文件,然后调用一个子程序来清除问题额外字符的文件。首先,我将任何需要引号的输出替换为星号或任何其他在我的文件中永远不会出现的字符。然后我正常保存文件并调用以下代码,用于将任何字符替换为另一个字符,两次。一次删除 Excel 创建的引号,第二次用引号替换我的虚拟字符。代码执行得相当快并重命名文件,因此您可以确定结果已完成处理。希望对其他搜索有用。

它仍然比我想要的笨重,因为您保存文件然后对其进行编辑,但它工作得很好,最终成为我的最终解决方案。

    Sub ReplaceStringInTextFile(FileNameAndLoc As String, OutFile As String, SearchForWords As String, SubstituteWords As String)
        'This macro searches a file, replacing one string with another, saving it, and renaming it.
        Dim objFSO As Object
        Dim objReadFile As Object
        Dim objWriteFile As Object

        'Set Objects
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objReadFile = objFSO.opentextfile(FileNameAndLoc, 1, False)

        'Read file contents
        Contents = objReadFile.readall

        'Close read file
        objReadFile.Close

        'Copy contents without double quotes
        NewContents = Replace(Contents, SearchForWords, SubstituteWords)

        'Write output
        Set objWriteFile = objFSO.opentextfile(FileNameAndLoc, 2, False)
        objWriteFile.write NewContents
        objWriteFile.Close

        'Rename file
        Name FileNameAndLoc As OutFile
    End Sub
于 2013-12-16T21:47:18.230 回答