zoukankan      html  css  js  c++  java
  • excel.h的简单使用


     //*****
    //变量定义
    _Application app;   
    Workbooks books;
    _Workbook book;
    Worksheets sheets;
    _Worksheet sheet;
    Range range;
    Range iCell;
    LPDISPATCH lpDisp;   
    COleVariant vResult;
    COleVariant
            covTrue((short)TRUE),
            covFalse((short)FALSE),
            covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);   


    //*****
    //初始化COM的动态连接库
    if(!AfxOleInit())  
    {
            AfxMessageBox("无法初始化COM的动态连接库!");
            return ;
         }   


    //*****
    //创建Excel 2000服务器(启动Excel)
    if(!app.CreateDispatch("Excel.Application"))
    {
      AfxMessageBox("无法启动Excel服务器!");
        return;
    }

    app.SetVisible(TRUE);          //使Excel可见
    app.SetUserControl(TRUE);      //允许其它用户控制Excel


    //*****   
    //打开c:/1.xls
    books.AttachDispatch(app.GetWorkbooks());
    lpDisp = books.Open("C://1.xls",      
       covOptional, covOptional, covOptional, covOptional, covOptional,
       covOptional, covOptional, covOptional, covOptional, covOptional,
       covOptional, covOptional );   
      
         
    //*****
    //得到Workbook
    book.AttachDispatch(lpDisp);


    //*****
    //得到Worksheets
    sheets.AttachDispatch(book.GetWorksheets());


    //*****
    //得到当前活跃sheet
    //如果有单元格正处于编辑状态中,此操作不能返回,会一直等待
    lpDisp=book.GetActiveSheet();
    sheet.AttachDispatch(lpDisp);
      

    //*****
    //读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列
    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开始
      
      
    //*****
    //读取第一个单元格的值
    range.AttachDispatch(sheet.GetCells());
    range.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
    COleVariant vResult =range.GetValue();
    CString str;
    if(vResult.vt == VT_BSTR)       //字符串
    {
      str=vResult.bstrVal;
    }
    else if (vResult.vt==VT_R8)     //8字节的数字
    {
      str.Format("%f",vResult.dblVal);
    }
    else if(vResult.vt==VT_DATE)    //时间格式
    {
      SYSTEMTIME st;
         VariantTimeToSystemTime(&vResult.date, &st);
    }
    else if(vResult.vt==VT_EMPTY)   //单元格空的
    {
      str="";
    }  


    //*****
    //读取第一个单元格的对齐方式,数据类型:VT_I4
    //读取水平对齐方式
    range.AttachDispatch(sheet.GetCells());
    iCell.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
    vResult.lVal=0;
    vResult=iCell.GetHorizontalAlignment();
    if(vResult.lVal!=0)
    {
      switch (vResult.lVal)
      {
      case 1:      //默认
       break;
      case -4108:  //居中
       break;
      case -4131 : //*左
       break;
      case -4152 : //*右
       break;
      }

    }
      
    //垂直对齐方式
    iCell.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
    vResult.lVal=0;
    vResult=iCell.GetVerticalAlignment();
    if(vResult.lVal!=0)
    {
      switch (vResult.lVal)
      {
      case -4160 :  //*上
       break;
      case -4108 :  //居中
       break;
      case -4107 :  //*下
       break;
      }

    }

      
    //*****
    //设置第一个单元格的值"HI,EXCEL!"
    range.SetItem(COleVariant(1),COleVariant(1),COleVariant("HI,EXCEL!"));


    //*****
    //设置第一个单元格字体颜色:红色
    Font font;
    range.AttachDispatch(sheet.GetCells());
    range.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
    font.SetColor(COleVariant((long)0xFF0000));  


    //*****
    //合并单元格的处理
    //包括判断第一个单元格是否为合并单元格,以及将第一个单元格进行合并
    Range unionRange;
    range.AttachDispatch(sheet.GetCells());
    unionRange.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
      
    vResult=unionRange.GetMergeCells();   
    if(vResult.boolVal==-1)             //是合并的单元格   
    {
      //合并单元格的行数
      range.AttachDispatch (unionRange.GetRows ());
      long iUnionRowNum=range.GetCount ();
       
      //合并单元格的列数
      range.AttachDispatch (unionRange.GetColumns ());
      long iUnionColumnNum=range.GetCount ();   
      
      //合并区域的起始行,列
      long iUnionStartRow=unionRange.GetRow();       //起始行,从1开始
      long iUnionStartCol=unionRange.GetColumn();    //起始列,从1开始
      
    }
    else if(vResult.boolVal==0)   
    {//不是合并的单元格}

    //将第一个单元格合并成2行,3列
    range.AttachDispatch(sheet.GetCells());
    unionRange.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
    unionRange.AttachDispatch(unionRange.GetResize(COleVariant((long)2),COleVariant((long)3)));
    unionRange.Merge(COleVariant((long)0));   //合并单元格


    //*****
    //将文件保存为2.xls
    book.SaveAs(COleVariant("C://2.xls"),covOptional,covOptional, /
      covOptional,covOptional,covOptional,0,/
      covOptional,covOptional,covOptional,covOptional);  
      
      
    //*****
    //关闭所有的book,退出Excel
    book.Close (covOptional,COleVariant(OutFilename),covOptional);
    books.Close();      
    app.Quit();  

  • 相关阅读:
    System.Data.RealonlyException:列Column1被设置为realonly
    学习java过程中
    在windows server 2008下安装vs2005.打开vs2005的时候老提示要“运行vs2005sp1 建议使用管理员权限”
    windows Server 2008下面运行vs2005的问题
    大飞机MIS系统360把我的Transformer.Service服务杀掉了
    开通博客
    C#中怎样让控件显示在其他控件的上面
    vs2010发布问题
    vs在IE8无法调试的解决方法
    将身份证号粘贴到WPS表格后变成了“科学计数法”的解决方案
  • 原文地址:https://www.cnblogs.com/whiteIcrow/p/3777916.html
Copyright © 2011-2022 走看看