如何把datagrid的数据导出到excel中啊? 没有捷径,一个单元格一个单元格的输出。可以输出到以“,”分隔的文本文件(.csv),或者使用COM方式启动Excel,再往里面写数据。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你是用ADO访问数据库的,可以尝试Excel组件中的Range类中的函数CopyFromRecordset 第一个参数就用_RecordsetPtr 在C#中可以通过引用Excel.dll和vbide.dll,使用excel.dll中的Range类输出到excel.c++中没有弄过,不太清楚 #include "excel9.h"COleVariant VOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);_Application objApp;Workbooks objBooks;_Workbook objBook;Worksheets objSheets;_Worksheet objSheet;Range objRange;objApp.CreateDispatch("Excel.Application");objBooks = objApp.GetWorkbooks();objBook.AttachDispatch(objBooks.Add(_variant_t("c:\\Dialog12.xls")));objSheets = objBook.GetSheets();objSheet = objSheets.GetItem((_variant_t)short(1));objRange.AttachDispatch(objSheet.GetCells(),true);int ss,nn;double dTotal;CString cc;nn = m_adodc1.GetRecordset().GetRecordCount();CColumns cls;cls = m_datagrid.GetColumns();ss = cls.GetCount();for(int i = 0; i < nn; i++){m_datagrid.SetRow(i);for(int j = 0; j < ss; j++){m_datagrid.SetCol(j);cc = m_datagrid.GetText();if(i == 9)dTotal = dTotal + atoi(cc);objRange.SetItem(_variant_t((long)(i+2)),_variant_t((long)(j+1)),_variant_t(cc));}}objApp.SetVisible(true);objSheet.ReleaseDispatch();objSheets.ReleaseDispatch();objBook.ReleaseDispatch();objBooks.ReleaseDispatch();objApp.ReleaseDispatch(); To: goodboyws(深夜不眠者(VCMVP)) 我在执行 选择Menu->View->ClassWizade,打开ClassWizade窗口,选择Add Class->From a type library,选择D:\Program Files\Microsoft Office\office10\Excel9.OLB 时没有找到Excel9.OLB 文件,不就没有Excel9.h了,那应该怎么办啊?能不能说的具体一点啊? To:sin6007() 我是用ADO访问数据库的,Excel组件中的Range类是怎么加进去的,我在msdn中找不到CopyFromRecordset函数啊? XL5CHS32.OLB应该是这个吧, 有很多类,你选中其中几个就可以了。application,range,workbooks,workbook,worksheets,worksheet To:sin6007() 我的office是xp的,我用的是excel.exe,选择_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,用的是下面的代码:void CExcelTestDlg::OnExceltest() { _Application ExcelApp; Workbooks wbsMyBooks; _Workbook wbMyBook; Worksheets wssMysheets; _Worksheet wsMysheet; Range rgMyRge; //创建Excel 2000服务器(启动Excel) if (!ExcelApp.CreateDispatch("Excel.Application",NULL)) { AfxMessageBox("创建Excel服务失败!"); exit(1); } //利用模板文件建立新文档 wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true); wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t("g:\\exceltest\\MyTemplate.xlt"))); //得到Worksheets wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true); //得到sheet1 wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true); //得到全部Cells,此时,rgMyRge是cells的集合 rgMyRge.AttachDispatch(wsMysheet.GetCells(),true); //设置1行1列的单元的值 rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("This Is A Excel Test Program!")); //得到所有的列 rgMyRge.AttachDispatch(wsMysheet.GetColumns(),true); //得到第一列 rgMyRge.AttachDispatch(rgMyRge.GetItem(_variant_t((long)1),vtMissing).pdispVal,true); //设置列宽 rgMyRge.SetColumnWidth(_variant_t((long)200)); //调用模板中预先存放的宏 ExcelApp.Run(_variant_t("CopyRow"),_variant_t((long)10),vtMissing,vtMissing, vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing, vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing, vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing, vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing); //打印预览 wbMyBook.SetSaved(true); ExcelApp.SetVisible(true); wbMyBook.PrintPreview(_variant_t(false)); //释放对象 rgMyRge.ReleaseDispatch(); wsMysheet.ReleaseDispatch(); wssMysheets.ReleaseDispatch(); wbMyBook.ReleaseDispatch(); wbsMyBooks.ReleaseDispatch(); ExcelApp.ReleaseDispatch(); } 但是当文件导出的时候,弹出对话框说“未找到宏“CopyRow””,后来看导出的文件时这一句This Is A Excel Test Program!在文件中已经被导出了,说明下面的代码有些问题,但我不知道怎么改,请大家帮我改改把,谢谢ExcelApp.Run(_variant_t("CopyRow"),_variant_t((long)10),vtMissing,vtMissing, vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing, vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing, vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing, vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing); window media player sdk 多路视频播放显示 VC开发圆形控件 teechart 显示Accesss中的数据变化? 看The c++ programming language(Special Edition)P126.15遇到的问题。 急求助:如何动态修改单文档的标题? 如何在按纽上画图 ? 听到有人要为印尼征集捐款 高分求教,关于画历史曲线图。 请高手解答:在任务管理器中, 怎样在Applications中隐藏一个用户程序 ,仅在Processes中显示进程. 大家有没有遇过这种情况? 毕业设计想用VC++做,导师没题目,求助! 简单错误提示
第一个参数就用_RecordsetPtr
#include "excel9.h"COleVariant VOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
_Application objApp;
Workbooks objBooks;
_Workbook objBook;
Worksheets objSheets;
_Worksheet objSheet;
Range objRange;
objApp.CreateDispatch("Excel.Application");
objBooks = objApp.GetWorkbooks();
objBook.AttachDispatch(objBooks.Add(_variant_t("c:\\Dialog12.xls")));
objSheets = objBook.GetSheets();
objSheet = objSheets.GetItem((_variant_t)short(1));
objRange.AttachDispatch(objSheet.GetCells(),true);
int ss,nn;
double dTotal;
CString cc;
nn = m_adodc1.GetRecordset().GetRecordCount();
CColumns cls;
cls = m_datagrid.GetColumns();
ss = cls.GetCount();
for(int i = 0; i < nn; i++)
{
m_datagrid.SetRow(i);
for(int j = 0; j < ss; j++)
{
m_datagrid.SetCol(j);
cc = m_datagrid.GetText();
if(i == 9)
dTotal = dTotal + atoi(cc);
objRange.SetItem(_variant_t((long)(i+2)),_variant_t((long)(j+1)),_variant_t(cc));
}
}
objApp.SetVisible(true);
objSheet.ReleaseDispatch();
objSheets.ReleaseDispatch();
objBook.ReleaseDispatch();
objBooks.ReleaseDispatch();
objApp.ReleaseDispatch();
我的office是xp的,我用的是excel.exe,选择_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,用的是下面的代码:void CExcelTestDlg::OnExceltest()
{
_Application ExcelApp;
Workbooks wbsMyBooks;
_Workbook wbMyBook;
Worksheets wssMysheets;
_Worksheet wsMysheet;
Range rgMyRge;
//创建Excel 2000服务器(启动Excel)
if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox("创建Excel服务失败!");
exit(1);
}
//利用模板文件建立新文档
wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);
wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t("g:\\exceltest\\MyTemplate.xlt")));
//得到Worksheets
wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);
//得到sheet1
wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
//得到全部Cells,此时,rgMyRge是cells的集合
rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);
//设置1行1列的单元的值
rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("This Is A Excel Test Program!"));
//得到所有的列
rgMyRge.AttachDispatch(wsMysheet.GetColumns(),true);
//得到第一列
rgMyRge.AttachDispatch(rgMyRge.GetItem(_variant_t((long)1),vtMissing).pdispVal,true);
//设置列宽
rgMyRge.SetColumnWidth(_variant_t((long)200));
//调用模板中预先存放的宏
ExcelApp.Run(_variant_t("CopyRow"),_variant_t((long)10),vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);
//打印预览
wbMyBook.SetSaved(true);
ExcelApp.SetVisible(true);
wbMyBook.PrintPreview(_variant_t(false));
//释放对象
rgMyRge.ReleaseDispatch();
wsMysheet.ReleaseDispatch();
wssMysheets.ReleaseDispatch();
wbMyBook.ReleaseDispatch();
wbsMyBooks.ReleaseDispatch();
ExcelApp.ReleaseDispatch();
} 但是当文件导出的时候,弹出对话框说“未找到宏“CopyRow””,后来看导出的文件时这一句This Is A Excel Test Program!在文件中已经被导出了,说明下面的代码有些问题,但我不知道怎么改,请大家帮我改改把,谢谢
ExcelApp.Run(_variant_t("CopyRow"),_variant_t((long)10),vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);