2014-02-11 64 views
0

在我的應用程序中,我使用libxl庫來讀取xls [x]文件。從文件中提取數據並將其顯示在表QTableWidget中。 但現在我需要添加對讀取csv文件的支持。我如何做到這一點兼容現有的代碼(使用libxl方法load(),getSheet()等)(libxl不支持csv)。Qt:使用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()); 

我應該使用哪種設計模式?

回答

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>(); 
} 
創建