碰到个活要读取Excel文件中的数据,搜了一下Excel有ODBC驱动可以使用,碰巧wxWidgets又有ODBC模块,真是可以省掉不少事情。本以为可以轻松搞定,不料一直没有能连接上,郁闷了一阵子,后来在RTFS的原则下终于调试出,原来是wxDb的一个bug,修复和提交patch后,问题解决。
bug submission: https://sourceforge.net/tracker/?func=detail&atid=309863&aid=1494705&group_id=9863
使用范例: wxString s = wxT("DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';DBQ=")+filename; wxDbConnectInf dbi; dbi.SetConnectionStr(s); dbi.AllocHenv(); db = new wxDb(dbi.GetHenv()); db->Open(&dbi);//this line failed if not patched
在后面提取数据的时候,需要提供table名字,Excel比较特殊,不是直观的关系型数据库那样可以看到table的存在。方法是: 选定数据区域,菜单->插入->名称->定义,里面输入的名字就是table名称。
提取table的例子: if(db->TableExists(wxT("ryzl"))){ UWORD n; wxDbColInf *cols = db->GetColumns(wxT("ryzl"),&n); if(cols == NULL){ wxMessageBox(wxT("no no get")); }else{ wxMessageBox(wxString::Format(wxT("we got %d"),(int)n)); } }else{ wxMessageBox(wxT("table ryzl not exists")); }
|