Ненавижу Microsoft Office !!!
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);
}
}
Могу лишь посоветовать использовать TMSComponentS Pack - Там есть очччень классные компоненты, в том числе и для работы с Ехсел,очень быстро работают, и в них возможно решение твоей проблемы. Если захочешь - могу кинуть ссылку.
Цитата: Malice
Могу лишь посоветовать использовать TMSComponentS Pack - Там есть очччень классные компоненты, в том числе и для работы с Ехсел,очень быстро работают, и в них возможно решение твоей проблемы. Если захочешь - могу кинуть ссылку.
Тока если они бесплатные
Хм... компоненты не бесплатные. Я пользуюсь взломанной версией, и не испытываю от этого никаких неудобств. :D
По причине, понятной одним гуру программирования, бОльшая часть глюков пропадает сразу же :D.
А ещё нужно в окне Debugger options отключить COM cross-process support - почему-то порой выдаёт ошибки в вызываемых приложениях
Цитата: Malice
Хм... компоненты не бесплатные. Я пользуюсь взломанной версией, и не испытываю от этого никаких неудобств. :D
Заказчик будет не рад.
Ааа - ааах давай ссылку черт с ним !!
Цитата: el scorpio
Для начала поубирать нафиг все char и использовать только AnsiString.
По причине, понятной одним гуру программирования, бОльшая часть глюков пропадает сразу же :D.
А ещё нужно в окне Debugger options отключить COM cross-process support - почему-то порой выдаёт ошибки в вызываемых приложениях
По причине, понятной одним гуру программирования, бОльшая часть глюков пропадает сразу же :D.
А ещё нужно в окне Debugger options отключить COM cross-process support - почему-то порой выдаёт ошибки в вызываемых приложениях
Попробовал заменить на AnsiString - не помогло. COM cross-process support и так был отключен.
Где то слышал что тип вариант не подходит для возращаемого значения OleFunction("FindNext", ...), мол используй OleVariant. Но сним даже не компилиться.
Может еще что подскажешь
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 ?
Цитата: Snikex
..
А вот вопрос на засыпку (отвечать не обязательно): как в Ллтст Excel вставить другой лист Excel ?
..
:D А это еще что такое?? Ты вообще в Excel'е работал?!!
Цитата: koltaviy
:D А это еще что такое?? Ты вообще в Excel'е работал?!!
Вообщето не работал, поетому и интересуюся
Variant RangeForFind = m_WorkSheet.OlePropertyGet("UsedRange");
Variant CeilFindResult = RangeForFind.OleFunction("Find", "пьяный пупсик");
Variant LineRange = varCeil.OlePropertyGet("EntireRow").
LineRange.OleProcedure("Insert");
Оно то работает, да вот только при выполнении ругается: "Файл "RESUME.XLW" уже существует в данном месте. Заменить?".
Блин !!! Хотя нет, не блин - БЛИНЮГА здоровенная. Что это за файл такой, откуда он взялся ?! Как от этой хр..ни избавиться ?
В Microsoft одни ... сидят, нормально зделать ничего немогут, чтоб не помучаться. Этот офис. Смотреть на него не могу !!!