求大神~VC++\MFC:MFC读取Excel文档,具体看下面吧,该如何处理
求大神~~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组件
我做了个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("航迹导出完成。"); }