Избегайте лишнего «возврата каретки» в операторе Print в Visual Basic?

В Visual Basic меня смущает то, что поведение оператора Print в этом иногда следующем операторе: может вызвать дополнительный возврат каретки «^ M» в конец строки, но иногда это не так. Интересно, почему?

filePath = "d:\tmp\FAE-IMM-Report-2012-Week.org"
    If Dir(filePath) <> "" Then
        Kill filePath
    End If
    outFile = FreeFile()
    Open filePath For Output As outFile
    Print #outFile, "#+TITLE:     Weekly Report"

выдаст

#+TITLE:     Weekly Report^M

, а я хочу без ^ M:

#+TITLE:     Weekly Report

В одной тестовой программе почти такой же код не дал бы "^ M".

Пожалуйста, помогите! Большое спасибо.

В ходе дальнейшего эксперимента я обнаружил, что следующее предложение с использованием vbNewline и ";" в конце содержимого печати, все еще не решает мою проблему.

После тщательной изоляции я обнаружил, что причиной проблемы является символ, который выглядит как пробел, а не как пробел, за которым следует новая строка и возврат каретки. Перед печатью текста, содержащего неправильную строку, не было возврата каретки, но после того, как нарушающая строка была напечатана, каждая строка, включая предыдущую напечатанную строку, имела бы возврат каретки.

Я не уверен, какая именно строка вызывает нарушение, поскольку мои навыки работы с VBA еще не слишком высоки.

Вот копия оскорбительного текста из ячейки электронной таблицы:

   "There is something invisible after this visible text 
After the invisible text, then there might be a carriage return $Chr(13) and/or newline"

Я не уверен, что вставка в веб-браузер сохранит содержимое. При вставке в emacs я не видел возврата каретки, в то время как emacs должен отображать его, если он есть. Итак, я предполагаю, что в ошибочной строке нет возврата каретки.

Ниже приведена программа, демонстрирующая проблему:

    Sub DemoCarriageReturnWillAppear()
    Dim filePath As String
    Dim outFile
    Dim offendingText
    filePath = "d:\tmp\demoCarriageReturn.org"
    If Dir(filePath) <> "" Then
        Kill filePath
    End If
    outFile = FreeFile()
    Open filePath For Output As outFile
    Print #outFile, "#+AUTHOR:    Yu Shen" & vbNewLine;
    Close #outFile 'At this moment, there is no carriage return
    Open filePath For Append As outFile
    offendingText = ThisWorkbook.Worksheets("Sheet1").Range("A1")
    Print #outFile, offendingText & vbNewLine;
    Close #outFile 'Now, every line end has carriage return.
    'It must be caused by something offending at the above print out content.
End Sub

Вот окончательный результат описанной выше процедуры:

    #+AUTHOR:    Yu Shen^M

There is something invisible after this visible text 
After the invisible text, then there might be a carriage return $Chr(13) or newline^M

Обратите внимание, что "^ M" добавлено мной, поскольку возврат каретки не будет отображаться в браузере.

Если вам интересно, я могу отправить вам файл Excel с некорректным содержанием.

Мне нужна ваша помощь в том, как избежать неправильной строки или возврата каретки. (Я даже пытаюсь выполнить замену строки возврата каретки или новой строки, поскольку обнаружил, что как только я вручную удалю все, что вызвало изменение в другой строке, проблема исчезнет. Но вызов Replace для замены vbNewline, Chr $ (13), или vbCrLf не имело никакого значения.

Спасибо за дополнительную помощь!

Yu

9
задан Community 9 July 2018 в 19:34
поделиться