vs2008控制Excel表格有关问题
vs2008控制Excel表格问题
我使用mfc控制表格,但是我要实现的功能是在mfc上点打印预览后,把相应数据在表格中预览,点表格上的关闭预览后会退出到表格界面。现在我想实现点关闭预览后直接关闭整个表格。这样要怎么设置?
------解决方案--------------------
我使用mfc控制表格,但是我要实现的功能是在mfc上点打印预览后,把相应数据在表格中预览,点表格上的关闭预览后会退出到表格界面。现在我想实现点关闭预览后直接关闭整个表格。这样要怎么设置?
------解决方案--------------------
_Application app;
LPDISPATCH lpDisp;
if ( !app.CreateDispatch("Excel.Application") )
{
TRACE("Create Application Failed! and the errorCode is :%d\r\n", \
GetLastError());
return;
}
app.SetVisible(TRUE);
app.SetUserControl(TRUE);
//创建书籍对象
Workbooks books;
books.AttachDispatch(app.GetWorkbooks());
//excel路径
char chBufferExcelPath[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);
//打开文件
_Workbook book;
book.AttachDispatch(lpDisp);
books.AttachDispatch(book.GetWorksheets());
//获取所有可操作sheets
Worksheets sheets;
sheets.AttachDispatch(book.GetWorksheets());
//获取要进行操作的sheet
_Worksheet sheet;
sheet.AttachDispatch(sheets.GetItem(COleVariant("Sheet1")));
//添加行操作
//sheet.
//添加行操作
//
Range range;
Range usedRange;
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
VARIANT var = 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());
/*
VARIANT var = 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