OberonCore
https://forum.oberoncore.ru/

CtlExcel9
https://forum.oberoncore.ru/viewtopic.php?f=23&t=2848
Страница 1 из 1

Автор:  l2qwe [ Вторник, 14 Сентябрь, 2010 18:17 ]
Заголовок сообщения:  CtlExcel9

При выводе данных в 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) ;

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

Автор:  l2qwe [ Вторник, 14 Сентябрь, 2010 18:57 ]
Заголовок сообщения:  Re: CtlExcel9

и еще не получается установить текст в ячейках по центру

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


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

Автор:  Пётр Кушнир [ Вторник, 14 Сентябрь, 2010 19:08 ]
Заголовок сообщения:  Re: CtlExcel9

А, простите, использование Excel так критично? может, вдарить по OpenDocument Format? их есть у нас...

Автор:  ==== [ Вторник, 14 Сентябрь, 2010 19:19 ]
Заголовок сообщения:  Re: CtlExcel9

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

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


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


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

Автор:  l2qwe [ Вторник, 14 Сентябрь, 2010 19:23 ]
Заголовок сообщения:  Re: CtlExcel9

Пётр Кушнир писал(а):
А, простите, использование 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)

Автор:  Иван Денисов [ Вторник, 14 Сентябрь, 2010 19:47 ]
Заголовок сообщения:  Re: CtlExcel9

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

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

Автор:  Александр Ильин [ Вторник, 14 Сентябрь, 2010 19:48 ]
Заголовок сообщения:  Re: CtlExcel9

l2qwe писал(а):
range.PUTVerticalAlignment(CtlT.Int(Excel.xlCenter));
А текст все равно с лева;

Автор:  l2qwe [ Среда, 15 Сентябрь, 2010 11:13 ]
Заголовок сообщения:  Re: CtlExcel9

Александр Ильин писал(а):
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

Автор:  Иван Денисов [ Среда, 15 Сентябрь, 2010 12:42 ]
Заголовок сообщения:  Re: CtlExcel9

Вот такая программа вывела правильный текст в 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 все еще нетривиальное хранение текстовых файлов, разные куски программы могут быть в разных кодировках, а отображаться корректно при этом.

Автор:  Сергей Губанов [ Среда, 15 Сентябрь, 2010 13:18 ]
Заголовок сообщения:  Re: CtlExcel9

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

Автор:  Иван Денисов [ Среда, 15 Сентябрь, 2010 14:05 ]
Заголовок сообщения:  Re: CtlExcel9

Цитата:
BlackBox Component Builder 1.6 Community Edition (http://oberoncore.ru/blackbox/polygon). Меню Unicode Tools.

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

Автор:  l2qwe [ Среда, 15 Сентябрь, 2010 15:06 ]
Заголовок сообщения:  Re: CtlExcel9

Набирал непосредственно в ББ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 столбцах

Автор:  Иван Денисов [ Среда, 15 Сентябрь, 2010 15:34 ]
Заголовок сообщения:  Re: CtlExcel9

Цитата:
Где tableSQL это SqlDB.Table и содержит результат запроса к MS SQL

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

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

Автор:  l2qwe [ Среда, 15 Сентябрь, 2010 16:13 ]
Заголовок сообщения:  Re: CtlExcel9

Кодировка БД Cyrillic_General_CI_AS.
Результат запроса так же выводится в текстовый файл таким методом viewtopic.php?p=50633#p50633
Выводится читаемое.

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

Автор:  Иван Денисов [ Среда, 15 Сентябрь, 2010 16:44 ]
Заголовок сообщения:  Re: CtlExcel9

http://www.artlebedev.ru/tools/decoder/
Сказал по поводу вашей:
Цитата:
Îáåçàòåëüíàÿ íàìåíêëàòóðà íà èçäåëèå

CP1252 → CP1251

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

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

Автор:  l2qwe [ Вторник, 21 Сентябрь, 2010 13:45 ]
Заголовок сообщения:  Re: CtlExcel9

Все таки беда была в кодировке самого документа(могла ли помнятся кодировка когда я сменил шрифт по умолчанию для документов и форм на 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 в диалоге поиска

Автор:  Илья Ермаков [ Вторник, 21 Сентябрь, 2010 16:28 ]
Заголовок сообщения:  Re: CtlExcel9

Знаете, хитрый MySQL может адаптировать кодировку ответа к кодировке запроса, типа того.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/