设为首页收藏本站

中国膜结构网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

膜结构车棚
膜结构车棚膜结构资质国产膜材 膜结构网中国膜结构协会
查看: 68|回复: 0

动态从Excel读取数据

[复制链接]
  • TA的每日心情
    开心
    2021-6-19 14:40
  • 签到天数: 1539 天

    [LV.Master]伴坛终老

    发表于 2021-4-13 20:32 | 显示全部楼层 |阅读模式
    在实际的工作中,我们经常要对一些表格数据进行处理,如果先把这些表格数据通过Excel处理,再导入到AutoCAD,

    那绝对会起到事半功倍的效果。随着Automation编程技术的出现,我们可以很方便地实现这一点了,下面是个
    ObjectARX的例子,其功能是动态关联Excel,然后读取其数据,并将这些数据打印在文本域中。

    //动态从Excel读取数据
    int DynamicReadFromExcel()
    {
    //常用变量定义
    _Application app;   
    Workbooks books;
    _Workbook book;
    Worksheets sheets;
    _Worksheet sheet;
    Range range;
    Range iCell;

    LPDISPATCH lpDisp;     
    COleVariant
            covTrue((short)TRUE),
            covFalse((short)FALSE),
            covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);      
    COleVariant vResult;

    //采用MFC方式初始化COM库,程序结束时COM库会自动释放
    if(!AfxOleInit())
    {
      MessageBox(NULL,"初始化COM支持库失败!\n无法控制Excel!", \
       "TrueTable",MB_IConERROR | MB_OK);  
      return RTERROR;
    }
      
    //关联已经运行的Excel实例
    CLSID clsid;
    CLSIDFromProgID(L"Excel.Application", &clsid);  
    IUnknown *pUnk = NULL;
    IDispatch *pRunDisp = NULL;

    for(long i=1;i<=5;i++) //做5次尝试
    {
      HRESULT hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);
      if(SUCCEEDED(hr))
      {
       hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pRunDisp);
       break;
      }
      ::Sleep(10);
    }

    if (!pRunDisp)
    {
      ::MessageBox(NULL, "没有发现Excel!", "TrueTable", MB_ICONHAND);
      return RTERROR;
    }

    if (pUnk)  pUnk->Release();

    //关联Excel
    app.AttachDispatch (pRunDisp);

    //得到当前活跃sheet
    //如果有单元格正处于编辑状态中,此操作不能返回,会一直等待
    lpDisp=app.GetActiveSheet();
    if(lpDisp==NULL)
    {
      MessageBox(NULL, "没有发现有效的表格!", \
       "TrueTable",MB_IConERROR | MB_OK);
      app.ReleaseDispatch ();

      return RTERROR;
    }
    sheet.AttachDispatch(lpDisp);

    //已经使用的行数:
    long row_num;
    range.AttachDispatch(sheet.GetUsedRange());
    range.AttachDispatch(range.GetRows());
    row_num=range.GetCount();
      

    //已经使用的列数:
    long col_num;
    range.AttachDispatch(sheet.GetUsedRange());
    range.AttachDispatch(range.GetColumns());
    col_num=range.GetCount();

    //已经使用区域的起始行、列:
    range.AttachDispatch(sheet.GetUsedRange());
    long StartRow=range.GetRow();       //起始行
    long StartCol=range.GetColumn();    //起始列

    //读取sheet名
    CString SheetName=sheet.GetName();
    //ads_printf("\n%s",SheetName);
    if(col_num<2 && row_num<2)     //此sheet为空
    {
      MessageBox(NULL,"\n当前表格没有数据!", \
       "TrueTable",MB_IConERROR | MB_OK);
      app.ReleaseDispatch ();

      return RTERROR;
      
    }
    else
    {
      ads_printf("\n表格%s共%d行,%d列",SheetName,row_num,col_num);
    }
      

      
    //得到全部Cells,此时,range是cells的集合
    range.AttachDispatch(sheet.GetCells());
      
      
    //读写数据了
    CString cstr;
    ads_printf("\n");
    for(long i=StartRow;i<StartRow+row_num;i++)
    {
       
      for(long j=StartCol;j<StartCol+col_num;j++)
      {
       
       //读取单元格文本
       iCell.AttachDispatch(range.GetItem (COleVariant(i),COleVariant(j)).pdispVal );
       vResult =iCell.GetText();
       cstr=vResult.bstrVal;
       
       //写单元格文本
       ads_printf("%s    ",(LPTSTR)cstr);
          
      }
      ads_printf("\n");
    }

      
    //释放Dispatch
    iCell.ReleaseDispatch ();
    range.ReleaseDispatch ();
    sheet.ReleaseDispatch ();
    sheets.ReleaseDispatch ();
    book.ReleaseDispatch ();
    books.ReleaseDispatch ();
    app.ReleaseDispatch ();

    return RTNORM;

    }

    如果要输出到Excel的话,关键函数就是:
    iCell.SetItem(COleVariant(i),COleVariant(j),COleVariant(cstr));
    回复


    http://www.mjgw.org/ 专业从事膜结构设计、制作加工、施工安装的膜结构工程服务,能够为客户提供专业的膜结构整体解决方案。做中国最好的膜结构综合服务平台。欢迎大家联系电话:198-7840-1958,QQ:463017170.
    相关关键词:膜结构车棚,膜结构车棚覆盖,膜结构车棚公司,膜结构车棚多少钱,膜结构车棚厂家,膜结构车棚价格,社区膜结构车棚,膜结构车棚膜布厂家 ,膜结构车棚哪家好,膜结构车棚多少钱一米,膜结构车棚报价,膜结构车棚哪里有,膜结构车棚定制,膜结构车棚安装,膜结构车棚设计,膜结构车棚电话,膜结构车棚加工,膜结构车棚膜布价格,膜结构车棚批发,膜结构车棚制造商,膜结构车棚生产厂家,膜结构车棚设计,膜结构车棚施工,膜结构车棚多少钱一平米,膜结构车棚订制,张拉膜车棚,张拉膜车棚覆盖,张拉膜车棚公司,张拉膜车棚多少钱,张拉膜车棚厂家,张拉膜车棚价格,社区张拉膜车棚,张拉膜车棚膜布厂家 ,张拉膜车棚哪家好,张拉膜车棚多少钱一米,张拉膜车棚报价,张拉膜车棚哪里有,张拉膜车棚定制,张拉膜车棚安装,张拉膜车棚设计,张拉膜车棚电话,张拉膜车棚加工,张拉膜车棚膜布价格,张拉膜车棚批发,张拉膜车棚制造商,张拉膜车棚生产厂家,张拉膜车棚设计,张拉膜车棚施工,张拉膜车棚多少钱一平米,张拉膜车棚订制,常用膜材品牌:德国杜肯、法国法拉利、德国海德斯、德国米乐、日本平岗、韩国秀博、比利时希运、美国赫虏伯、中国科宝、上海慧遥。

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    推荐膜材品牌上一条 /6 下一条

    进口膜材 国产膜材 pvdf膜材ptfe膜材ETFE膜材
    最好的膜结构公司 一级膜结构资质 膜结构一级资质
    膜结构设计-膜结构十大品牌-etfe设计-充气膜结构
    诺科膜结构
    遨都膜结构设计
    中国膜结构网
    中国空间膜结构

    QQ|申请友链|手机版|中国膜结构论坛