设为首页收藏本站

中国膜结构网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

c++操作Excel

[复制链接]
  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

    发表于 2021-2-7 09:28 | 显示全部楼层 |阅读模式
    添加创建文档或打开文档的实现代码:

    void CcontrolExcelView::OnBnClickedButtonOpenFile()  
    {  
        // TODO: 在此添加控件通知处理程序代码  
      
        LPDISPATCH lpDisp = NULL;  
      
        //创建Excel 服务器(启动Excel)  
        if(!ExcelApp.CreateDispatch(_T("Excel.Application"),NULL))  
        {  
            AfxMessageBox(_T("启动Excel服务器失败!"));  
            return;  
        }  
      
        /*判断当前Excel的版本*/  
        CString strExcelVersion = ExcelApp.get_Version();  
        int iStart = 0;  
        strExcelVersion = strExcelVersion.Tokenize(_T("."), iStart);  
        if (_T("11") == strExcelVersion)  
        {  
            //AfxMessageBox(_T("当前Excel的版本是2003。"));  
            GetDlgItem(IDC_EDIT_VERSIONS)->SetWindowText(_T("Excel2003"));  
        }  
        else if (_T("12") == strExcelVersion)  
        {  
            //AfxMessageBox(_T("当前Excel的版本是2007。"));  
            GetDlgItem(IDC_EDIT_VERSIONS)->SetWindowText(_T("Excel2007"));  
        }  
        else  
        {  
            //AfxMessageBox(_T("当前Excel的版本是其他版本。"));  
            GetDlgItem(IDC_EDIT_VERSIONS)->SetWindowText(_T("Excel"));  
        }  
      
        ExcelApp.put_Visible(TRUE);  
        ExcelApp.put_UserControl(TRUE);  
      
        /*得到工作簿容器*/  
        books.AttachDispatch(ExcelApp.get_Workbooks());  
      
        /*打开一个工作簿,如不存在,则新增一个工作簿*/  
        CString strBookPath = m_strPathName;  
        try  
        {  
            /*打开一个工作簿*/  
            lpDisp = books.Open(strBookPath,   
                vtMissing, vtMissing, vtMissing, vtMissing, vtMissing,  
                vtMissing, vtMissing, vtMissing, vtMissing, vtMissing,   
                vtMissing, vtMissing, vtMissing, vtMissing);  
            book.AttachDispatch(lpDisp);  
        }  
        catch(...)  
        {  
            /*增加一个新的工作簿*/  
            lpDisp = books.Add(vtMissing);  
            book.AttachDispatch(lpDisp);  
        }  
      
        /*得到工作簿中的Sheet的容器*/  
        sheets.AttachDispatch(book.get_Sheets());  
        /*打开一个Sheet,如不存在,就新增一个Sheet*/  
        CString strSheetName = _T("NewSheet");  
        try  
        {  
            /*打开一个已有的Sheet*/  
            lpDisp = sheets.get_Item(_variant_t(strSheetName));  
            sheet.AttachDispatch(lpDisp);  
        }  
        catch(...)  
        {  
            /*创建一个新的Sheet*/  
            lpDisp = sheets.Add(vtMissing, vtMissing, _variant_t((long)1), vtMissing);  
            sheet.AttachDispatch(lpDisp);  
            sheet.put_Name(strSheetName);  
        }  
    }


    读取单元格的代码

    void CcontrolExcelView::OnBnClickedButtonRead()  
    {  
        // TODO: 在此添加控件通知处理程序代码  
        //获取单元格  
        UpdateData(TRUE);  
        CString strRange;  
        strRange.Format(_T("%d"), m_lRow);  
        strRange = m_strColumn + strRange;  
        //获取range  
        LPDISPATCH lpDisp = NULL;  
        lpDisp = sheet.get_Range(COleVariant(strRange), COleVariant(strRange));  
        range.AttachDispatch(lpDisp);  
        VARIANT ret = range.get_Value(vtMissing);  
          
        switch (ret.vt)  
        {  
        case VT_R8:  
            {  
                m_strRange.Format(_T("%d"), (int)ret.dblVal);  
            }  
            break;  
      
        case VT_BSTR:  
            {  
                m_strRange = ret.bstrVal;  
            }  
            break;  
      
        case VT_I4:  
            {  
                m_strRange.Format(_T("%ld"), (int)ret.lVal);  
            }  
            break;  
      
        default:  
            {  
      
            }  
            break;  
        }  
        UpdateData(FALSE);  
    }  

    改变单元格边框的实现代码

    void CcontrolExcelView::OnBnClickedButtonStyle()  
    {  
        // TODO: 在此添加控件通知处理程序代码  
        //获取单元格  
        UpdateData(TRUE);  
        CString strRange;  
        strRange.Format(_T("%d"), m_lRow);  
        strRange = m_strColumn + strRange;  
        //获取range  
        LPDISPATCH lpDisp = NULL;  
        lpDisp = sheet.get_Range(COleVariant(strRange), COleVariant(strRange));  
        range.AttachDispatch(lpDisp);  
      
        // 然后设置外边框   
        // LineStyle=线型(1~13) Weight=线宽 ColorIndex=线的颜色(-4105为自动, 1为黑色)     
        long lColor  = RGB(255, 0, 0);  
        COleVariant varColor(lColor);  
        range.BorderAround(_variant_t(long(3)), 3, 3, vtMissing);//设置边框   
      
    }  

    改变单元格字体的实现代码

    void CcontrolExcelView::OnBnClickedButtonFont()  
    {  
        // TODO: 在此添加控件通知处理程序代码  
        UpdateData(TRUE);  
        CString strRange;  
        strRange.Format(_T("%d"), m_lRow);  
        strRange = m_strColumn + strRange;  
        //获取range  
        LPDISPATCH lpDisp = NULL;  
        lpDisp = sheet.get_Range(COleVariant(strRange), COleVariant(strRange));  
        range.AttachDispatch(lpDisp);  
      
        CFont0 ft;  
        ft.AttachDispatch(range.get_Font());  
        ft.put_Name(_variant_t(_T("华文行楷")));  
        ft.put_Size(_variant_t(8));  
        ft.put_Color(_variant_t(RGB(255, 0, 0)));  
          
    }  

    改变单元格底色的实现代码

    void CcontrolExcelView::OnBnClickedButtonDise()  
    {  
        // TODO: 在此添加控件通知处理程序代码  
        UpdateData(TRUE);  
        CString strRange;  
        strRange.Format(_T("%d"), m_lRow);  
        strRange = m_strColumn + strRange;  
        //获取range  
        LPDISPATCH lpDisp = NULL;  
        lpDisp = sheet.get_Range(COleVariant(strRange), COleVariant(strRange));  
        range.AttachDispatch(lpDisp);  
      
        //改变底色  
        Cnterior interior;  
        interior.AttachDispatch(range.get_Interior());  
        interior.put_ColorIndex(_variant_t((long)20));  //将底色改为浅青色  
    }  

    保存文件的实现代码

    void CcontrolExcelView::OnBnClickedButtonSave()  
    {  
        // TODO: 在此添加控件通知处理程序代码  
        book.Save();  
      
        ExcelApp.Quit();  
        //释放  
        range.ReleaseDispatch();  
        sheet.ReleaseDispatch();  
        sheets.ReleaseDispatch();  
        book.ReleaseDispatch();  
        books.ReleaseDispatch();  
        ExcelApp.ReleaseDispatch();  
    }  
    回复


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

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

     楼主| 发表于 2021-2-7 09:30 | 显示全部楼层
    Excel::_WorksheetPtr sheet;
    Excel::_WorkbookPtr workbook;
    Excel::_ApplicationPtr ptrExcelApp;
    Excel::RangePtr ptrRange;
    Excel::RangePtr ptrCols;
    Excel::RangePtr ptrRangeHead;
    Excel::RangePtr ptrRangeVal;
    Excel::RangePtr ptrResizeRange;

    Excel::RangePtr ptrBook;
    Excel::RangePtr ptrSheet;
    Excel::RangePtr lpszHeader;

    _Application //    Excel应用程序。
    Workbooks //工作簿容器  workbook 单个工作簿
    Worksheets//表格容器  worksheet 单个表格
    Range //一定数量的单元格

    //打开文件
    CString file_types;  //文件类型
    CString m_FileName;  //文件名
    file_types = "EXCEL File(*.xls)|*.xls|";
    CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY | OFN_EXPLORER,(LPCTSTR)file_types,NULL);
    if (dlg.DoModal()==IDOK)
    {
        m_FileName = dlg.GetPathName();
    }

    //打开应用程序
    if( FAILED(ptrExcelApp.CreateInstance("Excel.Application")))  //实例化
    {
        AfxMessageBox("Couldn't start Excel and get Application object.");
        return;
    }

    //按路径打开
    workbook = ptrExcelApp->Workbooks->Open(_bstr_t(m_FilePath));

    //遍历工作薄
    for(int sheetIndex=1;sheetIndex<=workbook->Sheets->GetCount();sheetIndex++)
    {

    }

    sheet = workbook->Sheets->GetItem(1);
    ptrRange=sheet->GetUsedRange();//获取已经使用的单元格

    row = ptrRange->GetRows()->GetCount(); //行数
    col = ptrRange->GetColumns()->GetCount();    //列数     


    //设置格式
    CString str_row;
    str_row.Format("B%d",row);
    ptrRange = ptrSheet->GetRange( _variant_t("A1"), _variant_t(str_row) );

    ptrRange->NumberFormatLocal = "@"; //设置格式,否则会出现科学表示的情况。
    int row = 1;
    ptrRange->PutItem(row1,1,_variant_t(name1)); //插入数据
    ptrRange->PutItem(row1,2,_variant_t(name2));

    row++;

    AfxMessageBox("导出成功!");
    // 保存
    workbook->SaveAs( _variant_t(m_FileName), vtMissing, vtMissing,vtMissing, vtMissing, vtMissing, Excel::xlNoChange );

    // 退出 excel
    ptrExcelApp->Quit();

    //打开excel
    ShellExecute(NULL,"open",strFilePath,NULL,NULL,SW_SHOW);
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

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