Qt:使用libxl兼容界面打开csv文件

Qt: Open csv files with libxl-compatible interface

本文关键字:csv 文件 界面 使用 libxl Qt      更新时间:2023-10-16

在我的应用程序中,我使用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>();
}