首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

求大神~VC++\MFC:MFC读取Excel文档,具体看下面吧,该如何处理

2012-05-28 
求大神~~VC++\MFC:MFC读取Excel文档,具体看下面吧我做了个MFC,我要读Excel的资料(读Excel的学生名字,从B1

求大神~~VC++\MFC:MFC读取Excel文档,具体看下面吧
我做了个MFC,我要读Excel的资料(读Excel的学生名字,从B1开始读,如B1、B2....读到B(n),就是读到没名字的时候停了,我用c++的STL的矢量容器保存着~然后把这些容器资料存在新建的Excel文档里,从B1,C1,D1,E1....)求大神怎么从读Excel实现这些功能,具体要用那些函数,函数的参数具体是什么意思呢??求帮忙啊??能把代码写下来最好了?最好带有注释.....

[解决办法]
给你两篇文章看看吧。

http://www.vcfans.com/2010/08/vs2010-mfc-excel-file-in-the-data-analysis.html

http://www.cnblogs.com/xianyunhe/archive/2011/09/25/2190485.html
[解决办法]
如果不要求excel的排版格式,只是单纯的表格,就建个*.csv文件,其实就是文本文件,然后每个item用逗号隔开即可,excel打开该文件是以表格形式展现的。
这样读写都很方便
[解决办法]
使用BasicExcel类,在codejeck上搜索一下
[解决办法]
参考一下吧。需要预先引入EXCEL组件

C/C++ code
void CShipTrackQueryDlg::OnExport() {    Range m_ExlRge;     _Worksheet m_ExlSheet;     Worksheets m_ExlSheets;     _Workbook m_ExlBook;     Workbooks m_ExlBooks;     _Application m_ExlApp;     if(!m_ExlApp.CreateDispatch("Excel.Application",NULL))     {         AfxMessageBox("创建Excel服务失败!");         return;     }         CFileDialog fileDialog(FALSE,"SOP",NULL,OFN_HIDEREADONLY,"本船轨迹文件(*.SOP)|*.SOP||");    CString SavePath;    if (fileDialog.DoModal() == IDOK)    {        SavePath = fileDialog.GetPathName();    }    else    {        return;     }    //设置为不可见,这样就不会弹出EXCEL窗口了     m_ExlApp.SetVisible(FALSE);     ///////////////////下面得到应用程序所在的路径///////////////////             CString TempPath = GetModulePath()+"ShipPosReport.xls";//物标信息文件路径         m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks(),TRUE);         m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t)TempPath),TRUE);//加载文件         m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRUE);//加载Sheet页面     m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)1)),TRUE);     m_ExlRge.AttachDispatch(m_ExlSheet.GetCells(),TRUE);//加载所有单元格     m_ExlRge.SetItem(_variant_t((long)(1)),_variant_t((long)2),_variant_t(m_sMMSI));    m_ExlRge.SetItem(_variant_t((long)(1)),_variant_t((long)4),_variant_t(m_sShipName));    ELATLONGFMT eLatLongFmt = theApp.m_sysINIFile.GetLatLongConfig().eLatLongFmt;    long lItenIndex = 3,lRecordIndex = 1;    int nSize = m_PosList.GetItemCount();    for (int nIdx = 0; nIdx < nSize; nIdx++)    {        if(!m_PosList.GetCheck(nIdx))            continue;        if(nIdx < nSize-2)        {            Range rangeSelect;              CString sIdx;            sIdx.Format("A%d",lItenIndex+1);            rangeSelect.AttachDispatch(m_ExlSheet.GetRange(_variant_t(sIdx),_variant_t(sIdx)),TRUE);              Range rangeInsert = rangeSelect.GetEntireRow();            //这里特别说明一下-4121,在ASP.NET和VB等工具下,表示xlShiftDown,指将行向下挤,VC下没找到,所以只能用直接的数值了              rangeInsert.Insert(COleVariant((long)-4121),vtMissing);               rangeSelect.ReleaseDispatch();               rangeInsert.ReleaseDispatch();          }                m_ExlRge.SetItem(_variant_t(lItenIndex),_variant_t((long)1),_variant_t((long)lRecordIndex++));        CString sTime = m_PosList.GetItemText(nIdx,1);        m_ExlRge.SetItem(_variant_t((long)(lItenIndex)),_variant_t((long)2),_variant_t(sTime));        double dLat = ::CoordFormatStr2Double(m_PosList.GetItemText(nIdx,6),true);        CString sTemp = ::CoordFormatDouble2Str(dLat,true,FMT_SECOND);        sTemp.Replace("°","-");        sTemp.Replace("'","-");        sTemp.Replace("\"","");        m_ExlRge.SetItem(_variant_t(lItenIndex),_variant_t((long)3),_variant_t(sTemp));        double dLong = ::CoordFormatStr2Double(m_PosList.GetItemText(nIdx,7),false);        sTemp = ::CoordFormatDouble2Str(dLong,false,FMT_SECOND);        sTemp.Replace("°","-");        sTemp.Replace("'","-");        sTemp.Replace("\"","");        m_ExlRge.SetItem(_variant_t(lItenIndex),_variant_t((long)4),_variant_t(sTemp));        m_ExlRge.SetItem(_variant_t((long)(lItenIndex)),_variant_t((long)5),_variant_t(m_PosList.GetItemText(nIdx,2)));        m_ExlRge.SetItem(_variant_t((long)(lItenIndex)),_variant_t((long)6),_variant_t(m_PosList.GetItemText(nIdx,3)));        lItenIndex++;    }    ::DeleteFile(SavePath);    m_ExlSheet.SaveAs(SavePath,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);    //释放对象    m_ExlRge.ReleaseDispatch();     m_ExlSheet.ReleaseDispatch();     m_ExlSheets.ReleaseDispatch();     m_ExlBook.ReleaseDispatch();     m_ExlBooks.ReleaseDispatch();     //m_ExlApp一定要退出程序,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错     m_ExlApp.Quit();     m_ExlApp.ReleaseDispatch();     AfxMessageBox("航迹导出完成。");} 


[解决办法]
也在学习这方面的知识,共勉!
http://blog.csdn.net/Augusdi/article/details/5781126

[解决办法]
同意3楼的方法,可以先将xls转为csv然后读取

热点排行