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 3110 1

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

15757753770 楼主

2016-12-11 14:57:16

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

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

x
C# 或 c++  不用安装操作 EXCEL的方法:c++ 对excel 的操作 非常不理想 要安装excel 而且读写速度也慢4 M" h$ Z# i7 H0 q: V  L
net 有很多 免费的开源库 比如 Npoi库  (Npoi库 支持c#、vb.net 等语言)" o0 P4 T; F( I3 D
这里我用c# 生成 com 组件 让 c++ 调 4 ~- V# p# A( W$ p$ F

8 }9 i1 V4 k  w1 V/ n& u首先要学会 c++ 调 c# com组件的方法   (和com注册的方法)
0 J- E$ L, r' h: u! z) l, m* j2 WC++调用C#的COM组件(DLL)
4 ?# b8 Y# A" e. S7 J/ B( f; w& O# \) t0 M, G
下面我举个简单的小例子.我用的是Microsoft Visual Studio 2012,操作系统是Win 7.
- H: B4 _* V7 T: f6 C0 d4 x! G* I0 i首先创建一个C# com组件.实现的功能很简单,就是返回两数相加的和.; ]( C5 n, i0 {
- ~; z, u" h- O+ x* Z
: k2 ^; ~% \* U) F0 F/ E- b
1.新建一个C#项目 ,类型就选 类库 .取名 MEI_AddCom
; O3 E# r5 k% L( n
: K8 y* e& ~% e* U7 w2.在项目中添加一个接口,取名MEI_COM.C++调用com组件中所有的功能只能通过接口来调用,不能直接调用类或函数1 D7 g4 ?9 t6 R) @- j
9 Q: Z. T5 K0 |; g; s! Q
具体代码:
; S2 [+ p# f. t7 A/ V! s, _7 X( r
/ F/ g' D+ v# Gusing System.Runtime.InteropServices; //记得加这个命名空间
2 v4 ?7 x9 X: K5 D, O3 e, l
0 ~) f; h/ V" ?. v; pnamespace MEI_AddCom
+ E5 S6 k1 ~$ _0 c* {
9 z: n0 y: `( T: w9 z3 D{
+ u$ t6 d: t* d) {
4 I- g5 R% M" x7 h, a/ j+ C    [Guid("DA07B88D-29F0-41cf-B3D3-611010E6F3FF")] // guid的产生可以通过vs自带的工具.点菜单栏上的Tools ->Create GUID,然后选第4个选项.Registry Format.6 I- M8 R% `& |1 _, O) R
7 j8 G! [; ~* f  Y8 b0 ]$ H0 R& W0 k" }
          //点按钮New GUID,再点Copy.这样你就可以把产生的guid复制下来,然后粘贴到这个地方来.当然那个大括号得去掉.后面需要用到guid的地方也用这方式产生
* C% o; Q* L) {+ Z, `9 c. ^. k3 G! R8 ~# ?
    [ComVisible(true)]
4 |- r* u' J7 Y( q0 i) G% }; p, s9 e
    public interface MEI_COM        //记得用修饰符public# i! p; a' i; Q; K' v, p" x

8 B/ y2 V  n, ^1 a1 M& D    {
) k. m( K7 r. M  ?2 c$ w! k7 P/ L/ U$ b
        [DispId(1)]       //如果还要添加其他函数就继续来个[DispId(2)],[DispId(3)]加在函数前面
7 T# d/ `0 h4 I, V- \5 E+ F7 {5 P
        int Plus(int one, int two);
& s5 F& ^, D% U" B: {6 m8 G# u  Z: Y/ @/ Y4 P7 n
    }, d& I) D' \* |
# Q7 J5 H- e  h
}
  }- Y' D/ i9 P" x; J  K  p$ h6 p
# s  K) t4 v9 g

# Y0 `: |4 d6 d- J5 I" @3.添加一个类MEI_COM_T,继承接口MEI_COM,具体代码9 \( P" p) p2 ?

, J0 O! y1 E3 r8 P* E% [using System.Runtime.InteropServices;
% k9 `, A6 U- o0 W7 n0 k6 Q' E
! A/ W2 h7 f$ P- ?namespace MEI_AddCom* l) O# y' R$ c0 {- W  H- L
( _# L4 u; G- }! p( W
{! h% ?" }4 G% o

; t& h9 s$ q! i( F6 B    [Guid("04F4DC83-8883-4a03-BDBC-92D8630ECC1F")]! f$ @# b' ]: F+ K( W
$ V$ ^/ C: Z  U6 Z0 {/ h+ ~5 M
    [ClassInterface(ClassInterfaceType.None)]1 g$ s3 r+ o+ S- }; @+ y3 L( I$ S
3 @" V) v$ @2 o
    public class MEI_COM_T : MEI_COM, Z1 E/ |) N: I. _
0 ]+ z( Q+ D! Y$ U
    {% ?. R- _+ w$ z5 a: m6 ^6 J# x

" k+ q) S4 m: m6 h) z+ @7 W        public int Plus(int a, int b)2 t( m3 g) Q, D

" A7 j5 f* e5 I        {
- b0 _4 m# [$ [' E" h$ @
" b  P5 ], X) P% h8 b! y1 E            return a + b ;1 l+ u% B$ C$ X
& _/ \/ N9 j8 `
        }* A* F$ J, q1 z1 i; [
# v# C5 P9 I9 v2 h0 u
    }
  u# t4 ~# N" s
  X1 e) v( R( V}  |  a7 s) j! h" ]3 q# {3 i

+ t" E" q. B5 b) |3 d9 B. w! F+ m; n7 V  |* S" I
- {$ H. W2 ]6 d
4.把AssemblyInfo.cs中的[assembly:ComVisible(false)]改成[assembly: ComVisible(true)].5 h. y" I5 M8 L& }; ^; c) L& Z. w
1 U6 }& t3 d& }: n# |, b7 D
右击项目名打开属性窗口,在生成里,选中 为COM 互操作注册; k8 \# v9 p: i. k: m5 F2 C
- [& |8 a8 B# M) @/ u: r+ }
8 |" R: C7 _2 \9 r  H5 m9 V4 r! l
5. 生成->生成解决方案& M% R4 T! a$ t
   注意 这个时候 生成 非常缓慢
6 O7 y: M% V- c( N3 Z& U   直到 出现 成功 1 个,失败 0 个,为止才 操作一下面内容. A: ~8 @, o( i. m- |6 R
0 _6 [+ [" i- D: }1 `" X

6 [% a; X' Z$ m- j: C( M---------------------------7 U3 p! S7 g* H& B" b8 S

" d3 p) `* A; d. ?$ I1.调用前要先把com组件注册才行.
$ Z& X: F; k( Z3 O
3 ]9 N# @9 L' e$ p# F+ B% o使用C#创建并注册COM组件  C#不能直接创建COM组件,因为其生成的DLL属于程序集,但可通过“使程序集COM可见”选项来支持COM。
$ q6 R/ {5 b1 _- ^6 F' B以下说明如何通过C# 注册、注销COM组件。 & _8 e( b0 _: ^6 \

3 J' {, }: }! p& v  J为了能让生成的DLL能够进行COM注册,需要进行强名称签名
3 Z( n" v8 j) |5 W, G/ y打开COMLib项目属性,选择签名,勾选为程序集签名,通过下拉列表选择新建,弹出创建强名称密钥窗口,输入名称,不勾选使用密码保护密钥文件。5 ]; h6 ~7 b( P
创建完成后COMLib项目中将出现后缀为.snk的签名文件。
1 o) o' b  D: M) t% X  t1 z最后,编译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文件。
9 o3 a* P$ t  {卸载COM组件:  
/ M) j& d: C( M5 K+ h9 t与注册过程基本相同,只需将命令改为“RegAsm  /u  D:\ COMLib.dll  /tlb: COMLib.tlb  /codebase”。) n  b  e# W/ z0 E: u

( D! X! y8 P  U6 R: Y6 g8 V, I" _6 h( w& M
2.注册完了就可以在代码中用了,先新建一个C++程序, 类型选 Win32 Console控制台应用程序. V2 S4 E, f" v! E/ _

- d: _4 z" D" X$ o名字取MEI_UseCsharpCom,点完成6 @# K' p+ L3 n/ Z5 k6 c
8 o; v! R' v4 h' V# v' Y. R+ D) J
把MEI_AddCom.tlb文件拷贝到项目的任何目录下.我就放在D:\MEI_UseCsharpCom\MEI_UseCsharpCom.4 d/ l1 M; N9 d1 K, t9 s) P: ?% u

/ q- P( ~6 b! ?. A  Q% Z/ F我们会看到一个MEI_UseCsharpCom.cpp文件,双击打开把默认生成的代码全部删掉.敲入下面代码:: V$ H( [4 u4 v' l& a* {) {  S

$ ]6 n" p5 O) E
! v9 ]1 M; n- ]#include "stdafx.h"
9 c  O6 e% a! |+ h! d0 A#include <windows.h>) K7 \+ h, b7 y
#include <string.h>. ~+ Q" e' X, p! y5 K
! n* K/ a% L: \. |8 d+ E. D) Y, U
#import "MEI_AddCom.tlb" named_guids raw_interfaces_only* r8 F" G: A+ Q3 e% ^
; s* L2 }1 j: o% f. f
char* WcharToChar(const wchar_t* wp)  //wchar_t转char*
! I3 ~, U0 H! q3 n" m2 ?{  , W* |! g8 }: [6 b4 s' @
    char *m_char;- R" O( ?# }/ _# s: D* k
    int len= WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),NULL,0,NULL,NULL);  ( c! s$ s1 \+ u! [. m: ]
    m_char=new char[len+1];  % q( m4 [% s2 B" b3 X
    WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),m_char,len,NULL,NULL);  % P0 A7 v; N3 _" `2 e8 W2 h, b+ Z
    m_char[len]='\0';  $ X' i& q# q% u- ^9 Z9 \2 p
    return m_char;  ( s2 C" X: G, C4 q8 B+ ~
}    {& T- a, q- E. P; }5 v+ P3 v% N  x
wchar_t* CharToWchar(const char* c)   //char*转wchar_t2 N7 ~4 |" [+ ^# ]
{  
6 s4 r$ F$ ~+ w0 `   wchar_t *m_wchar;
; M& G4 s  k# Y    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  # y; U! P* M% h, [
    m_wchar=new wchar_t[len+1];  
: z# y* i7 U# p    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  ) A5 z7 `. G9 w
    m_wchar[len]='\0';  $ p8 y& D! Q1 f8 Y! h) h
    return m_wchar;  
" C1 B5 l+ E; s: s6 }/ _- ^}  % ~  p. z; Y6 X' W+ H
( |# g7 D$ ?, z/ t
void _tmain(int argc, _TCHAR* argv[])
" }# R8 P) d$ ?3 O
# _" ?% O# T4 o" M8 I, h{
% _1 f9 y0 o; |) i* U2 a7 j+ E) w7 U( ^1 E  H% x4 a" R$ D
    CoInitialize(NULL);
4 Q+ X7 c& y( |. i+ Z! r3 P. S' h) t- O7 o
        MEI_AddCom::MEI_COMPtr ptr;   //类似明志一个指向接口的指针6 X% \9 O8 C- p- ]

- M, c& y: w* _1 L$ y6 |        ptr.CreateInstance(MEI_AddCom::CLSID_MEI_COM_T);   //实例化一个类 CLSID_ 类名/ s  b# y& H; [: D  e$ ~* Q: g

) J! N- Q; V! |2 Y5 i1 h' @: C: D   //这个地方有一点点奇怪我也还没弄懂.在C#中的函数是int Plus(int,int).但类型在这里都转成long了.另外就是我们不能直接
. r/ F3 R; U4 g" z$ X+ @: a+ R: [, q& A7 d; H9 m
   //来个long a = ptr->Plus(1,2);这样得不到a = 3,反正会出错.1 A. }- k2 y4 Z! ?
   //这里函数Plus的参数变成三个了long Plus(long,long,long *).其中最后一个指针得两数相加的结果' M. r4 r- _1 N) v" e

$ y8 E% l/ b1 _0 T+ d( ~6 w   long a = 1;
0 b2 Q8 \4 O) _9 K# a+ M, \1 f: A5 T% B
   long * lPtr = &a;$ M8 ~) }( y: u4 h- f# ?

1 J5 }+ u6 H2 K    ptr->Plus(1,2,lPtr);! g; ~8 Z% v) R( x
1 G# l; c" d9 o. u
    char msg[132]="";
% l5 b; T2 [7 S$ Z$ q8 a' L    sprintf(msg, "%d",lPtr[0]);! X# C$ V7 u. |/ d( R# o! z9 T
8 n. L( p% b! Z! G- k3 z9 T
        LPCWSTR str=CharToWchar(msg);6 n5 k: c( E" x: h8 _' I; a

# u* n6 N# q, Z% D    MessageBox(NULL,str,_T("123"),MB_ICONWARNING);, @+ M" c, _+ {9 O0 b5 E) M% _# Z" ^

: t( Y" |/ K4 k; j/ {; L, `. w. Q/ E. A8 ~
}
( d- Q& `: U3 G& F" x) i8 g9 a/ c: ]
此时就可以正确运行了.得到结果33 B! L4 P3 Y' h0 s# j7 u2 Y
6 h5 \/ i- \' w$ Y0 X% k
如果没有正常运行,则必须把dll文件拷贝到有MEI_UseCsharpCom.exe这个文件的目录下.; Z9 ~) f6 ?" ]9 z4 c$ J

6 x0 E, L" d( e
9 `( a/ V. Y2 h/ T--------------------------------------------------------------# U3 o& [0 U  b8 h( e* R; b
C# Npoi库 操作excel 的代码网上很多
  C& [# p, |) U8 i( k4 P# R0 p. _/ K/ `; C
// ----------------------------------------------------------------------
* S% b" v) e  i! t// 使用Npoi创建一个简单的xls文件,写内容" c2 N1 r; y- T9 r4 u8 T7 S
( M! q: K$ `5 V9 `  Y
using System;
7 D( X$ u  j1 {8 q. j; ~# p, Lusing System.Collections.Generic;
5 \' S! {6 m" P4 {  _using System.Linq;) m9 i/ V; G, G9 f1 A, m, c$ _
using System.Text;0 y. k' s% E8 R% c8 B" X0 H6 [
using NPOI.SS.UserModel;
+ P2 W" t6 m9 R+ m' uusing NPOI.XSSF.UserModel;' e$ ], E8 b& I: g3 z; X1 y
using NPOI.HSSF.UserModel;; {" |4 b2 h# v2 k2 F( g$ a
using System.IO;
; a1 _* v/ S1 ]4 Ausing System.Data;
) _. @& _5 j/ b
0 [$ v$ [+ m, z//using System.Windows.Forms; - O7 p5 h8 e" J+ y6 C( L% j
0 c5 F( p6 h+ b4 m1 E4 f
namespace CC& r6 r- ]1 U: `4 R' B
{$ @2 j, e* h/ g8 q/ a' ~  u! ^* G
/ O5 Q( s. i0 P; H3 a/ G
    class Program: s+ C0 Z9 f+ w: T' c- p
    {
/ o: r  j4 J' b) C# @% h5 |% s/ d: _3 D) o

3 s- p! Z) V" h5 o% k+ v; n7 M        static void Main(string[] args)6 t% c. B* C; t; q" D) S8 ^
        {
6 j) A: _; W0 n4 b7 u; G            //创建工作薄! m; @6 X1 W3 S, h! ?4 q
            HSSFWorkbook wk = new HSSFWorkbook();
4 [7 Z8 j2 Y1 S* t- l- l/ P6 k            //创建一个名称为mySheet的表& N8 g: [( H' N2 v( }$ s
            ISheet tb = wk.CreateSheet("mySheet");6 S- D+ S$ r* R# r$ v; g! R9 ?- G
            //创建一行,此行为第二行
9 @) S% n3 @! z6 g8 t/ r7 `            IRow row = tb.CreateRow(1);* H7 ^- N; ~0 ?) a  a4 P% U
            for (int i = 0; i < 20; i++)
1 R' E+ R, L9 F: E( t# C            {
( i7 V9 t* c. i7 p                ICell cell = row.CreateCell(i);  //在第二行中创建单元格' k0 `% K4 P5 n* L2 C* f
                cell.SetCellValue(i);//循环往第二行的单元格中添加数据4 J( j6 y( `. _* V0 ^
            }8 u2 I0 ^, D* J9 m. m$ |
            using (FileStream fs = File.OpenWrite(@"c:/myxls.xls")) //打开一个xls文件,如果没有则自行创建,如果存在myxls.xls文件则在创建是不要打开该文件!
2 V9 N! E/ O1 i$ d# T  X3 g            {
/ R/ A+ q" o* n! t                wk.Write(fs);   //向打开的这个xls文件中写入mySheet表并保存。2 b4 X* P& Y( a! g
                // MessageBox.Show("提示:创建成功!");
8 b# x* y/ T2 ~& S            }
1 y5 {5 z' [' h- H$ e& }
: U- y! S) V9 i9 `: F7 q" \  ]1 F        }0 S- a! G0 t5 e9 R# W5 _% W+ N

/ g% V: d" t) h! V* b) }  t+ u
- V# Z' [% G: x0 E# ]- Z0 Y    }2 e( S) t+ H  p4 K7 X/ }

, @+ C$ |8 X1 l  N( V' R
2 K6 Y0 n, O6 I5 k
1 j+ z4 y" p, ^- }" `}# P3 l0 o$ ^9 G! P* r5 U& j
% P7 a( ^( ~( A* D8 i4 O) F* V& w
// ----------------------------------------------------------------------
9 U& Q' k3 D5 U// 使用Npoi读一个简单的xls文件: s& W. q7 ^. Y  S1 c' s0 B

* H( {. U1 W$ M: n. [using System;. [% _; f! H% u) l
using System.Collections.Generic;
+ t, N1 a7 ^- jusing System.Linq;
, g: C$ Q; n: V$ J: D8 Fusing System.Text;
$ \/ b/ a* k! T3 Dusing NPOI.SS.UserModel;
3 |7 t  K4 M: Y* M6 F) lusing NPOI.XSSF.UserModel;: E- q- w* E% D) `0 N- B* m
using NPOI.HSSF.UserModel;- a; X; }2 C' ]( F" |) D  U+ N3 ?
using System.IO;
; }% _" F( h/ X; b* Cusing System.Data;
! C4 {* g, T2 L  [$ L1 b4 m; Y$ y6 _4 Q8 @# Q) G0 k( I" H
namespace CC, w! s1 Y$ r. |/ ^/ _. @; t
{' Q- Y6 Y) J% c2 n) p5 |

+ e$ q+ J' f3 R$ u; T: D+ S    class Program% I9 X- j+ l8 v! B" P0 m
    {
2 W0 Q, h% s  _# y( O
3 V* I  s  q: _
0 g7 N  n/ o2 G! J3 _        static void Main(string[] args): r$ z, O( _/ Q! S6 J  j! C7 l, g' m- ?
        {* D. d; C, h1 ]9 ^
            StringBuilder sbr = new StringBuilder();
" ^/ p, @4 A' t& P) D: J) d# s8 c6 p            using (FileStream fs = File.OpenRead(@"c:/myxls.xls"))   //打开myxls.xls文件
7 [+ N6 S3 w8 h' c            {2 [; C. d& @; F: Q8 G$ x/ h- n
                HSSFWorkbook wk = new HSSFWorkbook(fs);   //把xls文件中的数据写入wk中  ?+ A% L/ C% i* m
                for (int i = 0; i < wk.NumberOfSheets; i++)  //NumberOfSheets是myxls.xls中总共的表数
  Q$ z4 z" ?1 x                {2 X( _$ Q" y; e. n3 u! f" k
                    ISheet sheet = wk.GetSheetAt(i);   //读取当前表数据/ U* T1 x) F! _* u- }; Q9 q+ Z
                    for (int j = 0; j <= sheet.LastRowNum; j++)  //LastRowNum 是当前表的总行数9 }! b. a& o# ]- f) ~& l
                    {, R3 a$ j1 X& a& d0 S
                        IRow row = sheet.GetRow(j);  //读取当前行数据& P) X3 Y- O! n
                        if (row != null)
+ x! u1 \" B0 s( h( ^                        {# W7 m  k; J9 v2 J: S# F
                            sbr.Append("-------------------------------------\r\n"); //读取行与行之间的提示界限0 T1 G% A0 H- s# R
                            for (int k = 0; k <= row.LastCellNum; k++)  //LastCellNum 是当前行的总列数3 j: q, h! H$ t
                            {
% d- {" K4 ~# v5 a0 Q                                ICell cell = row.GetCell(k);  //当前表格
+ W1 y. z' _3 U5 v1 e                                if (cell != null)
2 {/ ~+ R/ h5 g7 T) u3 w0 i1 N2 U                                {
3 R! E& h5 V4 V                                    sbr.Append(cell.ToString());   //获取表格中的数据并转换为字符串类型' @& G! s* ]+ M3 o: y, Z
                                }
0 M" \' t% K6 w% B, ^                            }
6 O' s; W3 C& E3 H& F$ _                        }6 l2 U$ L$ s! z- [
                    }9 l9 G" [6 z6 P% F
                }
, @( E9 ~. p* ]1 j            }" Q! ?* e9 j, N
            sbr.ToString();0 p9 H' `, o4 X) I
            using (StreamWriter wr = new StreamWriter(new FileStream(@"c:/myText.txt", FileMode.Append)))  //把读取xls文件的数据写入myText.txt文件中
+ o: D) C  O4 M7 `  `) l% ?            {
" }7 G3 M) v/ F4 l: c5 H- y* z                wr.Write(sbr.ToString());
  _7 u# d2 w# v, i6 O; J                wr.Flush();
/ x4 {8 M# m, A  [            }- C( ]1 i+ ^+ b" `* c; j: {  `2 l2 c
- V& V( m8 _3 r/ @

3 y& n, J" j$ l5 e! Z9 i        }
" r( b8 `! b0 e+ d5 \' W" z- `' k+ c  E, r, G: l! n0 U
4 h/ T: Y& u. V  T* ?  `$ e
    }
' ~3 s4 B$ y# Q. c
9 ]$ `( u- U. m& n. V: C2 E% A! _* e8 b  x  l- ?

4 w3 K+ M; L, P' C  i8 E. D3 H}
! p9 l% b4 U0 c& t& s% p
. F. w/ {! k3 `* j, j% _/ ~
$ c" |+ f$ z% N( @然后 自己封装 给 c++用4 e" P  A5 ^, Q+ k% q, `, |

  O6 q$ v( `5 I6 W  [
" A* o+ e+ ^2 y$ a1 K
( ~7 f* a: `, g  M7 \: C* t3 d" t! ~+ W# s% f0 K, ^+ o- E  a5 A
& T) t4 o  R) \1 E* d6 |% A
2 s: y0 R% Z. I$ t" \  E
3 ?6 h4 l( {! @1 h7 ]$ q' ]
8 M) h; Y" ]: J7 _

* `* E2 X# K2 z# G0 d
% `2 w3 H( E! M2 \! H5 w2 M  A+ {/ H! S

- s1 x' W. p% x% a; @" t3 w+ x+ N. \; q; c9 I! X# {. c1 i) m9 X

* {' p; l0 Y  Y& q; }; u$ n4 X+ G& c2 `. O) \

- M( e$ s! G! Z' c/ p% i. O/ |5 f( V5 t4 w

8 V% n# f$ g0 c2 y0 ^: _$ {6 O  p) e7 p7 }) S( p
- W- Z/ e! _4 `  I/ Y

4 A8 p; F- g- V- i5 G1 D0 E) m
$ F6 r) `! U; g/ i! @4 d0 u
4 Y/ T* I: J; X8 k0 t
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了