PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

PLM之家PLMHome-国产软件践行者

[原创] C# 或 c++ 不用安装操作 EXCEL的方法

[复制链接]

2017-3-6 19:21:55 3168 1

15757753770 发表于 2016-12-11 14:57:16 |阅读模式

15757753770 楼主

2016-12-11 14:57:16

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
C# 或 c++  不用安装操作 EXCEL的方法:c++ 对excel 的操作 非常不理想 要安装excel 而且读写速度也慢
% b$ P/ S, n& L2 T1 B1 ]3 t+ h) Tnet 有很多 免费的开源库 比如 Npoi库  (Npoi库 支持c#、vb.net 等语言)9 z3 H5 l) ^2 S0 B& @
这里我用c# 生成 com 组件 让 c++ 调 4 X2 B; d  s% s0 h+ q! ^- y
% Q( \1 Q4 }( ^. Q8 ~
首先要学会 c++ 调 c# com组件的方法   (和com注册的方法)0 b' q3 ^: c5 n# L6 w; X: A
C++调用C#的COM组件(DLL)
, T$ b% U0 Q. n
" i* A, ~; e5 q4 F下面我举个简单的小例子.我用的是Microsoft Visual Studio 2012,操作系统是Win 7.
4 m7 a" H  A: k. W1 ?- f% i首先创建一个C# com组件.实现的功能很简单,就是返回两数相加的和.
" g! d' n, B6 V
6 i* y% J( R. W* o0 G# M
) \7 ]: R0 V$ L- D  G1.新建一个C#项目 ,类型就选 类库 .取名 MEI_AddCom
4 I' u' P9 ~% H& V* k, f: O4 j' ?( S, G7 U8 N3 J* N
2.在项目中添加一个接口,取名MEI_COM.C++调用com组件中所有的功能只能通过接口来调用,不能直接调用类或函数5 K* R/ y! [* w: U0 R& \) p: g7 J) h
$ ~9 l8 _; b( {1 H
具体代码:
% L4 d  R0 j0 O# i
* f% f( A8 v. X5 n9 P9 Ousing System.Runtime.InteropServices; //记得加这个命名空间
/ {; v6 _& j+ D1 i8 v
" @5 W# I! I% T% _  |: P# gnamespace MEI_AddCom8 z. |; ]+ f4 d- {

9 [% c, |2 i. U, C" }5 F( v7 ^{6 `7 g! ]/ A9 `( p6 m

$ b- e9 {( g' l' v" f  ?; C    [Guid("DA07B88D-29F0-41cf-B3D3-611010E6F3FF")] // guid的产生可以通过vs自带的工具.点菜单栏上的Tools ->Create GUID,然后选第4个选项.Registry Format.
* O% M+ [$ P. K+ O, F6 k* E3 M' e# [& l
          //点按钮New GUID,再点Copy.这样你就可以把产生的guid复制下来,然后粘贴到这个地方来.当然那个大括号得去掉.后面需要用到guid的地方也用这方式产生
2 K" A/ W! m$ ?
4 |  i$ [2 V3 z) U# M  P. @  O8 \    [ComVisible(true)]6 X: w+ q' R9 n9 s3 j

/ W- h7 i0 l' P7 H. Y    public interface MEI_COM        //记得用修饰符public
+ T( ~* ^7 u6 }
; n# \6 j2 c9 S* Q2 `    {, [6 m0 P5 r0 a4 u* W  o0 K
! }% w9 c* k+ b
        [DispId(1)]       //如果还要添加其他函数就继续来个[DispId(2)],[DispId(3)]加在函数前面
  H: s6 j. h5 g% K" O2 I
1 I! G# l% D# D: ^        int Plus(int one, int two);
" y" {6 S# ^& T3 j2 O9 \7 E7 t) Z! J" x" w& ~# i
    }
; r" S! u9 Y) p" w0 b) c, h2 ?* f+ D1 [  K3 {) W
}
# @" q# j* I7 B! U4 y7 L
# ~. |% e+ @4 a! B# S1 \- J- D' T2 ]
3 h3 P9 t- _6 H
3.添加一个类MEI_COM_T,继承接口MEI_COM,具体代码
7 d: j* v6 u0 u4 o2 y0 g! X& k7 [
using System.Runtime.InteropServices;' r7 n) q3 L8 V' ^! W
& L1 F9 N4 v* E; [- L) n2 b. Q
namespace MEI_AddCom( g$ d2 v' T6 V- ?1 }% _5 e
4 u% N: y8 C$ Q; j6 j
{3 f: b& q+ \+ L" h2 ]7 Y/ X

9 [, L; @7 s5 r6 C    [Guid("04F4DC83-8883-4a03-BDBC-92D8630ECC1F")]
* a, f" Y) n" C$ D! n, B9 Y0 f9 y/ N* i: X! ?
    [ClassInterface(ClassInterfaceType.None)]3 C# ?. S) h  c5 N  C" U8 N- u) z
! j: t) t( O; e
    public class MEI_COM_T : MEI_COM  f: G5 @8 Q, G" B

& N$ R" H& w( S6 m: V5 y    {
+ a7 |$ o% Q1 j) Y& [
  e7 {8 A$ D: U( m        public int Plus(int a, int b)* v" _/ q( m5 y7 a& L8 k
0 Z2 l0 P/ P+ |5 A& J
        {
0 S6 z5 P7 r, E/ _$ ]! f; {' {/ H% [5 S5 `1 o. }3 t3 X
            return a + b ;
$ X! {/ ~$ z2 h* w' t+ H! g) O/ V) z
        }; L$ A+ ^7 k9 a- x9 F' \

) O  M3 P5 T0 e* b* @6 ]' @1 M# c/ {    }( d* S/ ?* U4 j3 i. C% E' w
( C+ f7 b# A: i
}
( {7 z9 k$ V, [2 \* y5 `8 y
  Q( Q! ?' b; j. E1 z7 C4 A# T( e' ]! `6 R

$ f0 m7 C+ Q& ]6 f9 C/ ]/ p( U: U6 P4.把AssemblyInfo.cs中的[assembly:ComVisible(false)]改成[assembly: ComVisible(true)].
; c7 q/ G5 K) S- ~" k7 U
3 X1 s8 q: {: J右击项目名打开属性窗口,在生成里,选中 为COM 互操作注册
- i8 _* n' m( G2 }1 I4 d8 l; X( r, }4 w; Q& C7 m$ t

' O/ Z8 R. \/ C. u8 k5. 生成->生成解决方案, g  L6 \; \; s" M2 E
   注意 这个时候 生成 非常缓慢 / ~2 q, h& T0 c! D/ D( H- M' a; H
   直到 出现 成功 1 个,失败 0 个,为止才 操作一下面内容0 p; d8 P( n* r$ c

) B8 k8 i; V4 }
% b' d+ m1 \& |---------------------------
: R5 w9 ?2 U% k: X) r+ @# E2 I$ e9 |
1.调用前要先把com组件注册才行." R7 h5 D. l2 S

9 h! X) x: R( {9 N使用C#创建并注册COM组件  C#不能直接创建COM组件,因为其生成的DLL属于程序集,但可通过“使程序集COM可见”选项来支持COM。; p7 E3 g6 m! W- C: s+ K: `
以下说明如何通过C# 注册、注销COM组件。
/ O/ ~4 T' c$ f4 m% C1 z
" e. o* d. e2 m4 l" ~& t为了能让生成的DLL能够进行COM注册,需要进行强名称签名6 z$ z6 X/ H. j* [( ^; v5 F( C8 ]& D* l
打开COMLib项目属性,选择签名,勾选为程序集签名,通过下拉列表选择新建,弹出创建强名称密钥窗口,输入名称,不勾选使用密码保护密钥文件。1 h& `: ]# d/ I4 h
创建完成后COMLib项目中将出现后缀为.snk的签名文件。
) M7 {6 a& J0 }2 r/ |/ x# N! s9 \最后,编译COMLib项目,生成COMLib.dll文件,完成COM组件的制作。  注册COM组件:  如将COMLib.dll放置D盘根目录下,以管理员身份运行CMD,提示符切换至C:\Windows\Microsoft.NET\Framework\v2.0.50727,输入“RegAsm  D:\ COMLib.dll  /tlb: COMLib.tlb  /codebase”,回车后得到如下图所示结果,表明注册成功。同时D盘根目录还会生成COMLib.tlb文件。
+ r! o) p0 G# S+ M- B卸载COM组件:  
( B4 A  `) I, j1 F. X% e( h" p5 }与注册过程基本相同,只需将命令改为“RegAsm  /u  D:\ COMLib.dll  /tlb: COMLib.tlb  /codebase”。
1 I% v) ^3 m* y0 `) ~* J0 e$ D: v) u1 ^0 [+ `! o  z( M

- K! l2 J( |1 }/ P+ N2 g! a. \2.注册完了就可以在代码中用了,先新建一个C++程序, 类型选 Win32 Console控制台应用程序
* t. a5 r" R4 h% |
5 M- M$ [4 G6 t0 j1 T  ?名字取MEI_UseCsharpCom,点完成8 x# C) \  C, X7 z. Z7 ^  h1 R2 _
: }5 b. q# D! R
把MEI_AddCom.tlb文件拷贝到项目的任何目录下.我就放在D:\MEI_UseCsharpCom\MEI_UseCsharpCom.
; t( J$ _+ U5 H( @3 l2 ]3 R7 F" a6 ?. p+ ~/ U8 D
我们会看到一个MEI_UseCsharpCom.cpp文件,双击打开把默认生成的代码全部删掉.敲入下面代码:
. c' Y: p4 R# ]. j2 q  j! j# k8 j4 ~  I" y$ s

9 v5 I0 g. @7 H+ |#include "stdafx.h"
' P: G9 v) E( [7 }+ l#include <windows.h>
3 D3 ]4 q8 Z4 D2 H. \' x6 l#include <string.h>
% Y2 V. Y: Z) z3 B4 ~; }) p, ~
7 \0 u9 A$ i* N2 x7 N* e( Y#import "MEI_AddCom.tlb" named_guids raw_interfaces_only& E$ Z+ M+ c8 u

5 E6 v3 u: P) |char* WcharToChar(const wchar_t* wp)  //wchar_t转char*
  j# n* L1 u2 I- f+ h* O{  # G3 G; _1 p+ u
    char *m_char;
/ y8 {7 v. X  t+ |' u/ W/ u    int len= WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),NULL,0,NULL,NULL);  / X5 f+ g: k; k" M0 w
    m_char=new char[len+1];  
" Z, J  \' |6 W! Z6 n. {- W    WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),m_char,len,NULL,NULL);  
, ]* f' M  n2 X* y6 V    m_char[len]='\0';  : I3 W7 b! U& ^* B. Q/ r$ c% W
    return m_char;  
3 z$ C2 r& D% z- b1 F" U- |3 n}  
' M" i+ x) m% P# W8 _" f/ J# Owchar_t* CharToWchar(const char* c)   //char*转wchar_t
  R  x6 A! U/ }! C1 `7 T{  5 a' b" K1 ~1 `" u8 t; ~
   wchar_t *m_wchar;6 z: l5 \; _2 K1 x" b/ C% V
    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
8 u% M6 I" Q% q% K. V' a    m_wchar=new wchar_t[len+1];  
  }; q8 [4 Z0 {/ k$ J: h8 f' k1 C    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
/ x" l  @, C3 V( r1 o    m_wchar[len]='\0';  
' Z3 D) X& Z7 y8 J5 P4 |1 m+ t    return m_wchar;  
4 V+ d" V0 u3 ?) F1 A1 O. E5 u}  % ^, F9 p+ m4 Q

. B* |, l4 A/ U) H9 U0 L* R9 rvoid _tmain(int argc, _TCHAR* argv[])
. l8 u: ]& f; b% G9 @3 u. @1 B& P
{
) `9 ^% d( O) D: N1 F- ~9 e$ c$ z+ V0 r
    CoInitialize(NULL);
; I* H; r  e! G! g) \1 n6 `6 W( e9 S8 e- c8 U
        MEI_AddCom::MEI_COMPtr ptr;   //类似明志一个指向接口的指针
5 Q! n' X. i* q- O" E2 H5 _0 Y
( X' h1 G$ g8 ?( ]        ptr.CreateInstance(MEI_AddCom::CLSID_MEI_COM_T);   //实例化一个类 CLSID_ 类名
/ P& @4 y  j  z+ b
- _0 ?$ f0 V/ v, \8 D   //这个地方有一点点奇怪我也还没弄懂.在C#中的函数是int Plus(int,int).但类型在这里都转成long了.另外就是我们不能直接
, C) e0 [9 F( ^1 v/ P
( B5 Q8 S" a& B) G$ S3 c   //来个long a = ptr->Plus(1,2);这样得不到a = 3,反正会出错." t6 A# H" M# Z3 _( _
   //这里函数Plus的参数变成三个了long Plus(long,long,long *).其中最后一个指针得两数相加的结果
( x* u3 c2 M! f+ F: c
* W0 \- S0 ?! z( l* I1 p   long a = 1;
! R/ K2 h* ^8 _. V& U3 K
' i& G; B4 P  e2 T& i' @   long * lPtr = &a;
( p9 W( J. d2 `
8 R7 \# }) t% X8 p& h    ptr->Plus(1,2,lPtr);: E% W$ C; i4 c0 q. w

6 \" O2 c3 Z. D5 P& [8 [$ u    char msg[132]="";
! o  P/ n' U) i& J: x    sprintf(msg, "%d",lPtr[0]);
  X2 ~/ r' ^0 A& x  a- ]- T* x8 y7 T, i5 J& z9 ]; F* `
        LPCWSTR str=CharToWchar(msg);! y" i2 o- S: a& |

$ P9 s# W3 ~6 o: c# Y  Z    MessageBox(NULL,str,_T("123"),MB_ICONWARNING);
4 l1 s, n. w) |  J: [  ?% [& [# z5 G# z2 z8 [- g

8 G) m' q) m+ K0 z}
/ m3 B; B* P; X- p$ `1 j
! H$ w7 ~" N+ r( _; P- h* S( |此时就可以正确运行了.得到结果38 e8 z% f5 ?' [& U" v! f! ^

2 |1 F* r, [/ n& l  E2 V6 P如果没有正常运行,则必须把dll文件拷贝到有MEI_UseCsharpCom.exe这个文件的目录下.
. g) r, `' y* Q9 |( E7 K! g) l& \, k. j

3 M* t, f. l4 y--------------------------------------------------------------' ^2 k( l- W5 S% R) {' R% v  r
C# Npoi库 操作excel 的代码网上很多9 C4 u  z( E; ^7 H9 ?
& g* S, \; W9 o5 D7 p3 s
// ----------------------------------------------------------------------0 G; l$ A: @. e7 k8 O7 x2 p& w
// 使用Npoi创建一个简单的xls文件,写内容
+ e; {4 P% X# A
* |3 x& O5 t. N* K" ]; D0 e- ?using System;7 C  s% f  l) q5 j; f7 X0 B
using System.Collections.Generic;
/ T& A& V6 c5 T; ]using System.Linq;- w( V2 @' y6 v' f6 t1 B6 u
using System.Text;) E. U! o0 @0 q/ @
using NPOI.SS.UserModel;& P. L. Y5 n2 E1 ^" _- b
using NPOI.XSSF.UserModel;1 B# b9 ~, K% p) r* h
using NPOI.HSSF.UserModel;
1 G2 n  C) R: h, a: j( @/ _using System.IO;% ~8 A3 F+ w' P, I
using System.Data;2 H' f+ M8 S2 z9 h) b& V

6 Q) M" H. Q& e  i//using System.Windows.Forms;
$ o) V9 q* r' f; p- t- M
6 s* G; b- x) m. D* T! _8 Tnamespace CC
0 C2 |9 r/ a/ l( M+ t{
& C* e7 z6 a! Q/ |0 s; Q+ X$ U8 z0 [
    class Program
5 A/ }) q/ U9 {  z8 R( H, U    {
7 V0 R! @8 @: a9 u; ~4 M
0 g& j6 @" A& d4 u2 k" m3 |' a2 B' \( R! O) k  x
        static void Main(string[] args)" ^% N) c& }4 V* n( ^) _/ w
        {
/ @2 V- P4 ^6 ?8 S/ h) u* i1 ]7 u" m            //创建工作薄
* p2 |( k4 I0 p8 b            HSSFWorkbook wk = new HSSFWorkbook();
; m- K+ L! D+ |3 B0 f$ f            //创建一个名称为mySheet的表
) i4 f+ y; W  S" V  G            ISheet tb = wk.CreateSheet("mySheet");2 u7 ^3 X. T7 ~0 d  G  _
            //创建一行,此行为第二行5 V7 O% a0 n8 z, k. s
            IRow row = tb.CreateRow(1);
8 y! O8 D! O3 _" g% I            for (int i = 0; i < 20; i++)
6 G9 E3 u5 y! b0 S" h4 V' g            {. G$ G* Q$ {/ [, B' h+ z
                ICell cell = row.CreateCell(i);  //在第二行中创建单元格
" G$ j' a5 \. T4 ~2 S+ N& T8 x: _                cell.SetCellValue(i);//循环往第二行的单元格中添加数据6 y0 n2 N' c: ^+ U. x
            }
: m( t9 \- m2 q1 ?; M            using (FileStream fs = File.OpenWrite(@"c:/myxls.xls")) //打开一个xls文件,如果没有则自行创建,如果存在myxls.xls文件则在创建是不要打开该文件!
4 M0 ?5 H! z- J! i7 }            {7 m# o, D7 {+ l' N: k
                wk.Write(fs);   //向打开的这个xls文件中写入mySheet表并保存。
" M8 H9 e7 D* S2 `* z# g' q                // MessageBox.Show("提示:创建成功!");; s* W6 \) d, E# Z: E- L. d( z
            }/ }$ P( k6 V- P$ L- F

/ @; T; A0 |4 K" D5 Q9 i/ M        }
, v% m) J7 B" }& D) Z; @9 z6 s2 Q, n* R% [2 o8 q# e

1 p, f9 r: L( h    }5 E: k+ g6 T' F, ~4 f- z
) u* T- b0 [2 s, H- |* F
; U6 M# A& H" r2 n

1 H2 R( c( S: o% V+ h, d. z. E}
9 A! _% Z  f' y- j- j: n+ p3 N- K$ T( T. q& {: Z! W
// ----------------------------------------------------------------------  ~2 t- Y& E' Q, n' A
// 使用Npoi读一个简单的xls文件
0 t5 T. t3 e$ S4 F
* I2 }$ g% N6 Q7 h) t. R: kusing System;6 y) W+ ^" T& X" C* L& R9 R% p
using System.Collections.Generic;8 l: e5 X0 @. f* ^
using System.Linq;8 z0 j4 `9 T) k/ m  D
using System.Text;1 k# x, L5 E8 j  l, {3 [
using NPOI.SS.UserModel;$ t; B0 @2 x; G& @$ K2 D3 U% W3 K+ a9 g
using NPOI.XSSF.UserModel;
6 p. C* j0 e# l( q/ v# Vusing NPOI.HSSF.UserModel;
* C7 W; |9 J0 i1 X4 Lusing System.IO;
4 Q& Y- U9 J7 u0 |5 ~using System.Data;( C( M5 b1 w$ ~9 ~
. E" k2 a) X4 o3 ^
namespace CC$ V4 a# |0 c. U7 m+ b$ d
{
! r/ Q6 Q8 h7 f5 J2 ~$ k, h5 W0 [0 @. z9 z# l  x" X  u
    class Program
+ A+ g% f  J4 F+ r    {
- Y8 l/ |* s$ [) h( e1 R3 `. N/ ?+ v" F: @4 F2 N+ ]

$ Q6 x) R+ ~. f: v; O8 \5 E/ i5 C        static void Main(string[] args)3 d& q3 |1 |+ V" J" F; X
        {5 P- S- K/ l; F$ u
            StringBuilder sbr = new StringBuilder();
, D  ^$ J6 N5 H. V) V4 r) X% q0 f: w            using (FileStream fs = File.OpenRead(@"c:/myxls.xls"))   //打开myxls.xls文件
0 }0 W4 G' A% K" Q            {0 X4 y9 o* U7 g
                HSSFWorkbook wk = new HSSFWorkbook(fs);   //把xls文件中的数据写入wk中2 c6 b) z5 H4 G8 K' \
                for (int i = 0; i < wk.NumberOfSheets; i++)  //NumberOfSheets是myxls.xls中总共的表数" C. A2 Y* [, A  r& R8 C
                {
3 x4 H& W$ s  F' l6 V                    ISheet sheet = wk.GetSheetAt(i);   //读取当前表数据# k) P9 C; e' x
                    for (int j = 0; j <= sheet.LastRowNum; j++)  //LastRowNum 是当前表的总行数
2 d" f" Z1 X/ Y  k6 V% f' {' K                    {/ I& I  u. A! ^/ @% m6 ?/ \) _8 R3 s
                        IRow row = sheet.GetRow(j);  //读取当前行数据
. p6 o/ b9 |# {/ _! Z                        if (row != null)
4 U6 N, s/ g& i' L- |                        {6 ^% _% H  \8 I1 y  Y. R
                            sbr.Append("-------------------------------------\r\n"); //读取行与行之间的提示界限( }; j8 u* v+ G4 G
                            for (int k = 0; k <= row.LastCellNum; k++)  //LastCellNum 是当前行的总列数+ ~- D3 A: }3 l3 f/ r# O
                            {
: z5 C) f+ Y, N7 m, |, K                                ICell cell = row.GetCell(k);  //当前表格. C4 E: i$ k9 \' z0 G8 Q
                                if (cell != null)
- X7 b( |9 g+ L                                {8 K; u/ e/ S/ R: f
                                    sbr.Append(cell.ToString());   //获取表格中的数据并转换为字符串类型; r0 O8 p$ B* p: y  r2 Q
                                }  G/ J8 ^5 P. }* N. k/ \
                            }
5 U7 ?) y$ z+ I0 p                        }! }3 z) l% D0 a# M9 z( K
                    }
# s3 L6 A: Z: T: D* [. Q; ]1 b                }* w; k- ~6 I! B% t5 Y  c6 H
            }8 D8 L1 j6 L2 m: F
            sbr.ToString();1 b( Q$ O+ Q# N( M9 P
            using (StreamWriter wr = new StreamWriter(new FileStream(@"c:/myText.txt", FileMode.Append)))  //把读取xls文件的数据写入myText.txt文件中1 F' ]6 {: V/ W1 l
            {9 p5 \' y2 M( D8 q
                wr.Write(sbr.ToString());4 L6 ]5 W/ @" q0 V
                wr.Flush();
" t4 [$ ]1 S- ^* M1 Y/ r/ G" w            }
1 G/ _8 n0 J$ j1 z' y, A! v$ i9 k: y6 Z2 H& }7 f: O
7 N& c( F5 C2 m8 P& m
        }: |* `; M1 }# M
- @; i! w5 I* c9 Y" G: w
) E. E% W# F( h: t- U/ l
    }
3 h/ g  b  b( e
. w- e( _/ I6 O! y4 ]. B2 K0 V$ |( h+ n: E1 L( J4 N" B
( O9 {0 b$ Z$ J: |+ f
}/ |2 Y. v7 o8 w: s3 ~& L3 d

- A+ ~* r0 Z9 D: s5 D9 h0 g. n3 M8 ~2 X" o
然后 自己封装 给 c++用2 ~9 \+ e+ N5 }8 M1 t
  z4 I( {! q4 h) P/ C2 F( u/ T& R
" O6 v2 v# {, V& F. g$ K: I
1 q; d$ C. b4 c! r: ?+ ?

- [+ s* `! w2 a% ?3 |/ ^' b, y# j+ B4 V, l1 a' _5 w

" L  g$ h0 B7 _
, Y6 @- S# D; t/ ^0 G; K3 P; F& P% Z- M. H* q2 ]7 U1 V
: {* {$ q# F/ q" A  a3 D

& p% L0 h' Z$ z/ b  w7 ]: x! Q  g0 b  @  S0 q( ]) T
/ U' {( S0 b7 R9 X8 D9 `) \/ U
2 i0 y6 m; ~4 F2 ]! J2 x
' o: q& O6 M9 @8 }; S" m  ]7 F
1 |0 z! O9 D5 X# f

1 T+ B. X/ V: I$ N
( |+ w' _! p  h1 [

8 M" [! r$ {- c: m6 q3 v/ I8 R; F% s: f; F; s9 ~3 ~. i/ l% x% j

& g% P/ U- i0 P% e

/ ~, _" q* l' f  ?4 G. H0 k, q7 Z4 ?+ |$ _& {- i% ^/ P

  d9 M' O' Q/ \' J& i, Q
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复1

f1405602 发表于 2017-3-6 19:21:55

f1405602 沙发

2017-3-6 19:21:55

梅大师,就是叼!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了