如何生成excel文件作为图像识别结果

在进行大规模图像处理的时候,如果能够以表格的形式生成结果文件,将非常的直观。这个时候,选择excel作为结果输出文件,将是合适的。
查询相关资料,有很多关于excel的操作方法,但是使用mfc来进行excel的操作,总是要涉及到很多东西。
一、采用csv方式
实验如下:
创建1.csv文件,使用记事本进行编辑
而后使用excel进行打开
效果很好。而csv的操作是可以直接采用文本编辑的方式生成的,可以直接采用std:file操作的方法来生成csv文件,然后使用excel打开就可以。
再附上一段代码,是opencv官方提供的csv操作相关的,可以参考
//创建或续写目录下的csv文件,填写“文件位置-分类”对
    int writeCsv(const string& filename,const Vector<pair<string,string>>srcVect,char separator ){
        ofstream file(filename.c_str(),ofstream::app);
        if (!file)
            return 0;
        for (int i=0;i<srcVect.size();i++){
            file<<srcVect[i].first<<separator<<srcVect[i].second<<endl;
        }
        return srcVect.size();
    }
    //读取目录下的csv文件,获得“文件位置-分类”对
    vector<pair<string,string>> readCsv(const string& filename, char separator) {
        pair<string,string> apair;
        string line, path, classlabel;
        vector<pair<string,string>> retVect;
        ifstream file(filename.c_str(), ifstream::in);
        if (!file) 
            return retVect;
        while (getline(file, line)) {
            stringstream liness(line);
            getline(liness, path, separator);
            getline(liness, classlabel);
            if(!path.empty() && !classlabel.empty()) {
                apair.first = path;
                apair.second = classlabel;
                retVect.push_back(apair);
            }
 
        }
        return retVect;
    }
 
二、采用xls方式
涉及到的东西比较多,现在已经集成到了GOcvHelper中去
#pragma region 
    //////////////////////////////////////////////////////////////////////////////
    //名称:GetExcelDriver
    //功能:获取ODBC中Excel驱动
    //作者:徐景周(jingzhou_xu@163.net)
    //组织:未来工作室(Future Studio)
    //日期:2002.9.1
    /////////////////////////////////////////////////////////////////////////////
    CString GetExcelDriver()
    {
        char szBuf[2001];
        WORD cbBufMax = 2000;
        WORD cbBufOut;
        char *pszBuf = szBuf;
        CString sDriver;
 
        // 获取已安装驱动的名称(涵数在odbcinst.h里)
        if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
            return "";
 
        // 检索已安装的驱动是否有Excel...
        do
        {
            if (strstr(pszBuf, "Excel") != 0)
            {
                //发现 !
                sDriver = CString(pszBuf);
                break;
            }
            pszBuf = strchr(pszBuf, '\0') + 1;
        }
        while (pszBuf[1] != '\0');
 
        return sDriver;
    }
 
    ///////////////////////////////////////////////////////////////////////////////
    //    BOOL MakeSurePathExists( CString &Path,bool FilenameIncluded)
    //    参数:
    //        Path                路径
    //        FilenameIncluded    路径是否包含文件名
    //    返回值:
    //        文件是否存在
    //    说明:
    //        判断Path文件(FilenameIncluded=true)是否存在,存在返回TURE,不存在返回FALSE
    //        自动创建目录
    //
    ///////////////////////////////////////////////////////////////////////////////
    BOOL MakeSurePathExists( CString &Path,
        bool FilenameIncluded)
    {
        int Pos=0;
        while((Pos=Path.Find('\\',Pos+1))!=-1)
            CreateDirectory(Path.Left(Pos),NULL);
        if(!FilenameIncluded)
            CreateDirectory(Path,NULL);
        //    return ((!FilenameIncluded)?!_access(Path,0):
        //    !_access(Path.Left(Path.ReverseFind('\\')),0));
 
        return !_access(Path,0);
    }
 
    //获得默认的文件名
    BOOL GetDefaultXlsFileName(CString& sExcelFile)
    {
        ///默认文件名:yyyymmddhhmmss.xls
        CString timeStr;
        CTime day;
        day=CTime::GetCurrentTime();
        int filenameday,filenamemonth,filenameyear,filehour,filemin,filesec;
        filenameday=day.GetDay();//dd
        filenamemonth=day.GetMonth();//mm月份
        filenameyear=day.GetYear();//yyyy
        filehour=day.GetHour();//hh
        filemin=day.GetMinute();//mm分钟
        filesec=day.GetSecond();//ss
        timeStr.Format("%04d%02d%02d%02d%02d%02d",filenameyear,filenamemonth,filenameday,filehour,filemin,filesec);
 
        sExcelFile =  timeStr + ".xls"; //获取随机时间的文件名称
        //打开选择路径窗口
        CString pathName; 
        CString defaultDir = _T("C:\\outtest");
        CString fileName=sExcelFile;
        CString szFilters= _T("xls(*.xls)");
        CFileDialog dlg(FALSE,defaultDir,fileName,OFN_HIDEREADONLY|OFN_READONLY,szFilters,NULL);
        if(dlg.DoModal()==IDOK){
            //获得保存位置
            pathName = dlg.GetPathName();
        }
 
        sExcelFile = pathName;
        return TRUE;
    }
 
    ///////////////////////////////////////////////////////////////////////////////
    //    void GetExcelDriver(CListCtrl* pList, CString strTitle)
    //    参数:
    //        pList        需要导出的List控件指针
    //        strTitle    导出的数据表标题
    //    说明:
    //        导出CListCtrl控件的全部数据到Excel文件。Excel文件名由用户通过“另存为”
    //        对话框输入指定。创建名为strTitle的工作表,将List控件内的所有数据(包括
    //        列名和数据项)以文本的形式保存到Excel工作表中。保持行列关系。
    //    
    //    edit by [r]@dotlive.cnblogs.com
    ///////////////////////////////////////////////////////////////////////////////
    CString ExportListToExcel(CListCtrl* pList, CString strTitle)
    {
        CString warningStr;
        if (pList->GetItemCount ()>0) {    
            CDatabase database;
            CString sDriver;
            CString sExcelFile; 
            CString sSql;
            CString tableName = strTitle;
 
            // 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)" 
            sDriver = GetExcelDriver();
            if (sDriver.IsEmpty())
            {
                // 没有发现Excel驱动
                AfxMessageBox("没有安装Excel!\n请先安装Excel软件才能使用导出功能!");
                return NULL;
            }
 
            ///默认文件名
            if (!GetDefaultXlsFileName(sExcelFile))
                return NULL;
 
            // 创建进行存取的字符串
            sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile);
 
            // 创建数据库 (既Excel表格文件)
            if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
            {
                // 创建表结构
                int i;
                LVCOLUMN columnData;
                CString columnName;
                int columnNum = 0;
                CString strH;
                CString strV;
 
                sSql = "";
                strH = "";
                columnData.mask = LVCF_TEXT;
                columnData.cchTextMax =100;
                columnData.pszText = columnName.GetBuffer (100);
                for(i=0;pList->GetColumn(i,&columnData);i++)
                {
                    if (i!=0)
                    {
                        sSql = sSql + ", " ;
                        strH = strH + ", " ;
                    }
                    sSql = sSql + " " + columnData.pszText +" TEXT";
                    strH = strH + " " + columnData.pszText +" ";
                }
                columnName.ReleaseBuffer ();
                columnNum = i;
 
                sSql = "CREATE TABLE " + tableName + " ( " + sSql +  " ) ";
                database.ExecuteSQL(sSql);
 
                // 插入数据项
                int nItemIndex;
                for (nItemIndex=0;nItemIndex<pList->GetItemCount ();nItemIndex++){
                    strV = "";
                    for(i=0;i<columnNum;i++)
                    {
                        if (i!=0)
                        {
                            strV = strV + ", " ;
                        }
                        strV = strV + " '" + pList->GetItemText(nItemIndex,i) +"' ";
                    }
 
                    sSql = "INSERT INTO "+ tableName 
                        +" ("+ strH + ")"
                        +" VALUES("+ strV + ")";
                    database.ExecuteSQL(sSql);
                }
 
            }      
 
            // 关闭数据库
            database.Close();
 
            warningStr.Format("导出文件保存于%s!",sExcelFile);
            AfxMessageBox(warningStr);
            return sExcelFile;
        }
    }
#pragma endregion
使用的时候,直接生成gridview,然后调用就可以
CString cstresult =  ExportListToExcel(&m_MyListCtrl,"中药识别结果");

如何生成excel文件作为图像识别结果的更多相关文章

  1. php生成excel文件的简单方法

    生成excel文件,最简单的莫过于把数据库的数据导入到excel就行了. 生成excel 当然使用的是 phpExcel http://www.jbxue.com/tags/phpexcel.html ...

  2. XLSTransformer生成excel文件简单演示样例

    项目结构图: 项目中所用到的jar,能够到http://www.findjar.com/index.x下载 ExcelUtil类源代码: package util; import java.io.IO ...

  3. XLSTransformer生成excel文件

    jxls的使用方法: 1)声明一个XLSTransformer对象,生成方式就是使用new操作符                 XLSTransformer transformer = new XL ...

  4. thinkphp整合系列之phpexcel生成生成excel文件

    在后台管理中会经常需要将数据生成excel表格的: php生成excel有两种方案: 一种是通过phpexcel生成xls格式的表格文件: 另一种则直接通过逗号换行生成csv格式的表格文件: 这里先讲 ...

  5. 实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件

    今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多 ...

  6. springMVC(4)---生成excel文件并导出

    springMVC(4)---生成excel文件并导出 在开发过程中,需要将数据库中的数据以excel表格的方式导出. 首先说明.我这里用的是Apache的POI项目,它是目前比较成熟的HSSF接口, ...

  7. 2018年,请不要再使用OLE生成EXCEL文件

    输出EXCEL文件是ABAP开发工作中的常见需求,为了学习相关技术,我翻译过一篇文章:使用OLE2对象创建EXCEL文件,并且一度乐在其中. 最近几个月,经过与若干EXCEL打印程序的艰苦斗争,以及对 ...

  8. POI生成EXCEL文件

    POI生成EXCEL文件 一.背景 根据指定格式的JSON文件生成对应的excel文件,需求如下 支持多sheet 支持单元格合并 支持插入图片 支持单元格样式可定制 需要 标题(title),表头( ...

  9. python xlwt模块生成excel文件并写入数据 xlrd读取数据

    python中一般使用 xlwt (excel write)来生成Excel文件(可以控制单元格格式),用 xlrd 来读取Excel文件,用xlrd读取excel是不能对其进行操作的. 1.xlrd ...

随机推荐

  1. PostgreSQL Replication之第十二章 与Postgres-XC一起工作(6)

    12.6 添加节点 Postgres-XC允许您在那个过程中的任何一个时间点添加新的服务器到计划中.所有您需要做的是按照我们之前演示的设置一个节点,并在 控制器上调用CREATE NODE.然后,该系 ...

  2. csu oj 1339: 最后一滴血

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1339 1339: 最后一滴血 Time Limit: 1 Sec  Memory Limit: 1 ...

  3. 【皇甫】☀那些事儿......STEP

    写项目之前呢,先来缕缕思路,既然要写学生管理系统,那肯定上不了从数据库中读取信息,然而想要从数据库中拿到你想要的东西,就要先登录,得到他的权限才行,所以我们第一步就要先搞出一个登录页面并且能连接到数据 ...

  4. Android -- 自定义View小Demo(一)

    1,现在要实现下图的简单效果,很简单  ,就是使用paint在canvas上绘制5中不同颜色的圆圈,效果图如下: 这是绘制基本图形一种最简单的方法,下面是它的代码 ,注释写的很详细,也就不去讲解了 M ...

  5. kafka管理器kafka-manager部署安装

    运行的环境要求 Kafka 0.8.1.1+ sbt 0.13.x Java 7+ 功能 为了简化开发者和服务工程师维护Kafka集群的工作,yahoo构建了一个叫做Kafka管理器的基于Web工具, ...

  6. 夺命雷公狗ThinkPHP项目之----企业网站14之文章修改页的完成

    这个其实也是挺容易的,我们思路先将栏目页给遍历出来: 这里用了catTree的方法,因为我们要对遍历出来的数据进行排序的,然后来到前端进行完成列表: <!doctype html> < ...

  7. html 输入框验证

    JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入)<input onkeyup="this.value=this.value.replace(/\D/g,'') ...

  8. JSP-09-使用EL显示数据

    目的:为了使JSP写起来更加简单. 9.1  EL表达式 ${EL表达式}  :  ${unsername} 操作符:   “. ”操作符: 用来访问对象的属性    ${news.title} “[ ...

  9. SLC、MLC和TLC三者的区别

    SLC=Single-LevelCell,即1bit/cell,速度快寿命长,价格超贵(约MLC3倍以上的价格),约10万次擦写寿命 MLC=Multi-LevelCell,即2bit/cell,速度 ...

  10. hibernate笔记01