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

Ваш аккаунт

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

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

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

Ненавижу Microsoft Office !!!

19K
09 апреля 2007 года
Snikex
32 / / 03.04.2007
Пока учился в универе уроды достали "офисом", а теперь вот приходится платиться за то что не учил эти темы. Дали задание вывод накладных в Excel по имеющимся шаблонам (надо лишь програмно заменить определенные слова). Вот функия котороя должна это делать. Она заменяет все ячейки с текстом szOldValue текстом szNewValu, после чего залетает, предпологаю что функция не может определить когда заменены все элементы. Может кто знает как правильно надо.

classCExelManager
{
private:
Variant m_Application;
Variant m_WorkSheet;
Variant m_Range;
...
public:
...
void FindEndReplaceAll( const char * szOldValue, const char * szNewValu );
...
};

void CExelManager::FindEndReplaceAll(
const char * szOldValue,
const char * szNewValu )
{
Variant RangeFind;
RangeFind = m_WorkSheet.OlePropertyGet("UsedRange");

if ( RangeFind.IsEmpty() )
return;


Variant RangeResultCeil = RangeFind.OleFunction(
"Find",
szOldValue);


static int i = 0;

//!VarIsNull(RangeResult)
while ( RangeResultCeil.IsEmpty() )
{
//RangeResult.OlePropertySet("Formula", szNewValu);

RangeResultCeil.OlePropertySet("Formula", IntToStr(i++).c_str());

RangeResultCeil = RangeFind.OleFunction("FindNext", RangeResultCeil);

}

}
19K
09 апреля 2007 года
Malice
33 / / 13.03.2007
Могу лишь посоветовать использовать TMSComponentS Pack - Там есть очччень классные компоненты, в том числе и для работы с Ехсел,очень быстро работают, и в них возможно решение твоей проблемы. Если захочешь - могу кинуть ссылку.
19K
09 апреля 2007 года
Snikex
32 / / 03.04.2007
Цитата: Malice
Могу лишь посоветовать использовать TMSComponentS Pack - Там есть очччень классные компоненты, в том числе и для работы с Ехсел,очень быстро работают, и в них возможно решение твоей проблемы. Если захочешь - могу кинуть ссылку.


Тока если они бесплатные

19K
09 апреля 2007 года
Malice
33 / / 13.03.2007
Хм... компоненты не бесплатные. Я пользуюсь взломанной версией, и не испытываю от этого никаких неудобств. :D
309
10 апреля 2007 года
el scorpio
1.1K / / 19.09.2006
Для начала поубирать нафиг все char и использовать только AnsiString.
По причине, понятной одним гуру программирования, бОльшая часть глюков пропадает сразу же :D.

А ещё нужно в окне Debugger options отключить COM cross-process support - почему-то порой выдаёт ошибки в вызываемых приложениях
19K
10 апреля 2007 года
Snikex
32 / / 03.04.2007
Цитата: Malice
Хм... компоненты не бесплатные. Я пользуюсь взломанной версией, и не испытываю от этого никаких неудобств. :D



Заказчик будет не рад.
Ааа - ааах давай ссылку черт с ним !!

19K
10 апреля 2007 года
Snikex
32 / / 03.04.2007
Цитата: el scorpio
Для начала поубирать нафиг все char и использовать только AnsiString.
По причине, понятной одним гуру программирования, бОльшая часть глюков пропадает сразу же :D.

А ещё нужно в окне Debugger options отключить COM cross-process support - почему-то порой выдаёт ошибки в вызываемых приложениях



Попробовал заменить на AnsiString - не помогло. COM cross-process support и так был отключен.

Где то слышал что тип вариант не подходит для возращаемого значения OleFunction("FindNext", ...), мол используй OleVariant. Но сним даже не компилиться.

Может еще что подскажешь

19K
10 апреля 2007 года
Snikex
32 / / 03.04.2007
Ура-а-а-а !!! Всем спасибочки ПРОБЛЕМА решена ! Оказывается есть процедурка которая все делает сама - это "Replace". Как оказалось она заменяет не одно значение, а все что находит, а главное без глюков !! В общем моя большая и толстая функция превратилась в это:

void CExelManager::FindEndReplaceAll(
const char * szOldValue,
const char * szNewValu )
{
Variant RangeFind = m_WorkSheet.OlePropertyGet("UsedRange");

if ( RangeFind.IsNull() )
return;

RangeFind.OleProcedure(
"Replace",
szOldValue,
szNewValu
);
}

Правда эта функция заменит обсолютно все, даже если это и не надо, но это другая история, хотя если кто напишет решение не помешает

А вот вопрос на засыпку (отвечать не обязательно): как в Ллтст Excel вставить другой лист Excel ?
263
10 апреля 2007 года
koltaviy
816 / / 16.12.2004
Цитата: Snikex

..
А вот вопрос на засыпку (отвечать не обязательно): как в Ллтст Excel вставить другой лист Excel ?
..


:D А это еще что такое?? Ты вообще в Excel'е работал?!!

19K
10 апреля 2007 года
Snikex
32 / / 03.04.2007
Цитата: koltaviy
:D А это еще что такое?? Ты вообще в Excel'е работал?!!


Вообщето не работал, поетому и интересуюся

19K
10 апреля 2007 года
Snikex
32 / / 03.04.2007
Ну вот допрыгался теперь есть такая тема: надо вставить строчку ячеек. Т. е. имеется таблица, в некоторой таблице есть ячейка со значение "пьяный пупсик" (или типа того), мне нужно найти эту ячейку и вставить перед ней строку. Делал это так:

Variant RangeForFind = m_WorkSheet.OlePropertyGet("UsedRange");

Variant CeilFindResult = RangeForFind.OleFunction("Find", "пьяный пупсик");

Variant LineRange = varCeil.OlePropertyGet("EntireRow").

LineRange.OleProcedure("Insert");

Оно то работает, да вот только при выполнении ругается: "Файл "RESUME.XLW" уже существует в данном месте. Заменить?".

Блин !!! Хотя нет, не блин - БЛИНЮГА здоровенная. Что это за файл такой, откуда он взялся ?! Как от этой хр..ни избавиться ?

В Microsoft одни ... сидят, нормально зделать ничего немогут, чтоб не помучаться. Этот офис. Смотреть на него не могу !!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог