VC 使用FlexGrid控件显示数据, 然后将FlexGrid控件显示的数据导出到excel中(保存文件在指定路径下),导出成功后,excel后台程序没有退出。
如果设置导出显示excel内容,然后手动关闭excel没有问题,但想导出到指定路径下,不显示出来。FlexGrid数据导出到execl后,FlexGrid上数据就没有了,为什么?谢谢!!!代码如下: if( !app.CreateDispatch("Excel.Application") )
{
this->MessageBox("无法创建Excel应用!,是否安装Excel!");
return;
} books =app.GetWorkbooks();
book =books.Add(covOptional); //新建工作簿
sheets =book.GetSheets();
sheet =sheets.GetItem(COleVariant((short)1)); range=sheet.GetRange(COleVariant("A1"),COleVariant("A1")); CString cc; for(int i=0;i<m_cShowLog.m_ctrlShowLogInfor.get_Rows();i++)
{
//防止闪烁
m_cShowLog.m_ctrlShowLogInfor.SetRedraw(FALSE); m_cShowLog.m_ctrlShowLogInfor.put_Row(i); for(int j=1;j<m_cShowLog.m_ctrlShowLogInfor.get_Cols();j++)
{
m_cShowLog.m_ctrlShowLogInfor.put_Col(j);
cc=m_cShowLog.m_ctrlShowLogInfor.get_TextMatrix(i,j);
range.SetItem(_variant_t((long)(i+1)),_variant_t((long)(j)),_variant_t(cc));
}
} col.AttachDispatch(sheet.GetUsedRange());
range.AttachDispatch(col.GetRows());
long iTatolRowNum= range.GetCount();
range.AttachDispatch(col.GetColumns());
long iTatolColNum = range.GetCount(); for(int i=0;i<=iTatolRowNum;i++) {
for(int j=1;j<=iTatolColNum;j++)
{
range.GetEntireColumn();
range.AutoFit(); //font = range.GetFont();
//font.SetBold(COleVariant((short)TRUE));
}
} app.SetVisible(TRUE); //设置Excel表可见
//app.SetUserControl(TRUE); //设置Excel表可被操作 strFileName.Format("%s", dlg.GetPathName()); CString strTmp;
strTmp = strFileName;
book.SaveAs((COleVariant)strTmp,covOptional,covOptional,covOptional,covOptional,covOptional,0,\
covOptional,covOptional,covOptional,covOptional,covOptional);
MessageBox("日志记录导出Excel成功","提示信息"); range.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
book.Close(covOptional,COleVariant(strFileName),covOptional);
books.ReleaseDispatch();
app.ReleaseDispatch();
books.Close();
app.Quit();
}
如果设置导出显示excel内容,然后手动关闭excel没有问题,但想导出到指定路径下,不显示出来。FlexGrid数据导出到execl后,FlexGrid上数据就没有了,为什么?谢谢!!!代码如下: if( !app.CreateDispatch("Excel.Application") )
{
this->MessageBox("无法创建Excel应用!,是否安装Excel!");
return;
} books =app.GetWorkbooks();
book =books.Add(covOptional); //新建工作簿
sheets =book.GetSheets();
sheet =sheets.GetItem(COleVariant((short)1)); range=sheet.GetRange(COleVariant("A1"),COleVariant("A1")); CString cc; for(int i=0;i<m_cShowLog.m_ctrlShowLogInfor.get_Rows();i++)
{
//防止闪烁
m_cShowLog.m_ctrlShowLogInfor.SetRedraw(FALSE); m_cShowLog.m_ctrlShowLogInfor.put_Row(i); for(int j=1;j<m_cShowLog.m_ctrlShowLogInfor.get_Cols();j++)
{
m_cShowLog.m_ctrlShowLogInfor.put_Col(j);
cc=m_cShowLog.m_ctrlShowLogInfor.get_TextMatrix(i,j);
range.SetItem(_variant_t((long)(i+1)),_variant_t((long)(j)),_variant_t(cc));
}
} col.AttachDispatch(sheet.GetUsedRange());
range.AttachDispatch(col.GetRows());
long iTatolRowNum= range.GetCount();
range.AttachDispatch(col.GetColumns());
long iTatolColNum = range.GetCount(); for(int i=0;i<=iTatolRowNum;i++) {
for(int j=1;j<=iTatolColNum;j++)
{
range.GetEntireColumn();
range.AutoFit(); //font = range.GetFont();
//font.SetBold(COleVariant((short)TRUE));
}
} app.SetVisible(TRUE); //设置Excel表可见
//app.SetUserControl(TRUE); //设置Excel表可被操作 strFileName.Format("%s", dlg.GetPathName()); CString strTmp;
strTmp = strFileName;
book.SaveAs((COleVariant)strTmp,covOptional,covOptional,covOptional,covOptional,covOptional,0,\
covOptional,covOptional,covOptional,covOptional,covOptional);
MessageBox("日志记录导出Excel成功","提示信息"); range.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
book.Close(covOptional,COleVariant(strFileName),covOptional);
books.ReleaseDispatch();
app.ReleaseDispatch();
books.Close();
app.Quit();
}
解决方案 »
- 关于casyncsocket 的回调问题
- 求助一种安装过程中常见的对话框
- 请问C++里有没有类似于String.Split()那样的函数?
- 关于消息的问题(一直在线等待解答)
- 请详解一下 GetTickCount() 函数的作用和用法!
- 大家帮忙看看这个连接错误,谢了
- 我想请教1下,如何修改文件夹的属性,把属性修改为只读,隐藏和系统
- 求助VC的异常处理!
- asp作东西我在链接数据库时,插入数据集时,高级选项中总是有[ODBC Microsoft access 参数不足,期待值是2],这是为什么,请高手指点!!!
- 请问钩子截获到消息以后,当钩子函数处理完这个消息后我想让这个消息继续传递给它本来的处理函数。怎么做?
- 谁对opencv里面的delaunay三角剖分方法比较熟悉的?
- wireshark还原RTP流出现问题?
::CoUninitialize();
ShellExecute(NULL,"open","taskkill","/f /im EXCEL.EXE",NULL,SW_HIDE);
Sleep(1000);
app.SetVisible(false); //设置Excel表不可见2. ::CoUninitialize();//取消COM组件的初始化
objApp.Quit();
objRange.ReleaseDispatch();
objSheet.ReleaseDispatch();
objSheets.ReleaseDispatch();
objBook.ReleaseDispatch();
objBooks.ReleaseDispatch();
//退出及释放定义的Excel对象
::CoUninitialize();//取消COM组件的初始化
======
试一下这样
记住,一定要是TAB键的空格,不要自己加个" "这个空格(就是SPACE这个键),不然XECEL不识别数据间隔的,EXCEL只能识别TAB这个键
不行,excel后台程序还在
book =books.Add(covOptional); //新建工作簿
sheets =book.GetSheets();
sheet =sheets.GetItem(COleVariant((short)1));range=sheet.GetRange(COleVariant("A1"),COleVariant("A1")); //表格起始位置CString cc;
for(int i=0;i<m_cShowLog.m_ctrlShowLogInfor.get_Rows();i++) //行数: m_FlexGrid.GetRows()
{
//防止闪烁
//m_cShowLog.m_ctrlShowLogInfor.SetRedraw(FALSE);
m_cShowLog.m_ctrlShowLogInfor.put_Row(i);
for(int j=1;j<m_cShowLog.m_ctrlShowLogInfor.get_Cols();j++) //列数: m_FlexGrid.GetCols()
{
m_cShowLog.m_ctrlShowLogInfor.put_Col(j);
cc=m_cShowLog.m_ctrlShowLogInfor.get_TextMatrix(i,j); //获取FlexGrid1的单元格内容 range.SetItem(_variant_t((long)(i+1)),_variant_t((long)(j)),_variant_t(cc));
}
}col.AttachDispatch(sheet.GetUsedRange());
range.AttachDispatch(col.GetRows());
long iTatolRowNum= range.GetCount();
range.AttachDispatch(col.GetColumns());
long iTatolColNum = range.GetCount();for(int i=0;i<=iTatolRowNum;i++) //行数: m_FlexGrid.GetRows()
{
for(int j=1;j<=iTatolColNum;j++) //列数: m_FlexGrid.GetCols()
{
range.GetEntireColumn();
range.AutoFit(); //自适应单元格内容长度
//font = range.GetFont();
//font.SetBold(COleVariant((short)TRUE));
}
}app.SetVisible(TRUE); //设置Excel表可见
app.SetUserControl(FALSE); //设置Excel表可被操作*\ int iRet;
CString temp;
char mess[MAX_PATH];memset(mess, 0, MAX_PATH);
::GetModuleFileName(NULL, mess, MAX_PATH);
str.Format("%s", mess);
iRet = str.ReverseFind('\\');
temp.Format("%s", str.Left(iRet));
str = temp + "\\ExportLog";
::CreateDirectory(str, NULL);strFileName.Format(str+"\\%04d%02d%02d%02d%02d.xls", tm.GetYear(), tm.GetMonth(), tm.GetDay(), tm.GetHour(), tm.GetMinute());
book.SaveAs((COleVariant)strFileName,covOptional,covOptional,covOptional,covOptional,covOptional,0,\
covOptional,covOptional,covOptional,covOptional,covOptional);range.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
app.ReleaseDispatch();
books.Close();
app.Quit();str.Format("导出当前页日志成功: "+strFileName);
MessageBox(str,"提示信息");