MFC CListCtrl与Excel之间的数据导入导出

最近要把CListCtrl中的数据导出到Excel中,将Excel中的数据导入到CListCtrl控件中。下面是自己的代码,编译通过,好使。

希望对大家有帮助。

//从Excel中导入到CListCtrl中void CluvlistctrlDlg::OnBnClickedInput(){// TODO: Add your control notification handler code here

CFileDialog dlg( TRUE, //TRUE或FALSE。TRUE为打开文件;FALSE为保存文件 "xls", //为缺省的扩展名 "FileList", //为显示在文件名组合框的编辑框的文件名,一般可选NULL OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,//为对话框风格,一般为OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,即隐藏只读选项和覆盖已有文件前提示。 "Excel 文件(*.xls)|*.xls||"//为下拉列表枢中显示文件类型 );dlg.m_ofn.lpstrTitle = "导入数据";if (dlg.DoModal() != IDOK)return;CString strFilePath;//获得文件路径名strFilePath = dlg.GetPathName();//判断文件是否已经存在,存在则打开文件DWORD dwRe = GetFileAttributes(strFilePath);if ( dwRe != (DWORD)-1 ){//ShellExecute(NULL, NULL, strFilePath, NULL, NULL, SW_RESTORE); }else return;

CDatabase db;//数据库库需要包含头文件 #include <afxdb.h>CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel驱动CString sSql,arr[3];

sSql.Format("DRIVER={%s};DSN=”;FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\&;%s\&;;DBQ=%s",sDriver, strFilePath, strFilePath);if(!db.OpenEx(sSql,CDatabase::noOdbcDialog))//连接数据源DJB.xls{MessageBox("打开EXCEL文件失败!","错误");return;}//打开EXCEL表CRecordset pset(&db);m_list.DeleteAllItems();

AfxMessageBox("OK");/*sSql = "SELECT 学号,姓名,成绩 " "FROM EXCELDEMO"; */ // "ORDER BY 姓名";sSql.Format("SELECT 学号,姓名,成绩 FROM DSO_DX");pset.Open(CRecordset::forwardOnly,sSql,CRecordset::readOnly);while(!pset.IsEOF()){pset.GetFieldValue("学号",arr[0]);//前面字段必须与表中的相同,,否则出错。pset.GetFieldValue("姓名",arr[1]);pset.GetFieldValue("成绩",arr[2]);int count = m_list.GetItemCount();//插入到ListCtrl中m_list.InsertItem(count,arr[0]);m_list.SetItemText(count,1,arr[1]);m_list.SetItemText(count,2,arr[2]);pset.MoveNext();}db.Close();MessageBox("Excel数据成功导入系统!","导入成功");

}

//导出数据到excel中void CluvlistctrlDlg::OnBnClickedOutput(){// TODO: Add your control notification handler code here//首先判断列表框中是否有记录if ( m_list.GetItemCount()<= 0 ){AfxMessageBox("列表中没有记录需要保存!");return;}//打开另存为对话框 ,需要包含 #include <Afxdlgs.h>CFileDialog dlg( FALSE, "xls", "FileList", OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "Excel 文件(*.xls)|*.xls||");dlg.m_ofn.lpstrTitle = "文件列表另存为";if (dlg.DoModal() != IDOK)return;CString strFilePath;//获得文件路径名strFilePath = dlg.GetPathName();//判断文件是否已经存在,存在则删除重建DWORD dwRe = GetFileAttributes(strFilePath);if ( dwRe != (DWORD)-1 ){DeleteFile(strFilePath);}

CDatabase database;//数据库库需要包含头文件 #include <afxdb.h>CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel驱动CString sSql,strInsert;

TRY{// 创建进行存取的字符串sSql.Format("DRIVER={%s};DSN=”;FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\&;%s\&;;DBQ=%s",sDriver, strFilePath, strFilePath); // 创建数据库 (既Excel表格文件)if( database.OpenEx(sSql,CDatabase::noOdbcDialog) ){//获得列别框总列数int iColumnNum,iRowCount;LVCOLUMN lvCol;CString strColName; //用于保存列标题名称int i,j; //列、行循环参数 iColumnNum = m_list.GetHeaderCtrl()->GetItemCount();iRowCount = m_list.GetItemCount();

功夫不负有心人。

MFC CListCtrl与Excel之间的数据导入导出

相关文章:

你感兴趣的文章:

标签云: