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/ |