例如aaa.xls已经在Excel中打开,这时我如何在另外一个程序中修改这个文件的内容?要求是C/C++实现。
我觉得应该是可以的,因为我试过在aaa.xls已经被Excel打开的状态下,使用notepad或ultraedit打开同一文件,然后修改后使用“另存为”的方式覆盖aaa.xls文件是可以的,不知道是怎么实现的?谢谢!

解决方案 »

  1.   

    创建ole对象,然后attach该对象,比如往单元格里面写字符,那就用range对象,连接excel该sheet里面的所有range,然后再连接某个单个的range,在调用setvalue方法,想写什么就给参数赋值。
      

  2.   

    我的意思是不用OLE对象怎么做?
      

  3.   

    excel不是提示开发接口了嘛,你就写就可以了。
      

  4.   

    做一个Excel插件,你的进程跟这个插件来通信,由插件来负责修改文件
      

  5.   

    通过另外一个程序调用的话,必然要用到Excel对外提供的函数操作接口吧    _Application     ExcelApp;       
        Workbooks     wbsMyBooks;       
        _Workbook     wbMyBook;       
        Worksheets     wssMysheets;       
        _Worksheet     wsMysheet;       
        Range     rgMyRge;       
        //创建Excel     2000服务器(启动Excel)       
            
        if     (!ExcelApp.CreateDispatch("Excel.Application",NULL))       
        {       
        AfxMessageBox("创建Excel服务失败!");       
        exit(1);       
        }       
        //利用模板文件建立新文档       
        wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);       
        wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t("c:\\aaa.xlt")));       
        //得到Worksheets       
        wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);       
        //得到sheet1       
        wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);       
        //得到全部Cells,此时,rgMyRge是cells的集合       
        rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);       
        //设置1行1列的单元的值       
        rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("This     Is     A     Excel     Test     Program!"));  
        
        //加入你需要的操作函数等等 
            
        //得到所有的列       
        rgMyRge.AttachDispatch(wsMysheet.GetColumns(),true);       
        //得到第一列       
        rgMyRge.AttachDispatch(rgMyRge.GetItem(_variant_t((long)1),vtMissing).pdispVal,true);       
        //设置列宽       
        rgMyRge.SetColumnWidth(_variant_t((long)200));       
        //调用模板中预先存放的宏       
        ExcelApp.Run(_variant_t("CopyRow"),_variant_t((long)10),vtMissing,vtMissing,       
        vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,       
        vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,       
        vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,       
        vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);       
        //打印预览       
        wbMyBook.SetSaved(true);       
        ExcelApp.SetVisible(true);       
        wbMyBook.PrintPreview(_variant_t(false));       
        //释放对象       
        rgMyRge.ReleaseDispatch();       
        wsMysheet.ReleaseDispatch();       
        wssMysheets.ReleaseDispatch();       
        wbMyBook.ReleaseDispatch();       
        wbsMyBooks.ReleaseDispatch();       
        ExcelApp.ReleaseDispatch();