Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблемы с OLE в Builder XE

65K
11 января 2012 года
Dreablin
7 / / 11.01.2012
Мой старый код был использоване в 2006 Builder. Функция выгружает данные из StringGrid в Excel.
 
Код:
for (int Row = 0; Row < Grid1->RowCount; Row++)
      for (int Col = 0; Col < Grid1->ColCount; Col++)
          Sh.OlePropertyGet("Cells", Row + 1, Col + 1).OlePropertySet("Value",Grid1->Cells[Col][Row].c_str());


Остальной код не привожу, потому что проблема локализована тут(Зачем захламлять). Если важно, приведу весь код.
Симптомы:
В Excel переносится часть ячейки[0][0](например 3 из 6 символов), а в компиляторе открывается страничка "CPU" с асемблером. Если прыгать дальше стрелочкой "step over", то выдаст ошибку "Project имя faulted with message :'system exception (code 0xc0000374) at 0x771737b7'. Process Stopped. Use Step or Run to continue." Если нажимать дальше "Run", то переносит и другие ячейки, то же частично.
Кстати, пока писал пост, потыкал еще, заметил закономерность - переносит половину ячейки всегда.
Проблема в том, что в XE перешли в Unicode? Подскажите, пожалуйста:)
10
11 января 2012 года
Freeman
3.2K / / 06.03.2004
Цитата: Dreablin
Проблема в том, что в XE перешли в Unicode?


Наиболее вероятно.

277
11 января 2012 года
arrjj
1.7K / / 26.01.2011
 
Код:
for (int Row = 0; Row < Grid1->RowCount; Row++)
      for (int Col = 0; Col < Grid1->ColCount; Col++)
          Sh.OlePropertyGet("Cells", Row + 1, Col + 1).OlePropertySet("Value",WideString(Grid1->Cells[Col][Row]));


Или используй TApplicationExcel (по умолчанию пакет выключен)
65K
11 января 2012 года
Dreablin
7 / / 11.01.2012
Сон не дал результатов - не могу понять, в чем ошибка.
Пусть используются символы другой длинны... но функция то должна отдавать всю ячейку...
И если это не так, то выходит эта ( и возможно другие функции из данной библиотеки) нельзя больше использывать - будут вызывать ошибки?
Подключается она заголовком "ole2.h". Возможно есть Ole3?

По поводу TApplicationExcel - яндекс ничего вразумительного не показывает(
277
11 января 2012 года
arrjj
1.7K / / 26.01.2011
Цитата: Dreablin
...
По поводу TApplicationExcel - яндекс ничего вразумительного не показывает(



Сори попутал - TExcelApplication

Попробуй использоваьт не c_str а w_str (вроде).

65K
11 января 2012 года
Dreablin
7 / / 11.01.2012
w_str не помог.
Кстати TExcelApplication - компонент в закладке Servers ? у меня его нет.
среда - Embarcadero® C++Builder® XE Version 15.0.3890.34076 (Architect)
277
11 января 2012 года
arrjj
1.7K / / 26.01.2011
Project->Options->Packages там включить офис.
65K
11 января 2012 года
Dreablin
7 / / 11.01.2012
Люто-бешенно устав от всей этой ерунды сдался и решил подумать.
 
Код:
for (int Row = 0; Row < Grid1->RowCount; Row++)
      for (int Col = 0; Col < Grid1->ColCount; Col++)
          Sh.OlePropertyGet("Cells", Row + 1, Col + 1).OlePropertySet("Value",((AnsiString)Grid1->Cells[Col][Row]).c_str());

Работает.
277
11 января 2012 года
arrjj
1.7K / / 26.01.2011
Сдается мне что с разными версиями RAD Studio и разыми офисами результаты будут разными :)
65K
11 января 2012 года
Dreablin
7 / / 11.01.2012
Возможно.
Но главное принцип понять - новый RAD юзает wchar, а функция принимает char простой. Именно поэтому .w_char и не должен был сработать. Наоборот нужно то приводить к char. В простом, понятном и много лет меня выручающим AnsiString.c_str() я уверен, он вернет то, что надо)
Поэтому что бы и как бы там не хранил RAD в своем Grid, я перевожу это в привычный формат, а оттуда в нужный.
Вообще думаю должно работать на любой версии, если они в ХЕ4 не решат AnsiString сделать intом...
277
11 января 2012 года
arrjj
1.7K / / 26.01.2011
UnicodeString::t_str()
Правда это в 2009-м RAD'е
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог