MFC ListControl 与 Excel 数据的导入导出

ListControl View类型选择Report

void CExcelTestDlg::OnBnClickedInput()
{
 // TODO: Add your control notification handler code here
 CFileDialog dlg( TRUE,//TRUE或FALSE。TRUE为打开文件;FALSE为保存文件
                 _T("xls"), //为缺省的扩展名
                _T( "FileList"), //为显示在文件名组合框的编辑框的文件名,一般可选NULL
                 OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,//为对话框风格,一般为OFN_HIDEREADONLY   |   OFN_OVERWRITEPROMPT,即隐藏只读选项和覆盖已有文件前提示。
                 _T("Excel 文件(*.xls)|*.xls||")//为下拉列表枢中显示文件类型
                  );
 dlg.m_ofn.lpstrTitle = _T("导入数据");

 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 =_T("MICROSOFT EXCEL DRIVER (*.XLS)") ; // Excel驱动
 CString sSql,arr[3];

 sSql.Format(_T("DRIVER={%s};DSN=‘‘;FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s"),sDriver, strFilePath, strFilePath);
 if(!db.OpenEx(sSql,CDatabase::noOdbcDialog))//连接数据源DJB.xls
 {
  MessageBox(_T("打开EXCEL文件失败!","错误"));
  return;
 }
 //打开EXCEL表
 CRecordset pset(&db);
 m_list.DeleteAllItems();
 AfxMessageBox(_T("OK"));
/* sSql = "SELECT 学号,姓名,成绩 "
               "FROM EXCELDEMO";      */
              // "ORDER BY 姓名";
 sSql.Format(_T("SELECT * FROM [Sheet1$]"));
 pset.Open(CRecordset::forwardOnly,sSql,CRecordset::readOnly);
 while(!pset.IsEOF())
 {
 pset.GetFieldValue(_T("学号"),arr[0]);//前面字段必须与表中的相同,否则出错。
 pset.GetFieldValue(_T("姓名"),arr[1]);
 pset.GetFieldValue(_T("成绩"),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(_T("Excel数据成功导入系统!","导入成功"));

}

//导出数据到excel中

void CExcelTestDlg::OnBnClickedOutput()
{
    //// TODO: Add your control notification handler code here
    //首先判断列表框中是否有记录
    if ( m_list.GetItemCount()<= 0 )
    {
        AfxMessageBox(_T("列表中没有记录需要保存!"));
        return;
    }
    //打开另存为对话框 ,需要包含 #include <Afxdlgs.h>
    CFileDialog dlg( FALSE,
        _T("xls"),
        _T("FileList"),
        OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
        _T("Excel 文件(*.xls)|*.xls||"));
    dlg.m_ofn.lpstrTitle =_T( "文件列表另存为");

    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 =_T("MICROSOFT EXCEL DRIVER (*.XLS)";)  // Excel驱动
    CString sSql,strInsert;
    TRY
    {
        // 创建进行存取的字符串
        sSql.Format(_T("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();
            sSql = _T(" CREATE TABLE DSO_DX ( ");
            strInsert = _T(" INSERT INTO DSO_DX ( ") ;
            //获得列标题名称
            lvCol.mask = LVCF_TEXT; //必需设置,说明LVCOLUMN变量中pszText参数有效
            lvCol.cchTextMax = 32; //必设,pszText参数所指向的字符串的大小
            lvCol.pszText = strColName.GetBuffer(32); //必设,pszText 所指向的字符串的实际存储位置。
            //以上三个参数设置后才能通过 GetColumn()函数获得列标题的名称
            for( i=0 ; i< iColumnNum ; i++ )
            {
                if ( !(m_list.GetColumn(i,&lvCol)) )
                    return;
                if ( i<iColumnNum-1 )
                {
                    sSql = sSql + lvCol.pszText + _T(" TEXT , ");
                    strInsert = strInsert + lvCol.pszText + _T(" , ");
                }
                else
                {
                    sSql = sSql + lvCol.pszText + _T(" TEXT ) ");
                    strInsert = strInsert + lvCol.pszText +_T( " )  VALUES ( ");
                }
            }
            //创建Excel表格文件
            database.ExecuteSQL(sSql);
            //循环提取记录并插入到EXCEL中
            sSql = strInsert;
            char chTemp[33];
            for ( j=0 ; j<iRowCount ; j++ )
            {
                memset(chTemp,0,33);
                for ( i=0 ; i<iColumnNum ; i++ )
                {
                    m_list.GetItemText(j,i,chTemp,33);
                    if ( i < (iColumnNum-1) )
                    {
                        sSql = sSql + _T("‘") + chTemp + _T("‘ , ");
                    }
                    else
                    {
                        sSql = sSql +_T("‘")  + chTemp +_T("‘ ) ") ;
                    }
                }
                //将记录插入到表格中
                database.ExecuteSQL(sSql);
                sSql = strInsert;
            }
        }
        // 关闭Excel表格文件
        database.Close();
        AfxMessageBox(_T("保存查询结果为Excel文件成功!"));
    }
    CATCH_ALL(e)
    {
        //错误类型很多,根据需要进行报错。
        AfxMessageBox(_T("Excel文件保存失败。"));
    }
    END_CATCH_ALL;

}
时间: 2024-10-13 23:46:38

MFC ListControl 与 Excel 数据的导入导出的相关文章

使用phpExcel实现Excel数据的导入导出(完全步骤)

使用phpExcel实现Excel数据的导入导出(完全步骤) 很多文章都有提到关于使用phpExcel实现Excel数据的导入导出,大部分文章都差不多,或者就是转载的,都会出现一些问题,下面是本人研究phpExcel的使用例程总结出来的使用方法,接下来直接进入正题. 首先先说一下,本人的这段例程是使用在Thinkphp的开发框架上,要是使用在其他框架也是同样的方法,很多人可能不能正确的实现Excel的导入导出,问题基本上都是phpExcel的核心类引用路径出错,如果有问题大家务必要对路劲是否引用

Thinkphp实现excel数据的导入导出

在http://phpexcel.codeplex.com/下载最新PHPExcel放到Vendor下,注意位置:ThinkPHP\Extend\Vendor\PHPExcel\PHPExcel.php. 这几句可能需要修改: //有的需要加反斜杠$objPHPExcel = new \PHPExcel(); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 实现代码: public function

客户关系管理系统中对客户及相关数据的导入导出操作

在很多系统,我们都知道,Excel数据的导入导出操作是必不可少的一个功能,这种功能能够给使用者和外部进行数据交换,也能批量迅速的录入数据到系统中:但在一些系统中,为了方便,可能把很多个基础表或者相关的数据综合到一个Excel表格文件里面,然后希望通过接口进行导入,这种需求处理就显得比较复杂一点了.本文探讨在我的客户关系管理系统中,对于单个Excel表格中,集合了客户基础数据及相关数据的导入和导出操作的处理. 1.导入导出的需求分析 本随笔主要介绍如何在系统中,导入单一文件中的数据到系统中,这个文

Sql server与Excel的数据互通导入导出

现在,我先从Sql server数据表导出到Excel中,再从Excel数据表导出到Sql server中: 一.Sql server数据表导出到Excel中: 1.新建一个Excel,选择"数据"菜单: 2.依次选择   "导入外部数据"--"导入数据" 后: 3.双击"新的SQL Server 连接.odc": 4.点击"下一步": 5.点击"下一步": 6.点击"完成&q

MATLAB中文件的读写和数据的导入导出

http://blog.163.com/tawney_daylily/blog/static/13614643620111117853933/ 在编写一个程序时,经常需要从外部读入数据,或者将程序运行的结果保存为文件.MATLAB使用多种格式打开和保存数据.本章将要介绍 MATLAB中文件的读写和数据的导入导出. 13.1 数据基本操作 本节介绍基本的数据操作,包括工作区的保存.导入和文件打开.13.1.1 文件的存储 MATLAB支持工作区的保存.用户可以将工作区或工作区中的变量以文件的形式保

使用命令行将Excel数据表导入Mysql中的方法小结

从Excel数据表导入MySQL,已经做过好几次了,但每次都会碰到各种问题:invalid utf8 character string, data too long, ...,浪费了不少时间 为了提高效率,是时候指定一个数据导入的SOP了: 1.准备.txt文件 1.1 将要导入的数据(不含表头)从工作表复制.粘贴到一个新建的Excel数据表中(避免污染源数据) 1.2 粘贴时注意:使用右键paste as value选项,过滤掉源数据表中的多余格式(如,字体颜色.粗体等) 1.3 将新建的Ex

SSM excel文件的导入导出

对于excel文件的导入导出,后台接收读取和建表封存都是固定死的,所以对于excel导入时,excel文件内容必须匹配后台相关对象,不然报错. excel文件导出,用<a><a/>标签即可,通过后台去完成 ,不可用ajax去写导出,ajax请求只是个"字符型"的请求,即请求的内容是以文本类型存放的. 文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response输出来下载文件. 当获取前台导入这个命令后,会通过Mybati

Oracle 12c pdb的数据泵导入导出

12c推出了可插拔数据库,在一个容器cdb中以多租户的形式同时存在多个数据库pdb.在为pdb做数据泵导入导出时和传统的数据库有少许不同.           1,需要为pdb添加tansnames           2,导入导出时需要在userid参数内指定其tansnames的值,比如 userid=user/[email protected]   数据泵导入导出例子 1.查看当前的SID,查看pdb并切换到容器数据库,这里的pluggable数据库是pdborcl [[email pro

Oracle 数据泵导入导出总结

Oracle 数据泵(IMPDP/EXPDP)导入导出总结 Oracle数据泵导入导出是日常工作中常用的基本技术之一,它相对传统的逻辑导入导出要高效,这种特性更适合数据库对象数量巨大的情形,因为我日常运维的数据库对象少则几千,多则几万甚至几十万,所以传统exp/imp就会非常耗时,而数据泵方式就因此脱引而出,下面就详细总结一下数据泵的使用方法,希望能给初学者带来帮助. 一.新建逻辑目录 最好以system等管理员创建逻辑目录,Oracle不会自动创建实际的物理目录“D:\oracleData”(