10

Qt4.5.3とWindowsXPを使用しています。使用および生成されている情報を含むドキュメントを生成するには、アプリケーションが必要です。使用される情報は文字列(QStringより具体的には)のみであり、生成される情報も文字列と画像になります。

ドキュメントをMSWordドキュメント(.doc)にするか、Open Document Format()にすることができます。また、ドキュメントをフォント、画像、データテーブル、一部の背景色などで.odtフォーマットする必要があります。

、、を使用してPDFファイルを作成しました。しかし、同じものをodtに適用しようとすると、フォーマットエラーだけが発生しました。QTextDocumentQTextCursorQPrinterQTextDocument

C ++を使用する他のライブラリを使用してそのようなドキュメントを生成する方法はありますか?C ++でそのようなドキュメント( .odt / .doc )を生成するためにどのように使用しますか?これに関するポインタ、リンク、例は大歓迎です。

4

3 に答える 3

9

私はこれをQt途中で行いました。つまり、ActiveQtモジュールを使用します。

MS Wordのリファレンスドキュメントは、次の方法で入手できます。

MSDNドキュメントVBAWD10.chm。実際にはMSWord用のActiveXAPIを含むファイルを指しています。

Wordアプリケーションは次の方法で初期化できます

QAxWidget wordApplication("Word.Application"); 

アプリケーションという単語のサブオブジェクトは、次の関数を介して取得できます。

QAxBase::querySubObject()

例:

QAxObject *activeDocument = wordApplication.querySubObject("ActiveDocument");

取得したサブオブジェクトを引数として渡すには、

QVariant QAxBase::asVariant () const

オブジェクトという単語を含む関数呼び出しは、関数を使用して呼び出すことができます。

 QAxBase::dynamicCall ()

例:

activeDocument->dynamicCall("Close(void)");

かなりの苦労といくつかの説得の後、それはうまく機能しています。:)

同様の解決策を探しているすべての人に役立つことを願っています...

于 2010-07-28T13:02:10.663 に答える
1

多分これを使用してodf形式でファイルに書き込むことができますhttp://doc.trolltech.com/4.6/qtextdocumentwriter.html#supportedDocumentFormatsqtはdocdocxなどを出力する方法を知りませんが、com(activeQt)またはいくつかを使用できます必要な形式または他の形式で書き込むための他のライブラリ

于 2010-07-05T08:31:02.950 に答える
0

私にとって、Officeアプリケーションを自動化するためのより良い方法は、オブジェクトモデルをMSWordCOMタイプライブラリからC++プロジェクトにインポートすることです。これは、OutlookアプリケーションのQutlookの例と非常によく似ています。必要に応じて、oleview.exeを使用してライブラリGuidを取得し、この手法をExcelおよびPowerPointに外挿することができます。これがGitHubでの完全なプロジェクトです。

QMakeプロジェクトファイル:

QT += widgets axcontainer
CONFIG += c++11 cmdline
DEFINES += QT_DEPRECATED_WARNINGS

DUMPCPP=$$absolute_path("dumpcpp.exe", $$dirname(QMAKE_QMAKE))
TYPELIBS = $$system($$DUMPCPP -getfile {00020905-0000-0000-C000-000000000046})

isEmpty(TYPELIBS) {
    message("Microsoft Word type library not found!")
    REQUIRES += StackOverflow Rocks
} else {
    SOURCES  = main.cpp
}

main.cppソース:

#include <QApplication>
#include <QStandardPaths>
#include <QDir>
#include "MSWORD.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Word::Application word;
    if (!word.isNull()) {
        word.SetVisible(false);

        Word::Documents* docs = word.Documents();
        Word::Document* newDoc = docs->Add();
        Word::Paragraph* p = newDoc->Content()->Paragraphs()->Add();
        p->Range()->SetText("Hello Word Document from Qt!");
        p->Range()->InsertParagraphAfter();
        p->Range()->SetText("That's it!");

        QDir outDir(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation));

        QVariant fileName = outDir.absoluteFilePath("wordaut.docx");
        QVariant format = Word::wdFormatXMLDocument;
        newDoc->SaveAs2(fileName, format);

        QVariant fileName2 = outDir.absoluteFilePath("wordaut2.doc");
        QVariant format2 = Word::wdFormatDocument;
        newDoc->SaveAs2(fileName2, format2);

        newDoc->Close();
        word.Quit();
    }

    return 0;
}
于 2020-01-15T17:03:05.700 に答える