在网上搜到说可以用如下语句实现:
rg.AttachDispatch(ExcelApp.GetActiveCell()); 
rg.AttachDispatch(rg.GetEntireRow()); 
rg.Insert(vtMissing);
我实验后发现可行,它通过调用GetActiveCell获得当前选中行。
但我现在的关键问题是:我要对指定行(重点:指定行)来进行插入和删除,而不是Excel文件事先用鼠标选中的那一行。
找了很久,也没找到类似SetActiveCell这样的函数来设定当前选中行。
各位达人,帮帮小弟吧!不胜感激!!

解决方案 »

  1.   

    在excel里操作一下
    然后录段宏看看用到什么函数
      

  2.   

    在Excel中每个单元格可以用A1,A2,C3的形式来表示。譬如获得A1到C5之间单元格集可以这样实现,
    rngXls = rngXls.GetRange( COleVariant(_T(“A1“)),COleVariant(_T(“C5“)) );
      

  3.   

    谢谢各位!
    GetRange我试过了,不起作用,最终插入的位置还是被鼠标选中的那行。
      

  4.   

    这是我以前写的一段程序
    _Application ExcelApp; 
    _Workbook wbk; 
    Workbooks wbks; 
    _Worksheet wht; 
    Sheets whts; 
    LPDISPATCH lpDisp; 
    Range range; 
    COleVariant avar((long)DISP_E_PARAMNOTFOUND,VT_ERROR); 
    if (!ExcelApp.CreateDispatch("Excel.Application",NULL)) 

    AfxMessageBox("Excel Application error !"); 

    CString strPath,str;
    extern CString WorkDirectory;
    strPath=WorkDirectory+"\\log\\EventLog.xlt";
    wbks.AttachDispatch(ExcelApp.GetWorkbooks()); 
    lpDisp=wbks.Open(strPath,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar);
    wbk.AttachDispatch(lpDisp); 
    whts.AttachDispatch(wbk.GetSheets()); 
    lpDisp=wbk.GetActiveSheet(); 
    wht.AttachDispatch(lpDisp); 
    range.AttachDispatch(wht.GetCells()); 
    // ExcelApp.SetVisible(TRUE);
    ExcelApp.SetUserControl(TRUE);
    int row=2;
    for(int i=0;i<TotalNum;i++)
    {
    for(int col=1;col<9;col++)
    {
    str=m_EventList.GetItemText(i,col-1);
    range.SetItem(_variant_t((long)row),_variant_t((long)col),_variant_t(str));
    }
    row++;
    }
    CString strXLSPath;
    strXLSPath=WorkDirectory+"\\log\\EventLog.xls";
    wbk.SaveCopyAs(_variant_t(strXLSPath));
    range.ReleaseDispatch(); 
    wht.ReleaseDispatch(); 
    whts.ReleaseDispatch(); 
    wbk.ReleaseDispatch(); 
    wbks.ReleaseDispatch(); 
    ExcelApp.ReleaseDispatch(); 
    wbks.Close(); 
    ExcelApp.Quit(); 
      

  5.   

    range.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal); 
    range.Active();好象这样就可以,拼写不知道有错没有,你试试吧
      

  6.   

    purple2727:
    没有这个接口:range.Active();
      

  7.   

    liutiaoer:
    你的写法只是写单元格的内容,并没有增加新行
      

  8.   

    http://support.microsoft.com/kb/216686/en-us
      

  9.   

    InitialJ,你好:
    你介绍的方法我照做试了下,是可以建立一个Excel表格,办公自动化也不失为一种好方法。
    但,我已实现的代码有大量部分是用上述方法做的,而且你介绍的方法只演示了创建一个Excel,如何对已有表格做处理(读写、插入行、删除行等等)并未提及。谢谢!
      

  10.   

    找到要删除的行
    Xls = rngXls.GetRange( COleVariant(_T(“A1“)),COleVariant(_T(“C5“)) );
    然后进行操作,删除?
      

  11.   

    void ExcelFile::InsertRow(int iIndex)
    {
    CString place;
    place.Format("A%d",iIndex);
    Range range;
    range.AttachDispatch(m_sheet.GetRange(_variant_t(place),_variant_t(place)));
    range.AttachDispatch(range.GetEntireRow()); range.Insert(_variant_t((long)1));

    }