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

vs2008控制Excel表格有关问题

2013-04-09 
vs2008控制Excel表格问题我使用mfc控制表格,但是我要实现的功能是在mfc上点打印预览后,把相应数据在表格中

vs2008控制Excel表格问题
vs2008控制Excel表格有关问题
我使用mfc控制表格,但是我要实现的功能是在mfc上点打印预览后,把相应数据在表格中预览,点表格上的关闭预览后会退出到表格界面。现在我想实现点关闭预览后直接关闭整个表格。这样要怎么设置?
[解决办法]


_Applicationapp;
LPDISPATCHlpDisp;
if ( !app.CreateDispatch("Excel.Application") )
{
TRACE("Create Application Failed! and the errorCode is :%d\r\n", \
GetLastError());
return;
}

app.SetVisible(TRUE);
app.SetUserControl(TRUE);

//创建书籍对象
Workbooksbooks;
books.AttachDispatch(app.GetWorkbooks());

//excel路径
charchBufferExcelPath[1024] = {0};
sprintf(chBufferExcelPath, "%s", "D:\\test\\test.xls");

//定义打开属性行为变量
 COleVariant  avar((long)DISP_E_PARAMNOTFOUND,VT_ERROR);

 //打开excel
lpDisp = books.Open(chBufferExcelPath, avar, avar, avar, avar, avar, avar,\
avar, avar, avar, avar, avar, avar, avar, avar);

//打开文件
_Workbookbook;
book.AttachDispatch(lpDisp);
books.AttachDispatch(book.GetWorksheets());

//获取所有可操作sheets
Worksheetssheets;
sheets.AttachDispatch(book.GetWorksheets());

//获取要进行操作的sheet
_Worksheetsheet;
sheet.AttachDispatch(sheets.GetItem(COleVariant("Sheet1")));

//添加行操作
//sheet.
//添加行操作

//
Rangerange;
RangeusedRange;

usedRange.AttachDispatch(sheet.GetUsedRange());
range.AttachDispatch(usedRange.GetRows());
long iRowNum=range.GetCount();                   //已经使用的行数

range.AttachDispatch(usedRange.GetColumns());
long iColNum=range.GetCount();                   //已经使用的列数

long iStartRow=usedRange.GetRow();               //已使用区域的起始行,从1开始
long iStartCol=usedRange.GetColumn();            //已使用区域的起始列,从1开始
/*
//绑定可操作sheet行
usedRange.AttachDispatch(sheet.GetUsedRange());
range.AttachDispatch(usedRange.GetRows());

long iRowNum=range.GetCount();//已经使用的行数
range.AttachDispatch(sheet.GetCells());

*/
range.AttachDispatch(sheet.GetCells());
//range.Get
VARIANTvar = range.GetItem(COleVariant(long(1)),COleVariant((long)1));
range.AttachDispatch(var.pdispVal);

COleVariant vResult;
vResult = range.GetValue(vResult);
TRACE("%ws\r\n", vResult.bstrVal);
TRACE("%d\r\n", GetLastError());
/*
VARIANTvar = range.GetItem(COleVariant(long(iRowNum)), COleVariant(long(1)));
var = range.GetItem(COleVariant(long(iRowNum)), COleVariant(long(2)));
var = range.GetItem(COleVariant(long(iRowNum)), COleVariant(long(3)));
*/
//修改

range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(1)),/*COleVariant("kevin")*/vResult);
//range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(2)),COleVariant("20"));
//range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(3)),COleVariant("male"));
iColNum = 0;
while ( true)
{
Sleep(50);
iColNum += 50;
if ( iColNum > 50*20*20 )
break;
}
range.ReleaseDispatch();
//save and close


book.Save();
book.Close(avar,COleVariant(chBufferExcelPath),avar);

//解除Attach
books.ReleaseDispatch();
books.Close();
app.ReleaseDispatch();
//退出Application
app.Quit();


以前学习时候参照网上其他人的帖子写的

热点排行