设为首页收藏本站

中国膜结构网

 找回密码
 立即注册
膜结构车棚
膜结构车棚膜结构资质国产膜材 膜结构网中国膜结构协会
查看: 44|回复: 1

对于excel文档的读取基本操作

[复制链接]
  • TA的每日心情
    开心
    2021-3-7 10:01
  • 签到天数: 1440 天

    连续签到: 19 天

    [LV.10]以坛为家III

    发表于 2021-2-8 17:06 | 显示全部楼层 |阅读模式
    http://www.mjgw.org/ 专业从事膜结构设计、制作加工、施工安装的膜结构咨询服务,能够为客户提供专业的膜结构整体解决方案。做中国最好的膜结构综合服务平台。欢迎大家联系QQ:463017170.
    String excelPath; //外部excel文档的地址
        UpdateData();//将对话框中的数据复制给变量
        if (m_excelPath == _T(""))
        {
            MessageBox(_T("地址不能为空,请选择Excel文档!"));
            return;
        }
        else
        {
            excelPath = m_excelPath;//m_excelPath是与地址对话框绑定的变量
        }

        //设置基点,作为自动排布的所有实体的基点
        AcGePoint3d ptBase;
        ptBase.x = m_pointX;
        ptBase.y = m_pointY;
        ptBase.z = m_pointZ;
       
        //打开指定的Excel文档
        CoInitialize(NULL);//初始化
        if (!m_excel.pApp.CreateDispatch(_T("Excel.Application")))
        {
            MessageBox(_T("创建Excel服务失败!"));
            exit(1);
        }
        m_excel.pApp.put_Visible(FALSE);
        m_excel.pBooks.AttachDispatch(m_excel.pApp.get_Workbooks(), true);
        m_excel.pBook.AttachDispatch(m_excel.pBooks.Open(excelPath, vtMissing, vtMissing, vtMissing,
            vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing,
            vtMissing, vtMissing, vtMissing));
        m_excel.pSheets.AttachDispatch(m_excel.pBook.get_Worksheets(), true);
        m_excel.pSheet.AttachDispatch(m_excel.pSheets.get_Item(_variant_t("sheet1")), true);
        m_excel.pRange.AttachDispatch(m_excel.pSheet.get_Cells(), true);

        //获得Excel文档中已经使用的行数和列数
        m_excel.pRange = m_excel.pSheet.get_UsedRange();//获得列数
        m_excel.pRange = m_excel.pRange.get_Columns();
        int colNum = m_excel.pRange.get_Count();

        m_excel.pRange = m_excel.pSheet.get_UsedRange();//获得行数
        m_excel.pRange = m_excel.pRange.get_Rows();
        int RowNum = m_excel.pRange.get_Count();

        //读取Excel中指定单元的数据
        for (int i = 2; i <= RowNum; i++)
        {
            CString ptX = m_excel.GetCString(4, i);
            CString ptY = m_excel.GetCString(5, i);
            CString ptZ = m_excel.GetCString(6, i);
            CString rad = m_excel.GetCString(7, i);
            
            //按照excel文档中的数据转化成中心点
            AcGePoint3d ptExcel;
            ptExcel = strToDouble(ptX, ptY, ptZ);//将字符串型数据转换成双精度型,其中strToDouble()函数是自己所写,这里就不另外给出
            double raduis ;
            raduis = strToDouble(rad);//将字符串型rad转换成双精度型

            //根据Excel中的图形类型,在模型空间添加相应的实体
            CString grapfType = m_excel.GetCString(2,i);
            if (grapfType == _T("圆"))
            {
                //根据选择的基点设定圆的中心点
                AcGePoint3d ptCenter;
                ptCenter.x = ptExcel.x + ptBase.x;
                ptCenter.y = ptExcel.y + ptBase.y;
                ptCenter.z = ptExcel.z + ptBase.z;
                AcGeVector3d vec(0,0,1);
                //定义实体圆
                AcDbCircle *pCir = new AcDbCircle(ptCenter, vec, raduis);
                PostToModelSpace(pCir);
            }
            if (grapfType == _T("直线"))
            {
                CString endPointX = m_excel.GetCString(8, i);
                CString endPointY = m_excel.GetCString(9, i);
                CString endPointZ = m_excel.GetCString(10, i);
                AcGePoint3d ptMid = strToDouble(endPointX, endPointY, endPointZ);
                //按照选择的基点设置起点和终点
                AcGePoint3d startPoint;//起点
                startPoint.x = ptExcel.x + ptBase.x;
                startPoint.y = ptExcel.y + ptBase.y;
                startPoint.z = ptExcel.z + ptBase.z;
                AcGePoint3d endPoint;//终点
                endPoint.x = ptMid.x + ptBase.x;
                endPoint.y = ptMid.y + ptBase.y;
                endPoint.z = ptMid.z + ptBase.z;

                //将直线添加到模型空间
                AcDbLine *pLine = new AcDbLine(startPoint, endPoint);
                PostToModelSpace(pLine);
            }
        }
        //完成所有操作后一定要清除掉excel文档相关的内容
        m_excel.pRange.ReleaseDispatch();
        m_excel.pSheet.ReleaseDispatch();
        m_excel.pSheets.ReleaseDispatch();
        m_excel.pBook.ReleaseDispatch();
        m_excel.pBooks.ReleaseDispatch();
        m_excel.pApp.Quit();
        m_excel.pApp.ReleaseDispatch();   
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-3-7 10:01
  • 签到天数: 1440 天

    连续签到: 19 天

    [LV.10]以坛为家III

     楼主| 发表于 2021-2-8 17:18 | 显示全部楼层

    在MFC中怎么获得Excel文档中已经使用了的行数和列数
    _Worksheet ws;
    Range range;

    range = ws.GetUsedRange();//获得Worksheet已使用的范围
    range = range.GetRows();   //获得总行数(LPDISPATCH类型)
    long UsedRows = range.GetCount(); //即可获得已使用的行数了。

    获得列数也是一样的方法,把GetRows()改为GetColumns即可。

    注:1.首先程序中应该包含CExcel.h和CExcel.cpp;

         2.有的版本中不是使用的GetRows(),而是get_rows(),但是它们的是一样的;

         3.注意当你要通过for语句进行遍历Excel文档,往里面写数据的时候,有时候行和列是倒置的,这个看情况处理。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

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

    GMT+8, 2021-3-8 03:21 , Processed in 0.292855 second(s), 22 queries .

    Powered by 中国膜结构网->膜材采购->膜结构设计->膜结构安装->膜结构维修

    © 2014-2020 膜结构协会->进口膜材->国产膜材->PVDF膜材->PTFE膜材->ETFE膜材.

    快速回复 返回顶部 返回列表