Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > ковертация в WORD и из него


Автор: A5uKa 4.4.2009, 10:12
Нужен код для ковертация в WORD и из него...  smile 

Пробую вот это...
Код

Variant word_app;
Variant word_docs;
Variant word_this_document;
char* f = "D:\\www.doc";
word_app = Variant::CreateObject("word.application");
word_docs = word_app.OlePropertyGet("documents");
word_this_document = word_docs.OleFunction("Open",f);
word_app.OlePropertySet("Visible",(Variant)true);


Но выдаёт странную ошибку "Ошибка". Элементов работы с вордом в 2009 с++ нету , кроме того я хочу чтобы оно работало как с 2007 так и с 2003 оффисами.  Что можете посоветовать ?

Автор: Alca 4.4.2009, 11:47
Doc -> Txt (C++Builder 6.0)
Код

void __fastcall TfrmMain::doConvertFiles(AnsiString asFilePath) {    
    staInfo->SimpleText = "Файл:  " + MinimizeName(asFilePath, staInfo->Canvas, 180);

    //эти файлы не проверяем
    AnsiString asExt = ExtractFileExt(asFilePath).UpperCase();
    AnsiString asFileName = ExtractFileExt(asFilePath).UpperCase();

    if (asExt == ".DOC" || asExt == ".RTF") {                    //ChangeFileExt( Application->ExeName, ".INI" )
        //DOC -> TXT
        Variant vWordBasic = Variant::CreateObject("Word.Basic");
        ////vWordBasic.Exec(PropertySet("Visible") << false);

        //идем по процессам
        PROCESSENTRY32 PC32;
        HANDLE hnd = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        if ((int)hnd == -1) {
            return;
        }
        PC32.dwSize = sizeof(PC32);
        int i = Process32First(hnd, &PC32);

        bool bIsWordExists = false; //наличие WINWORD.EXE

        while (bIsWordExists == true) {
            while (i) {
                // PID процесса берётся из PC32.th32ProcessID;
                // Имя файла через ExtractFileName(PC32.szExeFile);
                i = Process32Next(hnd, &PC32);  //ShowMessage(AnsiString(PC32.szExeFile));
                if (AnsiString(PC32.szExeFile).UpperCase() == "WINWORD.EXE") {
                    bIsWordExists = true;
                }
            };
        }
        CloseHandle(hnd);

        vWordBasic.Exec(Procedure("FileOpen")   << asFilePath);                               Sleep(SLEEP_TIME);
        vWordBasic.Exec(Procedure("FileSaveAs") << ChangeFileExt(asFilePath, ".txt") << 3);   Sleep(SLEEP_TIME);
        vWordBasic.Exec(Procedure("AppClose"));

        //сброс всяких read-only
        FileSetAttr(asFilePath, 0);
        //удаляем файл
        do {
            DeleteFile(asFilePath);
        }
        while (FileExists(asFilePath));
    }
}

Автор: A5uKa 4.4.2009, 13:40
Спасибо попробую.

Надеюсь с unicod-ом проблем не будет :/

Цитата

[BCC32 Error] MainC.cpp(299): E2451 Undefined symbol 'PROCESSENTRY32'

Автор: xvr 5.4.2009, 22:07
Цитата(Alca @ 4.4.2009,  11:47)
Doc -> Txt (C++Builder 6.0)
Код

void __fastcall TfrmMain::doConvertFiles(AnsiString asFilePath) {    

        Variant vWordBasic = Variant::CreateObject("Word.Basic");
        ////vWordBasic.Exec(PropertySet("Visible") << false);

        //идем по процессам
        PROCESSENTRY32 PC32;
        HANDLE hnd = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        if ((int)hnd == -1) {
            return;
        }
        PC32.dwSize = sizeof(PC32);
        int i = Process32First(hnd, &PC32);

        bool bIsWordExists = false; //наличие WINWORD.EXE

        while (bIsWordExists == true) {
            while (i) {
                // PID процесса берётся из PC32.th32ProcessID;
                // Имя файла через ExtractFileName(PC32.szExeFile);
                i = Process32Next(hnd, &PC32);  //ShowMessage(AnsiString(PC32.szExeFile));
                if (AnsiString(PC32.szExeFile).UpperCase() == "WINWORD.EXE") {
                    bIsWordExists = true;
                }
            };
        }
        CloseHandle(hnd);

}

А можно узнать смысл манипуляций с CreateToolhelp32Snapshot и циклом while, который ни разу не выполняется и результаты работы которого (если бы даже он выполнился) не используются?
PS. Исходный код должен работать, можно попробовать в Open подать все аргументы (их там еще пачка, все опциональные)
Где хоть ломается?

Автор: A5uKa 6.4.2009, 13:48
не могу разобраться ...

+ на какой элемент можно выносить word текст ...

Автор: Alca 6.4.2009, 13:56
Цитата

на какой элемент можно выносить word текст 

Расшифруй

Автор: A5uKa 6.4.2009, 14:46
По разному форматированный

например :
Цитата

Cтрока1
Строка2


Какой элемент это тянет :/
и какая библиотека для PROCESSENTRY32  ...

Автор: Alca 6.4.2009, 14:58
Цитата

и какая библиотека для PROCESSENTRY32  ...

Код

#include <tlhelp32.h>


Добавлено через 1 минуту и 13 секунд
Цитата

Какой элемент это тянет :/

TRichEdit сгодиться?

Автор: A5uKa 6.4.2009, 15:18
Цитата

TRichEdit сгодиться? 

да вот его и пробую. Но не знаю один у него шрифт на весь текст или нет. Вот что я и хочу узнать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)