0

私のアプリでは、読み取り xls[x] ファイルに libxl ライブラリを使用しています。ファイルから取得され、テーブル QTableWidget に表示されるデータ。しかし今、読み取り csv ファイルのサポートを追加する必要があります。現在のコード (libxl メソッド load()、getSheet() など) と互換性を持たせる方法 (libxl は csv をサポートしていません)。

Book* book;
if (excelfileName.endsWith(".xlsx")) {
    book = xlCreateXMLBook();
} else if (excelfileName.endsWith(".xls")) {
    book = xlCreateBook();
} else {
    book = new CSVBook();
}

book->load(excelfileName.toLocal8Bit().data());

どのデザインパターンを使用する必要がありますか?

4

1 に答える 1

0

それを行うために、新しいクラス csvbook を作成しました

template<class TCHAR>
class csvbook: public libxl::IBookT<char>
{
    <...>
}

IBookT からすべての仮想メソッドを再宣言します。次のステップで、csvbook のすべてのメソッドの本体を同じファイルに宣言して記述しました。

関数で作成されたオブジェクト

template<class TCHAR>
csvbook<TCHAR>* csvCreateBook()
{
    csvbook<TCHAR>* book;
    book = new csvbook<TCHAR>;
    return book;
}

そしてその結果として

Book* book;
if (excelfileName.endsWith(".xlsx")) {
    book = xlCreateXMLBook();
} else if (excelfileName.endsWith(".xls")) {
    book = xlCreateBook();
} else {
    book = csvCreateBook<char>();
}
于 2014-02-12T03:25:59.253 に答える