吾爱源码
首页 > 站长学院 > 网络编程 > wxWidgets导入Excel文件详细教程

wxWidgets导入Excel文件详细教程

作者:佚名 来源:吾爱源码 2015-06-30 09:11:13

开始写教师端程序,首先要实现导入EXCEL文件,读取数据后再添加到mysql数据库。wxWidgets提供了wxAutomationObject类,用来调用OLE automation的方法。网上找到一篇文章关于如何使用wxWidgets读取Excel文件《wxWidgets读取Excel数据的方法》。
        模仿了一下,虽然能正确读取Excel文件,但是用了close方法后,却发现不能关闭进程。查了下百度,类似的情况很多。解决方法也是多种多样。例如有个人写的很简短,却比贴代码的人更易懂,他是这样回复的:
         // 关闭进程

            mySheet null;
            myBook null;
            myExcel.Quit();

            myExcel null;
       先释放工作表,再释放工作簿,最后释放EXCEL对象,应该说跟C++的类差不多,释放顺序跟创建顺序相反,而上面一篇文章只释放了Excel对象,估计写文章的作者使用程序后没有去尝试再次打开文件。下列代码只是测试,提交到数据库还需要添加代码。

       void teacherFrame::OnToolBarItem1Clicked(wxCommandEvent& event)
{
    wxFileDialog openFileDialog(this,_("Open XLS file"), "", "",
                                "XLS files(*.xls)|*.xls|XLSX files(*.xlsx)|*.xlsx",  wxFD_OPEN|wxFD_FILE_MUST_EXIST);
    if(openFileDialog.ShowModal() == wxID_CANCEL)
        return;
    wxAutomationObject excelObj, workbook, sheet, cell;
    if(!excelObj.CreateInstance("Excel.Application")){
        wxMessageBox("创建Excel对象失败!", "错误", wxOK);
        return;
    }
    excelObj.CallMethod("workbooks.open",openFileDialog.GetPath());
    if(!excelObj.GetObject(workbook,"ActiveWorkBook")){
        wxMessageBox("创建workbook对象失败!", "错误", wxOK);
        return;
    }
    wxVariant   param1[1];
    param1[0]=1L;
    if(!workbook.GetObject(sheet, "Sheets",1,param1)){   //打开第一个工作表
        wxMessageBox( "创建sheet对象失败 ","错误",wxOK);
        return;
    }
    wxVariant   params[2];
    params[0]=1L;
    params[1]=3L;
    if(!sheet.GetObject(cell, "cells",2,params)){     //选择第一行第三列
        wxMessageBox( "创建Cell对象失败! ", "错误 ",wxOK);
        return;
    }
    wxVariant   x1=cell.GetProperty( "Value");
        wxMessageBox(x1.GetString(),"test");
    sheet.CallMethod("close");
    workbook.CallMethod("close");
    excelObj.CallMethod( "close");
}



XLSX文件格式是后来添加上去的,发现也能读取,估计XLS和XLSX差不多吧。
这里用了wxFileDialog类用来打开文件,构造函数如下:

wxFileDialog::wxFileDialog(wxWindow * parent,


const wxString & message wxFileSelectorPromptStr,


const wxString & defaultDir wxEmptyString,


const wxString & defaultFile wxEmptyString,


const wxString & wildcard wxFileSelectorDefaultWildcardStr


long style wxFD_DEFAULT_STYLE,


const wxPoint & pos wxDefaultPosition,


const wxSize & size wxDefaultSize,


const wxString & name wxFileDialogNameStr 

)

Constructor.

Use ShowModal() to show the dialog.

  • Parameters

  • parentParent window.
    messageMessage to show on the dialog.
    defaultDirThe default directory, or the empty string.
    defaultFileThe default filename, or the empty string.
    wildcardA wildcard, such as "*.*" or "BMP files (*.bmp)|*.bmp|GIF files (*.gif)|*.gif". Note that the native Motif dialog has some limitations with respect to wildcards; see the Remarks section above.
    styleA dialog style. See wxFD_* styles for more info.
    posDialog position. Not implemented.
    sizeDialog size. Not implemented.
    nameDialog name. Not implemented. 

 第一个参数:父窗口指针
第二个参数:对话框标题
第三个参数:默认打开路径或者为空,参数为空的时候打开是上次打开的路径
第四个参数:默认的文件名或者为空,为空当然就是不指定了
第五个参数:打开文件的类型。形如BMP files(*.bmp)|*.bmp ,  BMP files(*.bmp)对应*.bmp ,如果有多个文件类型用‘ | ’ 连接 
第六个参数:对话框风格
第七、八、九个参数:不需要设置


  • 热门软件
  • 热门标签
返回顶部