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

Ваш аккаунт

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

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

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

Некоторые вопросы по Excel

1.2K
03 мая 2006 года
richel
142 / / 20.01.2005
Помогите мне, пожалуйста, в нескольких вопросах по Excel. В интернете по этим темам не нашла даже намека.
1) В .h
 
Код:
Variant __fastcall fromExcelCell(int Row, int Column);

В .cpp
 
Код:
Variant __fastcall TForm1::fromExcelCell(int Row, int Column)
{
try{
Variant result,cur;
cur = Sh.OlePropertyGet("Cells",Row,Column);
result = cur.OlePropertyGet("Value");
return result;
}catch(...) {;}
}

 
Код:
AnsiString upp = fromExcelCell(5,2); // Получить значение из ячейки

Код работает, но выдается предупреждение:
“Function should return a value”. Какая у меня закралась ошибочка?

2) Эту строку «upp» перевести в прописные буквы: В макросе код такой:
 
Код:
ActiveCell.FormulaR1C1 = "=UPPER(""текст"")"

Я пытаюсь перевести на Си.
 
Код:
Rang.OlePropertySet("FormulaR1C1",("=UPPER"+AnsiString(upp)).c_str());

Ошибка.

3)Нужно перевести на Си фразу
 
Код:
App.Goto.Reference:="R5C1" –перейти на конкретную ячейку

Как это на Билдере?
Прошу не футболить меня. По Excel-у знаю очень много, но идет много нестандартных вопросов, которые не могу составить с помощью подсказки Билдера. И на работе нет доступа к Интернету. Поэтому дома времени на раскручивание вопроса очень мало. Именно поэтому прошу помощи.
10K
03 мая 2006 года
лАмер
25 / / 27.06.2005
Цитата:
Originally posted by richel
Я пытаюсь перевести на Си.
 
Код:
Rang.OlePropertySet("FormulaR1C1",("=UPPER"+AnsiString(upp)).c_str());


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

Вот эта строчка мне понравилась особо :D Уж хотя бы так

 
Код:
Rang.OlePropertySet("FormulaR1C1",(AnsiString("=UPPER") + upp).c_str());
1.2K
03 мая 2006 года
richel
142 / / 20.01.2005
Цитата:
Originally posted by лАмер
Вы в дебаггере пробовали посмотреть результат приведения Variant к AnsiString?

Вот эта строчка мне понравилась особо :D Уж хотя бы так
 
Код:
Rang.OlePropertySet("FormulaR1C1",(AnsiString("=UPPER") + upp).c_str());


Спасибо. Меня путает количество ковычек в коде VBA. Утром опробую работу кода.

1.2K
04 мая 2006 года
richel
142 / / 20.01.2005
Нет, код не работает. Никто помочь не может?
585
05 мая 2006 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by _nоrth_
 
Код:
char str[16];
strcpy(str, "=UPPER(\"upp\")");
Rang.OlePropertySet("FormulaR1C1",str);


Потрудитесь посмотреть код с начала. upp - это не значение которое надо привести к верхнему регистру, а переменная типа AnsiString.

2 richel
Если говорите про ошибки, нельзя ли поподробнее о них. Скорее всего у вас неправильно составлена функция рабочего листа
требуется:

[COLOR=seagreen]=UPPER(something)[/COLOR]

есть

[COLOR=seagreen]=UPPERsomething[/COLOR]

попробуйте написать так

 
Код:
Rang.OlePropertySet("FormulaR1C1",(AnsiString("=UPPER(") + upp + ")").c_str());
9.4K
05 мая 2006 года
_nоrth_
99 / / 24.04.2006
Цитата:
Originally posted by honeybeer
Потрудитесь посмотреть код с начала. upp - это не значение которое надо привести к верхнему регистру, а переменная типа AnsiString.
) + upp + ")").c_str());[/CODE]

Ok

 
Код:
char str[128];
strcpy(str, "=UPPER(\"");
strcat(str, upp.c_str());
strcat(str, "\")");
Rang.OlePropertySet("FormulaR1C1",str);
585
05 мая 2006 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by _nоrth_
Ok
 
Код:
char str[128];
strcpy(str, "=UPPER(\"");
strcat(str, upp.c_str());
strcat(str, "\")");
Rang.OlePropertySet("FormulaR1C1",str);


Зачем это все, если в любом случае используется AnsiString?
Вы чувствуете разницу между вашим кодом и моим?

585
05 мая 2006 года
honeybeer
297 / / 06.09.2004
особенно в контексте вашего предыдущего поста :)

Цитата:
Originally posted by _nоrth_
И будь добр, отъе...


Будешь хамить - пойдешь в бан.

1
05 мая 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by honeybeer
особенно в контексте вашего предыдущего поста :)


Будешь хамить - пойдешь в бан.


Уже пошел. Хамов на форуме не нужно.

1.2K
05 мая 2006 года
richel
142 / / 20.01.2005
Цитата:
Если говорите про ошибки, нельзя ли поподробнее о них.


По первому пункту текст предупреждения я указала.
По 2-му - ошибка была в типе переменной.
По 3-му - просто не могу догадаться, как составить код не чисто на Си, а на Си Билдере.

 
Код:
App.Goto.Reference:="R5C1"

Поэтому тип AnsiString здесь уместен.
Спасибо за ответы. Завтра проверю работу кодов.
:)
10K
05 мая 2006 года
лАмер
25 / / 27.06.2005
Цитата:
Originally posted by richel

По 3-му - просто не могу догадаться, как составить код не чисто на Си, а на Си Билдере.


Я вас прошу, нет я вас просто умоляю... Не путайте язык программирования, среду программирования и библиотеки. Есть [COLOR=red]среда[/COLOR] Borland C++ Builder, в котором можно писать на [COLOR=red]языках[/COLOR] С и С++ и использовать [COLOR=red]библиотеки[/COLOR] VCL(откуда родом AnsiString), STL и проч.

1.2K
06 мая 2006 года
richel
142 / / 20.01.2005
Цитата:
Originally posted by лАмер
Я вас прошу, нет я вас просто умоляю... Не путайте язык программирования, среду программирования и библиотеки. Есть [COLOR=red]среда[/COLOR] Borland C++ Builder, в котором можно писать на [COLOR=red]языках[/COLOR] С и С++ и использовать [COLOR=red]библиотеки[/COLOR] VCL(откуда родом AnsiString), STL и проч.


Вы правы, извините, что ввела в заблуждение. Я просто не первый год на этом форуме, думала, что все уже знают, что программирую с среде Borland C++.
По 2 пункту - _nоrth_ , ты совершенно прав, вместо UPPER нужно написать ПРОПИСН. Тогда все работает. Путает макрос Эксела.
3-й пункт снимаю, т.к. я решила этот вопрос по другому. Просто сделала Select конкретной ячейки. Одно и то же, мне на нее нужно было перейти.
Остается разобраться в 1-м пункте. По нему еще никто не высказался.

9.5K
06 мая 2006 года
Damarus
101 / / 08.04.2006
Цитата:
Originally posted by richel
Вы правы, извините, что ввела в заблуждение. Я просто не первый год на этом форуме, думала, что все уже знают, что программирую с среде Borland C++.
По 2 пункту - _nоrth_ , ты совершенно прав, вместо UPPER нужно написать ПРОПИСН. Тогда все работает. Путает макрос Эксела.
3-й пункт снимаю, т.к. я решила этот вопрос по другому. Просто сделала Select конкретной ячейки. Одно и то же, мне на нее нужно было перейти.
Остается разобраться в 1-м пункте. По нему еще никто не высказался.



Можно попробовать изменить код так:

Код:
Variant __fastcall TForm1::fromExcelCell(int Row, int Column)
{
   Variant result,cur;
   try
   {
      cur = Sh.OlePropertyGet("Cells",Row,Column);
      result = cur.OlePropertyGet("Value");
   }
   catch(...) {;}
   return result;
}
1.2K
08 мая 2006 года
richel
142 / / 20.01.2005
Цитата:
Originally posted by Damarus
Можно попробовать изменить код так:
Код:
Variant __fastcall TForm1::fromExcelCell(int Row, int Column)
{
   Variant result,cur;
   try
   {
      cur = Sh.OlePropertyGet("Cells",Row,Column);
      result = cur.OlePropertyGet("Value");
   }
   catch(...) {;}
   return result;
}


Да, это так. Сама не догадалась.
Огромное всем спасибо за помощь. Все вопросы решены. И данная информация по Экселу в интернете не лишняя.:)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог