On-line: tnsr2, гостей 0. Всего: 1 [подробнее..]
АвторСообщение



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 06.07.09 13:10. Заголовок: OEMTOANSI


Возникла необходимость передать данные в EXCEL
Программа консольная HARBOUR база ДОС
Для передачи исрользую OLE

В начале программы устонавливаю

HB_LANG_RU866
HB_CODEPAGE_RU866

HB_LANGESELECT("RU866")
HB_SETCODEPAGE("RU866")

Просматривается база TBROWSE (перетранслированна из CLIPPER)

Формируется таблица EXCEL
Таблица формируется нормально
Заголовки колонок формирую из заголовок колонок BROWSERa
HB_OENTOANSI(oColumn:Header)

В таблице EXCEL заголовки колонок выдаются неправильно
Проверил oColumn:Header - таблица ДОС
Проверил oColumn:Header после перекодировки коды символов не соответсвуют
таблице WINDOWS
Если в редакторе(FAR) сформировать константу а потом выполнить HB_OENTOANSI(CONST)
то преобразует нормально
В чем может быть причина.Спасибо

Спасибо: 0 
Цитата Ответить
Ответов - 5 [только новые]


постоянный участник


Пост N: 707
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 06.07.09 14:21. Заголовок: Avseev1949 пишет: З..


Avseev1949 пишет:

 цитата:
Заголовки колонок формирую из заголовок колонок BROWSERa
HB_OENTOANSI(oColumn:Header)



А если сформировать просто как oColumn:Header?


Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 06.07.09 14:34. Заголовок: Пробовал не помогает..


Пробовал не помогает
Смотрел в иходниках OemToCharBuffA вроде вызов идет к ней.
Если не ошибаюсь, но в MSDN ее описания не нашел. может
это функция HARBOUR пытался разобраться как это все работает.


Спасибо: 0 
Цитата Ответить
постоянный участник


Пост N: 708
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 06.07.09 14:50. Заголовок: Это функция из user3..


Это функция из user32.dll

Маленький пример желательно бы..


 цитата:
Если в редакторе(FAR) сформировать константу а потом выполнить HB_OENTOANSI(CONST)
то преобразует нормально



Т.е. исходники у вас в CP866?
А как вы oColumn:Header устанавливаете ?


Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 06.07.09 16:02. Заголовок: Исходники в CP866 oB..


Исходники в CP866
oBrow - Tbrowse OбЪект
aColumn - Количество колонок
На экран заголоки колонок отображаются нормально

For nCol := 1 To Len( aColumn )
oCol := oBrow:GetColumn(aColumn[nCol])
cStr := HB_OEMTOANSI(oCol:Heading)
//cStr := oCol:Heading
//ДЛЯ ПРОВЕРКИ КОДОВ
//uData := STR(ASC(Substr(cStr,1,1)))
uData := cStr
uData := StrTran( uData, Chr(13)+Chr(10), Chr( 10 ) )

cText += uData + Chr( 9 )

Next

БЕЗ HB_OEMTOANSI ВЫДАЕТ КОДЫ ДОС
С HB_OEMTOANSI ПЕРЕКОДИРУЕТ НО ПРИ ПЕРЕДАЧЕ В EXCEL МУСОР

Спасибо: 0 
Цитата Ответить
постоянный участник


Пост N: 709
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 07.07.09 07:50. Заголовок: Avseev1949 пишет: Б..


Avseev1949 пишет:

 цитата:
БЕЗ HB_OEMTOANSI ВЫДАЕТ КОДЫ ДОС
С HB_OEMTOANSI ПЕРЕКОДИРУЕТ НО ПРИ ПЕРЕДАЧЕ В EXCEL МУСОР



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

Вот написал по быстрому, исходники в CP866
Все работает нормально.


 цитата:
REQUEST DBFCDX 

REQUEST HB_CODEPAGE_RU866
REQUEST HB_CODEPAGE_RU1251

STATIC s_oBrowse

PROCEDURE Main()
LOCAL aStruct := { { "CHAR1", "C", 25, 0 }, { "CHAR2", "C", 25, 0 } }
//
CLEAR SCREEN

hb_setCodePage( "RU866" )

dbCreate( "mytest", aStruct, "DBFCDX", .T. , "MYALIAS" )
MYALIAS -> ( dbAppend() )
MYALIAS -> CHAR1 := "Значение #11"
MYALIAS -> CHAR2 := "Значение #12"
MYALIAS -> ( dbAppend() )
MYALIAS -> CHAR1 := "Значение #13"
MYALIAS -> CHAR2 := "Значение #14"
MYALIAS -> ( dbCommit() )

s_oBrowse := BrowseCreate()

hb_setTermCP( "RU866", "RU1251", .T. )

ExportToExcel()

dbCloseAll()
dbDrop( "mytest" )

RETURN

/**
*/
STATIC FUNCTION BrowseCreate()
LOCAL oB, oC
//
oB := TBrowseDB( , , , )

oC := TBColumnNew( "Столбец #1", { || MYALIAS -> CHAR1 } )
oB:addColumn( oC )

oC := TBColumnNew( "Столбец #2", { || MYALIAS -> CHAR2 } )
oB:addColumn( oC )

RETURN oB

/**
*/
STATIC PROCEDURE ExportToExcel()

LOCAL oExcel, oWorkBook, oAS, nI
LOCAL oColumn := s_oBrowse:GetColumn( 1 )
LOCAL cStr := oColumn:Heading

IF !hb_isObject( s_oBrowse ) .OR. s_oBrowse:ClassName != "TBROWSE"
RETURN
ENDIF

IF ( oExcel := win_oleCreateObject( "Excel.Application" ) ) != NIL
oWorkBook := oExcel:WorkBooks:Add()

oAS := oExcel:ActiveSheet()

FOR nI := 1 TO s_oBrowse:colCount()
oColumn := s_oBrowse:GetColumn( nI )
cStr := oColumn:Heading
oAS:Cells( 1, nI ):Value := hb_oemToAnsi( cStr )
NEXT

MYALIAS -> ( dbGoTop() )
nI := 3
DO WHILE !Eof()
oAS:Cells( nI, 1 ):Value := hb_oemToAnsi( MYALIAS -> CHAR1 )
//? oAS:Cells( nI, 1 ):Value
oAS:Cells( nI, 2 ):Value := hb_oemToAnsi( MYALIAS -> CHAR2 )
//? oAS:Cells( nI, 2 ):Value
dbSkip( + 1 ); nI++
ENDDO

FOR nI := 1 TO s_oBrowse:colCount()
oAS:Columns( nI ):AutoFit()
NEXT

oExcel:Visible := .T.
//oExcel:Quit()
ELSE
Alert( "Error: MS Excel not available. [" + win_oleErrorText() + "]" )
ENDIF





Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 25
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет