word, поиск и замена текста
От: greyfrost  
Дата: 29.03.09 18:09
Оценка:
в общем суть такая, полазил я полазил по форумам, но такого вроде нет. я создал приложение виндовсформ, подключил его к референсу Microsoft::Office::Interop::Word (без всяких #import) дальше все работало замечательно открываю, ищу просто с помощью перебора, а вот сравнить его с тем что надо не могу так как когда пытаюсь обратиться к свойству Range->Text мне во первых не вылазиет подсказки после "->", что он там есть, хотя в обозревателе объектов он есть и во время отладки тоже получается посмотреть его значение.

 Word::Application ^w = gcnew Word::Application();
             w->Visible=true;
             Word::Document ^doc = gcnew Word::Document();
             System::Object ^objFilename = gcnew System::Object();
             System::Object ^objMissing = gcnew System::Object();
            
             objFilename = "C:\\rabota\\employee.doc";
             objMissing = Missing::Value;

             doc = w->Documents->Open(objFilename,
                 objMissing,objMissing,objMissing,objMissing,objMissing,
                 objMissing,objMissing,objMissing,objMissing,objMissing,
                 objMissing,objMissing,objMissing,objMissing,objMissing);

             String ^s="@id";
             System::Object ^objBegin = gcnew System::Object();
             System::Object ^objEnd = gcnew System::Object();
             Word::Range ^r=doc->Content;
             for(int i=0; i<=50-s->Length;i++) {
                 objBegin=i;
                 objEnd=i+s->Length;
                 r=doc->Range(objBegin,objEnd);
                 if (r->!!!!!!!!!!!!!!!!!!!!!!!==s){
                 r->Cut();
                     r->InsertAfter("пара слов");
                 };


как быть?
Re: word, поиск и замена текста
От: dmitry_npi Россия  
Дата: 30.03.09 08:15
Оценка: 2 (1)
Здравствуйте, greyfrost, Вы писали:

G>(без всяких #import)

Ну и зря. Вы, получается, используете управляемые расширения неуправляемого языка, чтобы связаться с управляемой оберткой неуправляемого приложения

Для примера, я делал так (обычный C++, #import)

void FindAndReplaceText(const wchar_t* match, const wchar_t* replacement)
{
    wordApp->Selection->Find->ClearFormatting();
    wordApp->Selection->Find->Text = match;
    wordApp->Selection->Find->Replacement->ClearFormatting();
    wordApp->Selection->Find->Replacement->Text = replacement;
    _variant_t vReplace(wdReplaceAll);
    VARIANT_BOOL vb = wordApp->Selection->Find->Execute(&vtMissing, &vtMissing, &vtMissing, &vtMissing, &vtMissing,
                 &vtMissing, &vtMissing,&vtMissing, &vtMissing, &vtMissing, &vReplace);
}


Вам нужно сделать наподобие, только используя синтаксис С++/CLI
Атмосферная музыка — www.aventuel.net
Re[2]: word, поиск и замена текста
От: greyfrost  
Дата: 30.03.09 08:53
Оценка:
Здравствуйте, dmitry_npi, Вы писали:


_>Ну и зря. Вы, получается, используете управляемые расширения неуправляемого языка, чтобы связаться с управляемой оберткой неуправляемого приложения


я бы и рад использовать #Import, но к сожалению не знаю как его подключать в не консольном приложении. в консольном у меня все получается, а мне нужен виндовсформ.( Может и здесь подскажете?
Re[3]: word, поиск и замена текста
От: dmitry_npi Россия  
Дата: 30.03.09 18:54
Оценка:
Здравствуйте, greyfrost, Вы писали:

G>я бы и рад использовать #Import, но к сожалению не знаю как его подключать в не консольном приложении. в консольном у меня все получается, а мне нужен виндовсформ.( Может и здесь подскажете?


А в чем проблема-то? Или вам нужно сгенерировать чисто управляемый код (/clr:pure), без примесей обычного?
Атмосферная музыка — www.aventuel.net
Re[4]: word, поиск и замена текста
От: greyfrost  
Дата: 31.03.09 13:12
Оценка:
Здравствуйте, dmitry_npi, Вы писали:

_>А в чем проблема-то? Или вам нужно сгенерировать чисто управляемый код (/clr:pure), без примесей обычного?


честно сказать не особо понлял)) но суть такая, мне нужно сделать приложение именно винформ, а я умею подключать импорт только в консольном приложении...

все заработало, за совет спасибо, но теперь новая проблема. если искать несколько слов подрят, то почемуто ищется только первое(((

Word::Application ^w = gcnew Word::Application();
             Word::Document ^doc = gcnew Word::Document();
             System::Object ^objFileName = gcnew System::Object();
             System::Object ^objFileNameSave = gcnew System::Object();
             System::Object ^objMissing = gcnew System::Object();
             System::Object ^objReplace = gcnew System::Object();
             objReplace=1;
             w->Visible=true;
             objFileName = "C:\\для rabota\\employee.doc";
             objMissing = Missing::Value;
             String ^sid="@id";
             String ^sname="@name";
             String ^sresume="@resume";
             String ^sdob="@dob";
             String ^spicture="@picture";
             String ^srep;

             for (int i=0; i<=this->dataGridView2->RowCount-1; i++){
             doc = w->Documents->Open(objFileName,
                 objMissing,objMissing,objMissing,objMissing,objMissing,
                 objMissing,objMissing,objMissing,objMissing,objMissing,
                 objMissing,objMissing,objMissing,objMissing,objMissing);
             objFileNameSave = "C:\\для rabota\\employee"+dataGridView2->Rows[i]->Cells[0]->Value->ToString()+".doc";
             doc->SaveAs(objFileNameSave,objMissing,objMissing,objMissing,objMissing,
                         objMissing,objMissing,objMissing,objMissing,objMissing,
                         objMissing,objMissing,objMissing,objMissing,objMissing,objMissing);
//id
srep=this->dataGridView2->Rows[i]->Cells[0]->Value->ToString();
w->Selection->Find->ClearFormatting();
w->Selection->Find->Text = sid;
w->Selection->Find->Replacement->ClearFormatting();
w->Selection->Find->Replacement->Text = srep;
w->Selection->Find->Execute(objMissing,objMissing,objMissing,objMissing,
                    objMissing,objMissing,objMissing,objMissing,objMissing,
                objMissing,objReplace,objMissing,objMissing,objMissing,
                objMissing);
//name
srep=this->dataGridView2->Rows[i]->Cells[1]->Value->ToString();
w->Selection->Find->ClearFormatting();
w->Selection->Find->Text = sname;
w->Selection->Find->Replacement->ClearFormatting();
w->Selection->Find->Replacement->Text = srep;
w->Selection->Find->Execute(objMissing,objMissing,objMissing,objMissing,
                    objMissing,objMissing,objMissing,objMissing,objMissing,
                objMissing,objReplace,objMissing,objMissing,objMissing,
                objMissing);
//и дальше еще несколько слов...

меняется толькопервое слово во всех документах
Re[5]: word, поиск и замена текста
От: greyfrost  
Дата: 31.03.09 14:50
Оценка:
ой все. разобрался, всем еще раз спасибо, там же не 1, а реплэйс олл константу надо поставить)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.