|
|
|
Как корректно выводить текст Unicode-ANSI ?
|
|||
|---|---|---|---|
|
#18+
Через буфер обмена вывожу HTML текст, с помощью процедуры HTMLToClipboard: Private Declare Function RegisterClipboardFormat Lib "user32" _ Alias "RegisterClipboardFormatA" (ByVal lpString As String) _ As Long Public Sub HTMLToClipboard(HTMLText As String) Dim nCFHTML As Long Dim nClipboardText As String nCFHTML = RegisterClipboardFormat("HTML Format") nClipboardText = "Version:0.9" & vbCrLf nClipboardText = nClipboardText & "StartHTML:-1" & vbCrLf nClipboardText = nClipboardText & "EndHTML:-1" & vbCrLf nClipboardText = nClipboardText & "StartFragment:000081" & vbCrLf nClipboardText = nClipboardText & "EndFragment:°°°°°°" & vbCrLf nClipboardText = nClipboardText & HTMLText & vbCrLf nClipboardText = Replace(nClipboardText, "°°°°°°", _ Format$(Len(nClipboardText), "000000")) With New DataObject .Clear .SetText StrConv(nClipboardText, vbFromUnicode), nCFHTML .PutInClipboard End With End Sub Sub insertHTMLtest() Dim HTMLText As String HTMLText = "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01//EN"" ""http://www.w3.org/TR/html4/strict.dtd"">" & _ "<html>" & _ "<head>" & _ "<title>AAA</title>" & _ "</head>" & _ "<body>" & _ "<table border border-collapse: collapse >" & _ "<tr>" & _ "<td>11</td>" & _ "<td>14</td>" & _ "</tr>" & _ "<tr>" & _ "<td>РУССКИЙ ТЕКСТ</td>" & _ "<td>112</td>" & _ "</tr>" & _ "</table>" & _ "</body>" & _ "</html>" HTMLToClipboard (HTMLText) Selection.PasteAndFormat (wdPasteDefault) End Sub НО!!! проблема возникла: При выводе текста вместо русских букв - карявки Я разбирался - это происходит из за преобразования: .SetText StrConv(nClipboardText, vbFromUnicode), nCFHTML Как можно это исправить? Что можно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2008, 20:02 |
|
||
|
Как корректно выводить текст Unicode-ANSI ?
|
|||
|---|---|---|---|
|
#18+
попробуй так но это только для русского .SetText StrConv(nClipboardText, vbFromUnicode ,1049), nCFHTML ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2008, 23:20 |
|
||
|
Как корректно выводить текст Unicode-ANSI ?
|
|||
|---|---|---|---|
|
#18+
Попробовал так: .SetText StrConv(nClipboardText, vbFromUnicode ,1049), nCFHTML Все равно корявки - если пробовать текст русский - то на выходе после такого преобразования - конкретные китайские иероглифы Как побороть незнаю - уже замучила эта проблема!!!!!!!!!!!1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2008, 10:50 |
|
||
|
Как корректно выводить текст Unicode-ANSI ?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2008, 11:32 |
|
||
|
Как корректно выводить текст Unicode-ANSI ?
|
|||
|---|---|---|---|
|
#18+
Если добавить: <head> ... <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> ... </head> то тоже не работает: -------------------- ! 11 ! 14 ! ! Гёʈɠ҅ʑҼ/td> ! 112 ! <-- Здесь должнобыть "РУССКИЕ БУКВЫ" -------------------- Добавил в HTML так: Private Declare Function RegisterClipboardFormat Lib "user32" _ Alias "RegisterClipboardFormatA" (ByVal lpString As String) _ As Long Public Sub HTMLToClipboard2(HTMLText As String) Dim nCFHTML As Long Dim nClipboardText As String nCFHTML = RegisterClipboardFormat("HTML Format") nClipboardText = "Version:0.9" & vbCrLf nClipboardText = nClipboardText & "StartHTML:-1" & vbCrLf nClipboardText = nClipboardText & "EndHTML:-1" & vbCrLf nClipboardText = nClipboardText & "StartFragment:000081" & vbCrLf nClipboardText = nClipboardText & "EndFragment:°°°°°°" & vbCrLf nClipboardText = nClipboardText & HTMLText & vbCrLf nClipboardText = Replace(nClipboardText, "°°°°°°", _ Format$(Len(nClipboardText), "000000")) With New DataObject .Clear .SetText StrConv(nClipboardText, vbFromUnicode, 1049), nCFHTML .PutInClipboard End With End Sub Sub insertHTMLtest2() Dim HTMLText As String HTMLText = "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01//EN"" ""http://www.w3.org/TR/html4/strict.dtd"">" & _ "<html>" & _ "<head>" & _ "<meta http-equiv=""Content-Type"" content=""text/html; charset=windows-1251"">" & _ "<title>AAA</title>" & _ "</head>" & _ "<body>" & _ "<table border border-collapse: collapse >" & _ "<tr>" & _ "<td>11</td>" & _ "<td>14555</td>" & _ "</tr>" & _ "<tr>" & _ "<td>РУССКИЕ БУКВЫ</td>" & _ "<td>112</td>" & _ "</tr>" & _ "</table>" & _ "</body>" & _ "</html>" HTMLToClipboard (HTMLText) Selection.PasteAndFormat (wdPasteDefault) End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2008, 12:27 |
|
||
|
Как корректно выводить текст Unicode-ANSI ?
|
|||
|---|---|---|---|
|
#18+
откуда копируете в буфер обмена? сначала установите клавиатуру в русскую раскладку (ищите примеры на API), потом копируйте в буфер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2008, 12:49 |
|
||
|
Как корректно выводить текст Unicode-ANSI ?
|
|||
|---|---|---|---|
|
#18+
В буфер обмена - не копирую. Как в примере (ниже) - текст "РУССКИЕ БУКВЫ" находится, прямо в исходном коде процедуры. Раскладка вроде как не причем, (хотя я вставил переключение на русскую раскладку), не помогло :( Public Declare Function GetKeyboardLayout Lib "user32" _ (ByVal dwLayout As Long) As Long Public Declare Function ActivateKeyboardLayout Lib "user32" _ (ByVal HKL As Long, ByVal flags As Long) As Long ' Раскладки клавиатуры Public Enum enmKeybordLayout kbrdEnglish = 67699721 kbrdRussian = 68748313 End Enum ' ============================================================ ' Назначение: ' Включить выбранную раскладку клавы ' Аргументы: ' Требуемая раскладка ' Пример: SetLayout kbrdEnglish ' ============================================================ Public Sub SetLayout(ByVal myLayout As enmKeybordLayout) Dim lngReturn As Long Dim lngCodeKeybord As Long ' Получить текущую раскладку lngReturn = GetKeyboardLayout(lngCodeKeybord) 'Если раскладки не совпадают, значит, надо переключиться If lngReturn <> CLng(myLayout) Then Call ActivateKeyboardLayout(HKL_NEXT, KLF_REORDER) End If End Sub Private Declare Function RegisterClipboardFormat Lib "user32" _ Alias "RegisterClipboardFormatA" (ByVal lpString As String) _ As Long Public Sub HTMLToClipboard2(HTMLText As String) Dim nCFHTML As Long Dim nClipboardText As String nCFHTML = RegisterClipboardFormat("HTML Format") nClipboardText = "Version:0.9" & vbCrLf nClipboardText = nClipboardText & "StartHTML:-1" & vbCrLf nClipboardText = nClipboardText & "EndHTML:-1" & vbCrLf nClipboardText = nClipboardText & "StartFragment:000081" & vbCrLf nClipboardText = nClipboardText & "EndFragment:°°°°°°" & vbCrLf nClipboardText = nClipboardText & HTMLText & vbCrLf nClipboardText = Replace(nClipboardText, "°°°°°°", _ Format$(Len(nClipboardText), "000000")) With New DataObject .Clear ' устанавливаем русскую раскладку клавиатуры SetLayout (kbrdRussian) .SetText StrConv(nClipboardText, vbFromUnicode, 1049), nCFHTML .PutInClipboard End With End Sub Sub insertHTMLtest2() Dim HTMLText As String HTMLText = "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01//EN"" ""http://www.w3.org/TR/html4/strict.dtd"">" & _ "<html>" & _ "<head>" & _ "<meta http-equiv=""Content-Type"" content=""text/html; charset=windows-1251"">" & _ "<title>AAA</title>" & _ "</head>" & _ "<body>" & _ "<table border border-collapse: collapse >" & _ "<tr>" & _ "<td>11</td>" & _ "<td>14555</td>" & _ "</tr>" & _ "<tr>" & _ "<td>РУССКИЕ БУКВЫ</td>" & _ "<td>112</td>" & _ "</tr>" & _ "</table>" & _ "</body>" & _ "</html>" HTMLToClipboard (HTMLText) Selection.PasteAndFormat (wdPasteDefault) End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2008, 14:56 |
|
||
|
Как корректно выводить текст Unicode-ANSI ?
|
|||
|---|---|---|---|
|
#18+
а зачем вообще тут работа с буфером обмена, может проще сделать форматирование средствами самого экселя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2008, 15:05 |
|
||
|
Как корректно выводить текст Unicode-ANSI ?
|
|||
|---|---|---|---|
|
#18+
Это в ворде, в MS Word - загружается HTML текст(таблица) из базы джанных, и вставляется в документ. Сама таблица - это HTML таблица Можно и без буффера обмена - только как? Есть вариант вставлять из файла HTML текст - там все работает, но недостаток - каждый раз дергать файл - записывать и вставлять из него в MS Word. Хчется вставлять не через файл. Но если не получиться - придется через файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2008, 15:42 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=35238213&tid=2162435]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 371ms |

| 0 / 0 |
