如何生成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. Caused by: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file

    springframework.version  3.2.6.RELEASE jdk 1.8

  2. 学习OpenCV——用OpenCv画漫画

    闲的时候用OpenCV画漫画也挺有意思,虽然效果不好(达不到上面所实现的效果), 参数需要调整,还是大头贴而且噪声小的图像比较合适 而且可以熟悉一下关于各种滤波的操作比如:双边滤波: #include ...

  3. Leetcode: Frog Jump

    A frog is crossing a river. The river is divided into x units and at each unit there may or may not ...

  4. vs2015社区版不支持installshield

    开始学习vs了 下一步就是在这个平台上提升技术咯. 写了老师上课讲的算法 生成了个VB程序结果不能在别的电脑上运行 .幸好我自己测试了下.要是直接拿去学校不是很~ 然后我就想到当初接触易语言时候的搞静 ...

  5. thinkphp介绍

    1.thinkphp是一个免费的开源的轻量级的高效的国产的php框架 2.现在主流的框架有:   zend framwork 框架,功能十分齐全,是php官网开发的一个框架   yii框架 十分轻巧的 ...

  6. HDU 2366 Space(二分计数)

    Problem Description During a programming contest, teams cannot sit close to each other, because then ...

  7. hdu5354 Bipartite Graph

    分治+并查集.假设要求[L,mid]的答案,那么很明显,如果一条边的两个端点都>mid的话或者一个端点>mid一个端点<L,说明询问[L,mid]这个区间中任何一点时候,这一条边都是 ...

  8. CCF真题之命令行选项

    201403-3 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项.每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔.这些字符串中的第一个为该命令行工具的名字,由小写字母 ...

  9. java dyn proxy

    package dyn; public interface RealService { void buy(); } =================== package dyn; public cl ...

  10. RF前端

    加入LTE之后的多模多频需求: 在加入LTE后,不但要求终端在多模的基础上增加LTE工作频段,而且还要增加可以确保用户实现国际漫游的频段.然而 全球分配的LTE频段较多且较离散.   频段 上行工作频 ...