高分请教 - 如何保存excel文件 我在VC中通过自动化生成一个excel文件(或打开一个已有的文件),在程序运行的过程中编辑文件。但编辑后的文件不知道怎么保存下来。怎么办? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 _Application ExcelApp; Workbooks wbsMyBooks; _Workbook wbMyBook; Worksheets wssMysheets; _Worksheet wsMysheet; if (!ExcelApp.CreateDispatch("Excel.Application")) { AfxMessageBox("创建Excel服务失败!"); return 1; } wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true); //AfxMessageBox(excelfilename); wbMyBook.AttachDispatch(wbsMyBooks.Open(excelfilename, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional),// Open has 13 parameters true); wbMyBook.Save(); http://www.vchelp.net/vchelp/archive.asp?type_id=42&class_id=1&cata_id=10&article_id=749http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=193203 LPDISPATCH lpDisp; lpDisp=GetIDispatch();//获取 TCHAR szTempPath[MAX_PATH],szTempFile[MAX_PATH]; DWORD dwResult=::GetTempPath(MAX_PATH,szTempPath); GetTempFileName(szTempPath,_T("TelStar_"),0,szTempFile); CString strTempDocPath; strTempDocPath=szTempFile; USES_CONVERSION; WCHAR* wcPathName=T2W(szTempFile); IStorage* pStorage=NULL; BOOL bSuccess=FALSE; if(SUCCEEDED(StgCreateDocfile(wcPathName,STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE,0,&pStorage))) { IPersistStorage* pPersistStorage=NULL; if(SUCCEEDED(lpDisp->QueryInterface(IID_IPersistStorage,(void**)&pPersistStorage))) { if(SUCCEEDED(OleSave(pPersistStorage,pStorage,FALSE))) { pPersistStorage->SaveCompleted(NULL); } pPersistStorage->Release(); } pStorage->Release(); } http://www.vckbase.com/document/viewdoc/?id=1168VC中调用EXECL模板生成报表作者:叶利华 void CExceltestDlg::OnButton1() { // TODO: Add your control notification handler code here _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); } ExcelApp.SetVisible(false); //利用模板文件建立新文档 char path[MAX_PATH]; GetCurrentDirectory(MAX_PATH,path); CString strPath = path; strPath += "\\template1"; wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true); wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t(strPath))); //得到Worksheets wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true); //得到sheet1 wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true); //添加模板个数 for(int i=0;i<4;i++){ wsMysheet.Copy(vtMissing,_variant_t(wsMysheet)); } CString str1; wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true); str1 = "第1页"; wsMysheet.SetName(str1); for(i=0;i<wssMysheets.GetCount()-1;i++){ //此地方该显示时缺少两项 wsMysheet = wsMysheet.GetNext(); str1.Format("第%d页",i+2); wsMysheet.SetName(str1); } wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("第1页")),true); //得到全部Cells,此时,rgMyRge是cells的集合 rgMyRge.AttachDispatch(wsMysheet.GetCells(),true); //设置1行1列的单元的值 CString str=_TEXT("21:12"); rgMyRge.SetItem(_variant_t((long)7),_variant_t((long)3),_variant_t(str)); rgMyRge.SetItem(_variant_t((long)9),_variant_t((long)3),_variant_t(str)); rgMyRge.SetItem(_variant_t((long)7),_variant_t((long)4),_variant_t(str)); rgMyRge.SetItem(_variant_t((long)8),_variant_t((long)4),_variant_t(str)); rgMyRge.SetItem(_variant_t((long)9),_variant_t((long)4),_variant_t(str)); rgMyRge.SetItem(_variant_t((long)10),_variant_t((long)4),_variant_t(str)); rgMyRge.SetItem(_variant_t((long)11),_variant_t((long)4),_variant_t(str)); rgMyRge.SetItem(_variant_t((long)12),_variant_t((long)4),_variant_t(str)); //将表格保存 strPath = path; strPath += "\\ylhexcel.xls"; wsMysheet.SaveAs(strPath,vtMissing,vtMissing,vtMissing,vtMissing, vtMissing,vtMissing,vtMissing,vtMissing); ExcelApp.SetVisible(true); wbMyBook.PrintPreview(_variant_t(false)); //释放对象 rgMyRge.ReleaseDispatch(); wsMysheet.ReleaseDispatch(); wssMysheets.ReleaseDispatch(); wbMyBook.ReleaseDispatch(); wbsMyBooks.ReleaseDispatch(); ExcelApp.ReleaseDispatch(); } 如何在listctrl中取消已经选中的行焦点?求代码 VC MFC 使用多线程编程 (急 在线等! 谢谢了!)vc实现在单文档应用程序中的客户区中嵌入对话框的方法 Cann't open .\*.def问题 请教:如何编写隐藏通道? CCombobox 难题 关于EDIT内容刷新的问题 在线等待! 从哪里可以下载TC2.0啊?? 通过ado访问foxpro的dbf数据库,对其进行常规操作,高分请教!!!还可另开帖加分!!! 史诗级问题:VS2008参考线的位置信息保存在哪个文件里面 [求助]关于CheckBox的问题 ISAPI问题,请帮忙看一下
Workbooks wbsMyBooks;
_Workbook wbMyBook;
Worksheets wssMysheets;
_Worksheet wsMysheet; if (!ExcelApp.CreateDispatch("Excel.Application"))
{
AfxMessageBox("创建Excel服务失败!");
return 1;
} wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);
//AfxMessageBox(excelfilename);
wbMyBook.AttachDispatch(wbsMyBooks.Open(excelfilename,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional,
covOptional),// Open has 13 parameters
true);
wbMyBook.Save();
lpDisp=GetIDispatch();//获取
TCHAR szTempPath[MAX_PATH],szTempFile[MAX_PATH];
DWORD dwResult=::GetTempPath(MAX_PATH,szTempPath);
GetTempFileName(szTempPath,_T("TelStar_"),0,szTempFile);
CString strTempDocPath;
strTempDocPath=szTempFile;
USES_CONVERSION;
WCHAR* wcPathName=T2W(szTempFile);
IStorage* pStorage=NULL;
BOOL bSuccess=FALSE;
if(SUCCEEDED(StgCreateDocfile(wcPathName,STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE,0,&pStorage)))
{
IPersistStorage* pPersistStorage=NULL;
if(SUCCEEDED(lpDisp->QueryInterface(IID_IPersistStorage,(void**)&pPersistStorage)))
{
if(SUCCEEDED(OleSave(pPersistStorage,pStorage,FALSE)))
{
pPersistStorage->SaveCompleted(NULL);
}
pPersistStorage->Release();
}
pStorage->Release();
}
VC中调用EXECL模板生成报表
作者:叶利华
void CExceltestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
_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);
}
ExcelApp.SetVisible(false);
//利用模板文件建立新文档
char path[MAX_PATH];
GetCurrentDirectory(MAX_PATH,path);
CString strPath = path;
strPath += "\\template1";
wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);
wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t(strPath)));
//得到Worksheets
wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);
//得到sheet1
wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
//添加模板个数
for(int i=0;i<4;i++){
wsMysheet.Copy(vtMissing,_variant_t(wsMysheet));
}
CString str1;
wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
str1 = "第1页";
wsMysheet.SetName(str1);
for(i=0;i<wssMysheets.GetCount()-1;i++){ //此地方该显示时缺少两项
wsMysheet = wsMysheet.GetNext();
str1.Format("第%d页",i+2);
wsMysheet.SetName(str1);
}
wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("第1页")),true);
//得到全部Cells,此时,rgMyRge是cells的集合
rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);
//设置1行1列的单元的值
CString str=_TEXT("21:12");
rgMyRge.SetItem(_variant_t((long)7),_variant_t((long)3),_variant_t(str));
rgMyRge.SetItem(_variant_t((long)9),_variant_t((long)3),_variant_t(str));
rgMyRge.SetItem(_variant_t((long)7),_variant_t((long)4),_variant_t(str));
rgMyRge.SetItem(_variant_t((long)8),_variant_t((long)4),_variant_t(str));
rgMyRge.SetItem(_variant_t((long)9),_variant_t((long)4),_variant_t(str));
rgMyRge.SetItem(_variant_t((long)10),_variant_t((long)4),_variant_t(str));
rgMyRge.SetItem(_variant_t((long)11),_variant_t((long)4),_variant_t(str));
rgMyRge.SetItem(_variant_t((long)12),_variant_t((long)4),_variant_t(str));
//将表格保存
strPath = path;
strPath += "\\ylhexcel.xls";
wsMysheet.SaveAs(strPath,vtMissing,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing);
ExcelApp.SetVisible(true);
wbMyBook.PrintPreview(_variant_t(false));
//释放对象
rgMyRge.ReleaseDispatch();
wsMysheet.ReleaseDispatch();
wssMysheets.ReleaseDispatch();
wbMyBook.ReleaseDispatch();
wbsMyBooks.ReleaseDispatch();
ExcelApp.ReleaseDispatch();
}