2009-06-19 3 views
3

Я хочу сохранить строку unicode в плоском файле в окне окна из макроса excel/vba. Макрос преобразует нормальную строку в представление юникода, необходимо сохранить ее в файле и получить позже.Unicode string to flat file from vba

ответ

2

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

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

5

Как уже упоминалось, вы можете использовать Microsoft Scripting Runtime (scrrun.dll). Я привел несколько примеров ниже. Некоторым людям также нравятся функции IO собственного файла. Существует обширная (и достаточно полный Thread) здесь: 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 
+0

+1 hd качество сообщения –

1

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

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 

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

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