您现在的位置: 天下网吧 >> 网吧天地 >> 天下码农 >> 微信小程序 >> 正文

导出列表控件内容项到Excel文件简单实现

2010-12-22vczx佚名

关键字 列表 Excel 导出内容
原作者姓名 戚高
文章原始出处 原创

介绍
在很多程序开发中,要求向Excel电子表格中导出信息是经常要求的功能,也是很多程序员头痛的问题,其实我们将Excel当成数据库类似的介质处理,就可以采用SQL进行各种操作了。这里收集了网络上的一些导出Excel的方法并封装成类,然后提供一个通用的导出ListCtrl到Excel文件的接口方法就可以轻松完成列表控件内容向Excel的导出功能了。

正文
网络上用于导出Excel的方法很多,不过有的类在使用过程中间经常出现莫名其妙的Link错误,这里重新封装了一下,能够方便使用了,详细内容可以参考程序。
    使用方法:新建基于对话框的程序,然后加入列表控件,并初始化数据
    m_List.DeleteAllItems();
    //设置list控件的文字和背景颜色
    m_List.SetBkColor(RGB(255,255,255));
    m_List.SetTextBkColor(RGB(255,255,255));    

    //清空list控件的数据
    for(int delcolumn=100;delcolumn>=0;delcolumn--)
        m_List.DeleteColumn(delcolumn);
    //设置list对话框的列
    DWORD dwStyle;
    RECT rect;
    LV_COLUMN lvc;

    dwStyle = m_List.GetStyle();
    dwStyle |= LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT |LVS_SHOWSELALWAYS |LVS_EDITLABELS ;

    m_List.SetExtendedStyle(dwStyle);
    m_List.GetClientRect(&rect);

    lvc.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH | LVCF_FMT;
    lvc.fmt = LVCFMT_CENTER;

    lvc.iSubItem = 0;
    lvc.pszText = _T("编号");
    lvc.cx = 70;
    m_List.InsertColumn(1,&lvc);

    lvc.iSubItem = 1;
    lvc.pszText = _T("姓名");
    lvc.cx = 100;
    m_List.InsertColumn(2,&lvc);

    lvc.iSubItem = 2;
    lvc.pszText = _T("住址");
    lvc.cx = 100;
    m_List.InsertColumn(3,&lvc);

    lvc.iSubItem = 3;
    lvc.pszText = _T("测试列一");
    lvc.cx = 100;
    m_List.InsertColumn(4,&lvc);

    lvc.iSubItem = 4;
    lvc.pszText = _T("测试列二");
    lvc.cx = 100;
    m_List.InsertColumn(5,&lvc);

    char strMsg[100];
    memset(strMsg, 0, sizeof(strMsg));

         //加入数据
    for (int i=0; i<20; i++)
    {
        sprintf(strMsg, "编号%.2d", i);
        m_List.InsertItem(i, strMsg);
        sprintf(strMsg, "姓名%.2d", i);
        m_List.SetItemText(i, 1, strMsg);
        sprintf(strMsg, "住址%.2d", i);
        m_List.SetItemText(i, 2, strMsg);
        sprintf(strMsg, "测试列一%.2d", i);
        m_List.SetItemText(i, 3, strMsg);
        sprintf(strMsg, "测试列二%.2d", i);
        m_List.SetItemText(i, 4, strMsg);
    }

然后就是封装的导出列表控件内容到Excel,这里可以根据ListCtrl的信息自动导出
void CTestExportToExcelDlg::OnExportttoexcel()
{
    CFileDialog mFileDlg(FALSE, NULL, NULL, OFN_ALLOWMULTISELECT,
        _T("Excel文件 (*.xls)|*.xls||"), this);
    if(mFileDlg.DoModal() == IDOK)
    {
        CString strPathName, strFileName;
        strPathName = mFileDlg.GetPathName();
        strFileName = mFileDlg.GetFileName();
        if(strFileName.Find('.') == -1)
        {
            strPathName += ".xls";
        }
        else
        {
            if(strFileName.Right(4) != ".xls" && strFileName.Right(4) != ".XLS")
            {
                MessageBox("保存文件格式错误,后缀名应该为“.xls”!","错误信息",MB_OK|MB_ICONERROR);
                return;
            }
        }

        //删除替换表格内容,这里防止替换文件的处理方法
        CFileFind fFind;
        if(fFind.FindFile(strPathName))
        {
            if(MessageBox(strFileName+"文件已经存在,是否替换原文件?","提示信息",MB_OKCANCEL|MB_ICONQUESTION) == IDCANCEL)
            {
                return;
            }
            DeleteFile(strFileName);
        }

        //写入EXCEL表格内容
        BeginWaitCursor();
        CExcelCtrl SS(strPathName, "导出查询表格信息");  
        
        CStringArray sampleArray;
        SS.BeginTransaction();
        
        // 加入标题
        sampleArray.RemoveAll();
        for(int i=0; i<m_List.GetHeaderCtrl()->GetItemCount(); i++)
        {
            HDITEM hdi;
            char lpBuffer[256];
            hdi.mask = HDI_TEXT;
            hdi.pszText = lpBuffer;
            hdi.cchTextMax = 256;

            m_List.GetHeaderCtrl()->GetItem(i, &hdi);
            sampleArray.Add(hdi.pszText);
        }
        SS.AddHeaders(sampleArray);

        //加入数据        
        for(i=0; i<m_List.GetItemCount(); i++)
        {
            sampleArray.RemoveAll();
            for(int j=0; j<m_List.GetHeaderCtrl()->GetItemCount(); j++)
            {
                sampleArray.Add(m_List.GetItemText(i, j));
            }
            SS.AddRow(sampleArray);
        }        
        SS.Commit();
        AfxMessageBox("数据保存成功,保存文件为:"+strPathName);
        EndWaitCursor();
    }
}

程序运行效果:
Example Example.JPG

导出Excel文件效果:
Excel Excel.JPG


由于时间关系,添加文章很匆忙,希望能对寻求这个方面信息的人有帮助。
如果有什么好的建议可以和我联系:
QQ:5516853
EM:succeessq_g@163.com

欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛 https://bbs.txwb.com

关注天下网吧微信/下载天下网吧APP/天下网吧小程序,一起来超精彩

本文来源:vczx 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系邮箱:support@txwb.com,系统开号,技术支持,服务联系QQ:1175525021本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧 网吧天下