常用代码备份--OLE操作Excel之sheet复制

bool CopySheet(CHAR szItem[20][64],char *szModelFilePath)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    ::CoInitialize(NULL);
    AfxEnableControlContainer(); 

    CApplication    app;
    CWorkbooks      books;
    CWorkbook       book;
    CWorksheets     sheets;
    CWorksheet      sheet;
    CRange          range;
    CRange          cols;
    int             iNum = 0;
    CString         csSheetName = szItem[0];
    CHAR            szNewFilePath[MAX_PATH] = {0x00};

    for (iNum = 0;iNum < 20;iNum++)
    {
        if(strlen(szItem[iNum]) == 0)
            break;
    }

    ::GetCurrentDirectory(MAX_PATH,szNewFilePath);
    sprintf(szNewFilePath,"%s\\file.xlsx",szNewFilePath);

    COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);  
    if( !app.CreateDispatch("Excel.Application") )
    {  
        ::MessageBox(NULL,"Can not create EXCEL!","error",MB_OK);  
        return false;  
    }  
    books=app.get_Workbooks();
    LPDISPATCH lpDisp; 
    lpDisp = books.Open(szModelFilePath,  
        covOptional, covOptional, covOptional, covOptional,
        covOptional, covOptional, covOptional, covOptional,
        covOptional, covOptional, covOptional, covOptional,
        covOptional, covOptional
        );
    book.AttachDispatch(lpDisp);
    sheets=book.get_Sheets();
    sheet=sheets.get_Item(COleVariant((short)3));
    COleVariant temp;
    temp.pdispVal=sheet.m_lpDispatch;
    temp.vt=VT_DISPATCH;

    sheet.put_Name(csSheetName.Left(20));

    for(int i = 0;i < iNum-1;i++)
        sheet.Copy(vtMissing, temp);

    for(int i = 0;i < iNum;i++)//复制N个sheet
    {
        csSheetName = szItem[i];
        sheet=sheets.get_Item(COleVariant((short)(i+3)));
        sheet.put_Name(csSheetName.Left(31));//31是Excel允许的最大sheet名长度
    }
    book.SaveAs(COleVariant(szNewFilePath),covOptional,
        covOptional,covOptional,
        covOptional,covOptional,(long)0,
        covOptional,covOptional,covOptional,
        covOptional,covOptional);
    range.ReleaseDispatch();   
    sheet.ReleaseDispatch();   
    sheets.ReleaseDispatch();   
    book.ReleaseDispatch();   
    books.ReleaseDispatch();   
    app.Quit();  
    app.ReleaseDispatch();
    temp.Detach();
    temp.Clear();
    sprintf(szModelFilePath,"%s",szNewFilePath);
    ::CoUninitialize();
    return true;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值