OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 20:46

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: CtlExcel9
СообщениеДобавлено: Вторник, 14 Сентябрь, 2010 18:17 

Зарегистрирован: Среда, 27 Май, 2009 17:33
Сообщения: 27
При выводе данных в Excel столкнулся проблемой кодировки(русские символы коверкаются)

Код:
app := Excel.NewApplication();      
book := app.Workbooks().Add(NIL);
sheet :=Excel.This_Worksheet(book.Worksheets().Item(CtlT.Int(1)));      
range := sheet.Range(CtlT.Str("A1"), CtlT.Str("A1"));
range.PUTValue(CtlT.Str("п/п"));
app.PUTVisible(TRUE) ;

ну и получаю в ответ вот это: "ï/ï" вместо "п/п"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Вторник, 14 Сентябрь, 2010 18:57 

Зарегистрирован: Среда, 27 Май, 2009 17:33
Сообщения: 27
и еще не получается установить текст в ячейках по центру

Код:
range := sheet.Range(CtlT.Str("A1"), CtlT.Str("J1"));
range.PUTVerticalAlignment(CtlT.Int(Excel.xlCenter));


А текст все равно с лева;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Вторник, 14 Сентябрь, 2010 19:08 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
А, простите, использование Excel так критично? может, вдарить по OpenDocument Format? их есть у нас...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Вторник, 14 Сентябрь, 2010 19:19 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 557
l2qwe писал(а):
и еще не получается установить текст в ячейках по центру

Код:
range := sheet.Range(CtlT.Str("A1"), CtlT.Str("J1"));
range.PUTVerticalAlignment(CtlT.Int(Excel.xlCenter));


А текст все равно с лева;


В коде вертикальное выравнивание упоминается, в претензии к горизонтальному. ???


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Вторник, 14 Сентябрь, 2010 19:23 

Зарегистрирован: Среда, 27 Май, 2009 17:33
Сообщения: 27
Пётр Кушнир писал(а):
А, простите, использование Excel так критично? может, вдарить по OpenDocument Format? их есть у нас...

У нас везде стоит MS Office.
Да и пользователе уже привыкли к функционалу MS Excel

Геннадий Тышов писал(а):
l2qwe писал(а):
и еще не получается установить текст в ячейках по центру

Код:
range := sheet.Range(CtlT.Str("A1"), CtlT.Str("J1"));
range.PUTVerticalAlignment(CtlT.Int(Excel.xlCenter));


А текст все равно с лева;


В коде вертикальное выравнивание упоминается, в претензии к горизонтальному. ???

Нет, только горизонтальное и WrapText(TRUE)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Вторник, 14 Сентябрь, 2010 19:47 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Навскидку так..., сам не проверял. Попробуйте строки перекодировать в CP-1251 следующим образом.
Код:
s : ARRAY OF CHAR; (* = ваша строка *)
ss : ARRAY 256 OF SHORTCHAR;
res := WinApi.WideCharToMultiByte(1251, {}, s, -1, ss, 255, NIL, NIL);

Какой версией BB пользуетесь?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Вторник, 14 Сентябрь, 2010 19:48 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
l2qwe писал(а):
range.PUTVerticalAlignment(CtlT.Int(Excel.xlCenter));
А текст все равно с лева;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Среда, 15 Сентябрь, 2010 11:13 

Зарегистрирован: Среда, 27 Май, 2009 17:33
Сообщения: 27
Александр Ильин писал(а):
l2qwe писал(а):
range.PUTVerticalAlignment(CtlT.Int(Excel.xlCenter));
А текст все равно с лева;

Спасибо помогло)

divan писал(а):
Навскидку так..., сам не проверял. Попробуйте строки перекодировать в CP-1251 следующим образом.
Код:
s : ARRAY OF CHAR; (* = ваша строка *)
ss : ARRAY 256 OF SHORTCHAR;
res := WinApi.WideCharToMultiByte(1251, {}, s, -1, ss, 255, NIL, NIL);

Какой версией BB пользуетесь?

ББ 1.6.
Текст во что то перекодировался, но эксел все равно не хочет его понимать

Исходный текст: Обязательная номенклатура на изделие
До перекодировки: Îáåçàòåëüíàÿ íàìåíêëàòóðà íà èçäåëèå
После перекодировки: Iaacaoaeuiay iaiaieeaoo?a ia ecaaeea


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Среда, 15 Сентябрь, 2010 12:42 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Вот такая программа вывела правильный текст в Excel, на нулевом скачанном BB1.6 с сайта oberoncore.ru
Код:
MODULE MyExcel;

IMPORT Excel:=CtlExcel9, CtlT;
VAR
    app: Excel._Application; book: Excel._Workbook; sheet: Excel._Worksheet; range: Excel.Range;

PROCEDURE Test*;
    BEGIN
        app := Excel.NewApplication();     
        book := app.Workbooks().Add(NIL);
        sheet :=Excel.This_Worksheet(book.Worksheets().Item(CtlT.Int(1)));     
        range := sheet.Range(CtlT.Str("A1"), CtlT.Str("A1"));
        range.PUTValue(CtlT.Str("Проверка!!!"));
        app.PUTVisible(TRUE) ;
END Test;

END MyExcel.

MyExcel.Test


Возможно, у вас проблема с кодировкой файла программы. Попробуйте создать новый файл. А старые программы пройти конвертером, если будет необходимость. Как я понял, в BB1.6 все еще нетривиальное хранение текстовых файлов, разные куски программы могут быть в разных кодировках, а отображаться корректно при этом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Среда, 15 Сентябрь, 2010 13:18 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
divan писал(а):
Возможно, у вас проблема с кодировкой файла программы.
Да сто пудов в этом. Русский текст наверное был набран не внутри текстового редактора ББ1.6, а скопирован откуда-то из другого места (например из ББ1.5). Наберите литерную цепочку "Обязательная номенклатура на изделие" непосредственно в текстовом редакторе ББ1.6.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Среда, 15 Сентябрь, 2010 14:05 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Цитата:
BlackBox Component Builder 1.6 Community Edition (http://oberoncore.ru/blackbox/polygon). Меню Unicode Tools.

Для того, чтобы перекодировать все программы из старой версии BB.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Среда, 15 Сентябрь, 2010 15:06 

Зарегистрирован: Среда, 27 Май, 2009 17:33
Сообщения: 27
Набирал непосредственно в ББ1.6.
Код:
IF tableSQL # NIL THEN
   pp := 0;
   FOR i:=0 TO tableSQL.rows-1 DO
   tableSQL.Read(i, dataSQL);
   Strings.IntToString(i+2+zdvig, row);
   INC(pp);
   Strings.IntToString(pp,pps);            
   range := sheet.Range(CtlT.Str("A"+row), CtlT.Str("A"+row));      range.PUTValue(CtlT.Str(pps$));
   s:=dataSQL.fields[4]$;
   res := WinApi.WideCharToMultiByte(1251, {},  s, -1, ss, 255, NIL, NIL);
   range := sheet.Range(CtlT.Str("B"+row), CtlT.Str("B"+row));      range.PUTValue(CtlT.Str(s$));
   range := sheet.Range(CtlT.Str("C"+row), CtlT.Str("C"+row));      range.PUTValue(CtlT.Str(dataSQL.fields[6]$));      
END;

Где tableSQL это SqlDB.Table и содержит результат запроса к MS SQL
Русские символы не читаемые ни в B ни в C столбцах


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Среда, 15 Сентябрь, 2010 15:34 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Цитата:
Где tableSQL это SqlDB.Table и содержит результат запроса к MS SQL

Тогда проблема кроется в кодировке получаемых из базы данных строк. С базами данных все еще хуже чем с BB.
В какой кодировке хранятся данные в базе, какие свойства базы данных?

Попробуйте выполнить следующую команду SQL после соединения с базой данных:
"SET NAMES utf8" или "SET NAMES cp1251"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Среда, 15 Сентябрь, 2010 16:13 

Зарегистрирован: Среда, 27 Май, 2009 17:33
Сообщения: 27
Кодировка БД Cyrillic_General_CI_AS.
Результат запроса так же выводится в текстовый файл таким методом viewtopic.php?p=50633#p50633
Выводится читаемое.

Попробовал на другом компьютере результат тот же(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Среда, 15 Сентябрь, 2010 16:44 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
http://www.artlebedev.ru/tools/decoder/
Сказал по поводу вашей:
Цитата:
Îáåçàòåëüíàÿ íàìåíêëàòóðà íà èçäåëèå

CP1252 → CP1251

Попробуйте:
Код:
tab: SqlDB.Table;
tab.Exec("SET NAMES cp1251");

на будущее лучше использовать
Cyrillic_General_CI (cp1251)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Вторник, 21 Сентябрь, 2010 13:45 

Зарегистрирован: Среда, 27 Май, 2009 17:33
Сообщения: 27
Все таки беда была в кодировке самого документа(могла ли помнятся кодировка когда я сменил шрифт по умолчанию для документов и форм на Arial).
Развернул BlackBox Component Builder 1.6 Community Edition
Перекодировал все документы(Формы только в ручную пришлось)
теперь и этот код то же нормально выводится в Excel.
Цитата:
Код:
IF tableSQL # NIL THEN
   pp := 0;
   FOR i:=0 TO tableSQL.rows-1 DO
   tableSQL.Read(i, dataSQL);
   Strings.IntToString(i+2+zdvig, row);
   INC(pp);
   Strings.IntToString(pp,pps);            
   range := sheet.Range(CtlT.Str("A"+row), CtlT.Str("A"+row));      range.PUTValue(CtlT.Str(pps$));
   s:=dataSQL.fields[4]$;
   res := WinApi.WideCharToMultiByte(1251, {},  s, -1, ss, 255, NIL, NIL);
   range := sheet.Range(CtlT.Str("B"+row), CtlT.Str("B"+row));      range.PUTValue(CtlT.Str(s$));
   range := sheet.Range(CtlT.Str("C"+row), CtlT.Str("C"+row));      range.PUTValue(CtlT.Str(dataSQL.fields[6]$));      
END;

Только не понимаю как могут быть связаны код документа в ББ и результат запроса от MSSQL
PS у меня в Развернул BlackBox Component Builder 1.6 Community Edition почему то не работает Ctrl+Ins и Ctrl+V в диалоге поиска


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CtlExcel9
СообщениеДобавлено: Вторник, 21 Сентябрь, 2010 16:28 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Знаете, хитрый MySQL может адаптировать кодировку ответа к кодировке запроса, типа того.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB