Страницы: 1
RSS
смена кодировки в excel с utf-8 на win-1251
 
Добрый ночи.  
Есть csv файл, он в кодировке utf-8.    
Как будет выглядеть макрос, который перекодирует содержание файла в win-1251? Какие вообще способы есть разобраться с этой проблемой, не прибегая к другим программ, средствами VBA? Или может как-то ещё проще решается?    
 
Пожалуйста, подскажите!
 
Вот нашёл, но попробовать случая не представилось:  
 
Проще всего наверное это сделать через ADO (надо добавить в references библиотеку Microsoft ActiveX Data Objects).    
 
код    
--------------------------------------------------------------------------------  
Dim s As stream  
Dim text As String  
   
Set s = New stream  
s.Open  
s.Charset = "UTF-8"  
s.LoadFromFile ("C:\User\Desktop\test.txt")  
   
text = s.ReadText  
s.Close  
   
Cells(1, 1).Value = text
 
А ещё есть такая штука как Library «OLEPRNLib» (%systemroot%\system32\oleprn.dll). Из интересных методов:  
 
 
Option Explicit  
 
Sub tt()  
 
Dim objOleCvt  
Dim txt1, txt2  
Set objOleCvt = CreateObject("OlePrn.OleCvt.1")  
 
With objOleCvt  
   txt1 = .ToUtf8("широкарека")  
   txt2 = .ToUnicode(txt1, 65001)  
End With  
 
MsgBox txt1 & vbNewLine & txt2  
 
Set objOleCvt = Nothing  
 
End Sub
 
Hugo, спасибо за совет, вариант с ADO - хорош, только всё кладёт в одну ячейку.  
 
скажите, а как сделать так, чтобы скрипт вместо Cells(1, 1).Value писал всё в тот же файл, только в кодировке, понятной excel'ю, win-1251? С csv, выходит, что много мороки, его ведь надо разбить по разделителям, массив, перебор ячеек и т.п.    
 
Код:  
 
Dim s As stream  
Dim text As String  
 
Set s = New stream  
s.Open  
s.Charset = "UTF-8"  
s.LoadFromFile ("C:\test.csv")  
 
text = s.ReadText  
s.Close  
 
Cells(1, 1).Value = text
 
Ну положим, пишет в одну ячейку не скрипт, а Вы - что Вы ему сказали делать, то и делает...  
Я думал, сообразите или найдёте пример, куда этот text далее направить.  
 
Например, вот готовый код по преобразованию текста. Тут всё есть. Вам нужна вторая, третья и последние три строки:  
 
Const ForReading = 1  
Const ForWriting = 2  
 
Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objFile = objFSO.OpenTextFile("c:\test.txt", ForReading)  
 
strText = objFile.ReadAll  
objFile.Close  
 
strText = Replace(strText, ",", " ")  
strText = Replace(strText, """", " ")  
 
Set objFile = objFSO.OpenTextFile("c:\test.txt", ForWriting)  
objFile.Write strText  
objFile.Close  
 
А кстати вариант с OLEPRNLib мне нравится больше. В ХР содержится изначально, про другие не знаю.
 
Ещё строку забыл...  
Set objfile = objFSO.CreateTextFile("C:\Temp\out@.txt")  
Хотя может она и не нужна.
Страницы: 1
Читают тему
Наверх