在我的应用程序中,我使用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());
我应该使用哪种设计模式?
为此,我创建了一个新的类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>();
}