0

在我的应用程序中,我使用 libxl 库来读取 xls[x] 文件。从文件中获取数据并显示在 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 回答