Unicode строка в плоский файл из VBA - PullRequest
3 голосов
/ 19 июня 2009

Я хочу сохранить строку Unicode в плоском файле в окне Windows из макроса Excel / VBA. Макрос преобразует обычную строку в представление Unicode, необходимо сохранить его в файле и получить позже.

Ответы [ 3 ]

6 голосов
/ 19 июня 2009

Как уже упоминалось, вы можете использовать Microsoft Scripting Runtime (scrrun.dll). Я опубликовал несколько примеров ниже. Некоторым людям также нравятся встроенные функции ввода-вывода файлов. Здесь есть обширная (и довольно всеобъемлющая тема) тема: http://www.xtremevbtalk.com/showthread.php?t=123814

Однако для файлов Unicode, вероятно, наименее болезненно использовать Textstreams :)

Public Sub StringToTextFile(ByVal path As String, ByVal value As String)
    'Requires reference to scrrun.dll
    Dim fso As Scripting.FileSystemObject
    Dim ts As Scripting.TextStream
    Set fso = New Scripting.FileSystemObject
    Set ts = fso.CreateTextFile(path, False, True)
    ts.Write value
    ts.Close
End Sub

Public Sub LazyMansWay(ByVal path As String, ByVal value As String)
    'Reference counting will cause the objects to be destroyed. The termination
    'events of the classes will cause the connections to be closed.
    CreateObject("Scripting.FileSystemObject").CreateTextFile(path, False, True).Write value
End Sub
2 голосов
/ 19 июня 2009

Добавить ссылку на COM-компонент Microsoft Scripting Runtime (scrrun.dll).

В нем есть все классы (в частности, FileSystemObject / TextStream) для создания / чтения / записи файлов.

1 голос
/ 24 июля 2009

Лучшее решение, которое я смог найти, это прочитать строку в байтовом массиве и записать каждый байт в двоичный файл

Private Function WriteBinaryFile(ByRef szData As String)
    Dim bytData() As Byte
    Dim lCount As Long

    bytData = szData
    Open PwdFileName For Binary As #1
        For lCount = LBound(bytData) To UBound(bytData)
            Put #1, , bytData(lCount)
        Next lCount
    Close #1
End Function

Считайте его обратно, открыв файл в двоичном режиме и прочитав каждый байт в массив байтов, а затем преобразовав его в строку.

Sub ReadBinaryFile(ByRef gszData As String)
Dim aryBytes() As Byte
Dim bytInput As Byte
Dim intFileNumber
Dim intFilePos

intFileNumber = FreeFile

Open PwdFileName For Binary As #intFileNumber
intFilePos = 1

Do
    Get #intFileNumber, intFilePos, bytInput
    If EOF(intFileNumber) = True Then Exit Do
    ReDim Preserve aryBytes(intFilePos - 1)
    aryBytes(UBound(aryBytes)) = bytInput
    intFilePos = intFilePos + 1
Loop While EOF(intFileNumber) = False
Close #intFileNumber

gszData = aryBytes
End Sub
...