PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

8

主题

10

回帖

146

积分

注册会员

积分
146
QQ
发表于 2016-12-11 14:57:16 | 显示全部楼层 |阅读模式

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

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

x
C# 或 c++  不用安装操作 EXCEL的方法:c++ 对excel 的操作 非常不理想 要安装excel 而且读写速度也慢
8 B, r' m7 G# {6 H4 enet 有很多 免费的开源库 比如 Npoi库  (Npoi库 支持c#、vb.net 等语言)
( p6 }6 w. H, p3 A5 V这里我用c# 生成 com 组件 让 c++ 调
1 \! g8 K9 p* ^3 W' e9 T8 }4 M' ?! W8 s. ]9 s2 ?
首先要学会 c++ 调 c# com组件的方法   (和com注册的方法)% s  d! J# e0 i- i* _
C++调用C#的COM组件(DLL)( O0 e& ~7 y9 V6 q/ C  r; X
+ T, N: s1 l+ I) M. m' S7 E; T
下面我举个简单的小例子.我用的是Microsoft Visual Studio 2012,操作系统是Win 7.% P- e2 R: G1 Y: W
首先创建一个C# com组件.实现的功能很简单,就是返回两数相加的和.
! g8 t7 K5 z& k7 Y" O$ Y) s3 b4 k9 _7 T; B
& B( ]0 a  X3 P+ ]* F
1.新建一个C#项目 ,类型就选 类库 .取名 MEI_AddCom2 x' @. ^' J, ~$ A' T
4 t9 W9 O: V% x
2.在项目中添加一个接口,取名MEI_COM.C++调用com组件中所有的功能只能通过接口来调用,不能直接调用类或函数
, u0 \0 d. G; S
) S# i/ u; ^' U/ M& z9 s具体代码:
! u' ~8 F2 e( U2 u
+ z+ z# V' R( ?using System.Runtime.InteropServices; //记得加这个命名空间
7 N! \. Y9 R2 y5 b; ^# X/ |; b4 p, m' |
namespace MEI_AddCom
& c- a6 _4 W' i: D' ^
( f2 Y* ~+ O7 |2 k: N2 _3 C+ s{. d9 K- \. ?: M- a3 a& F

; c1 \0 l8 X2 l2 W$ O" _    [Guid("DA07B88D-29F0-41cf-B3D3-611010E6F3FF")] // guid的产生可以通过vs自带的工具.点菜单栏上的Tools ->Create GUID,然后选第4个选项.Registry Format.$ u( S2 U: p" r! f/ v

! R. _0 n1 M, T8 g4 P/ V          //点按钮New GUID,再点Copy.这样你就可以把产生的guid复制下来,然后粘贴到这个地方来.当然那个大括号得去掉.后面需要用到guid的地方也用这方式产生: [- C& s8 x1 b" E6 ]1 `

+ M+ W( Z+ t- p4 G: P3 q- Q    [ComVisible(true)]. a: p2 k% {4 ^. ~+ c

1 i" j7 N+ @8 a    public interface MEI_COM        //记得用修饰符public
$ C- k8 r0 G! i+ m9 U5 Z( j5 e7 T' S; P# D. b/ P
    {( R6 K0 o8 A( z( ]8 D$ p
( U% Y! A# H9 o$ [4 r
        [DispId(1)]       //如果还要添加其他函数就继续来个[DispId(2)],[DispId(3)]加在函数前面! d8 q; }2 h  H0 L1 I5 x
9 p% _( L7 U1 W+ S) `
        int Plus(int one, int two);
0 e1 C+ s& r) ?9 R1 t. O" C) [9 }3 a& U& D! i! Y- }
    }
5 M( b# r7 F7 s' O' R# h
  s  Z( e. e- Q2 R& l& c0 }}- b# \' a( ?/ `; q' K( D& R# [/ C

2 p: Z* Q! w- s2 X
; K' q* i3 T  [$ S. ?  `( F; X7 V
0 i0 v- {, T# }" Q0 y: k0 o3.添加一个类MEI_COM_T,继承接口MEI_COM,具体代码6 Y  o4 C; w) E/ |* m; {
2 {( G. R6 y' {
using System.Runtime.InteropServices;+ a  L$ _' c+ {' J! ?8 \

8 g; q2 i1 i5 g! b' J9 T& b5 @namespace MEI_AddCom
# K+ O+ B; W3 _2 t) l0 V6 e- o( q1 ^7 `( L
{3 @; R0 [; A4 r+ Z9 d  `

* _3 w: `; N" |% W- k1 u    [Guid("04F4DC83-8883-4a03-BDBC-92D8630ECC1F")]/ x5 g7 d5 G; h9 `/ ~! S) G+ ~+ h" R

0 o, b: f% B( {: d    [ClassInterface(ClassInterfaceType.None)]
7 ?2 d( ^7 ^6 a0 e9 w" X$ r8 ~6 l
    public class MEI_COM_T : MEI_COM6 o: d$ I) H) ~2 j% D4 h

8 w7 x1 [' q4 W' v2 Q0 V/ z    {
+ C, a4 R5 [" j. ^. G4 p- _% }$ B
        public int Plus(int a, int b)
# e  l1 H& |$ O" D8 p6 W7 k, @' k( s3 \8 ~0 d; y4 f5 w
        {4 u' x: {3 W6 \0 M. f
7 e4 H. f8 ^8 p
            return a + b ;: M: x/ @/ B* p4 q
5 c9 Z# `! [( I. B* ?; g+ v
        }
8 A! e+ |/ ^: S6 o& T) v, f" `1 v" M3 d2 w5 J
    }7 U9 y, _6 [% w1 U
% P* S9 n/ L! x6 z/ z6 T7 p5 q- G2 n1 I
}8 n+ K, s( u# B  j1 {  X

$ ?4 h5 s3 D1 |" M9 _
5 ?+ Y4 |8 `  a* B
# E3 q% R4 ^* F3 e  `" g4.把AssemblyInfo.cs中的[assembly:ComVisible(false)]改成[assembly: ComVisible(true)].7 d, Y4 e. D- j+ h1 ~
$ B2 M" Q5 t0 ?0 k( A5 H6 o* {
右击项目名打开属性窗口,在生成里,选中 为COM 互操作注册
1 @, X" |) N5 U* W2 q' T$ e: v4 _& ^( H: H" p4 ~( p$ V& b9 }* C

- h% ~2 j: M0 w+ G& S5. 生成->生成解决方案
5 ^  o- A+ o% M* d5 y" o   注意 这个时候 生成 非常缓慢 ! k* {  o- c; A( h1 ?. n/ z" N
   直到 出现 成功 1 个,失败 0 个,为止才 操作一下面内容
3 G  Q) b1 y) q2 o8 x, {
. z0 m' O6 q3 W2 b5 c' d
) v: I6 E. D: E( T5 p1 q# ^  [6 ^---------------------------
$ B1 Q# w0 m( |$ T* ~: ~+ B
) W, [8 n5 j6 W1.调用前要先把com组件注册才行.% j) J$ {7 t( j

) d3 O6 Q" _% O3 j; `4 c+ p  f使用C#创建并注册COM组件  C#不能直接创建COM组件,因为其生成的DLL属于程序集,但可通过“使程序集COM可见”选项来支持COM。4 v5 ^$ |8 L; I
以下说明如何通过C# 注册、注销COM组件。 ' D2 U4 y; Z' o# s: a% ~
8 P6 l- l4 L! `! N7 j7 T) p
为了能让生成的DLL能够进行COM注册,需要进行强名称签名
/ R$ h0 c& y3 G- a# X0 {打开COMLib项目属性,选择签名,勾选为程序集签名,通过下拉列表选择新建,弹出创建强名称密钥窗口,输入名称,不勾选使用密码保护密钥文件。
) E: J9 w  \; ]7 p- k创建完成后COMLib项目中将出现后缀为.snk的签名文件。6 P; \' I7 i7 G1 S
最后,编译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文件。
$ s7 h$ ~1 a4 \3 q卸载COM组件:  
4 b- h$ @' [4 d- M0 p' u8 Z$ l与注册过程基本相同,只需将命令改为“RegAsm  /u  D:\ COMLib.dll  /tlb: COMLib.tlb  /codebase”。6 I9 C# k+ r! e. ]

6 y3 u, p. d$ J2 I0 e/ b% ^4 y& W5 }! }# I5 D
2.注册完了就可以在代码中用了,先新建一个C++程序, 类型选 Win32 Console控制台应用程序1 a: T7 X, ?  |# t
- K& D( y) w1 o  s0 {" ?
名字取MEI_UseCsharpCom,点完成# {1 @2 g/ c; O  R8 J+ J: q

6 E" v. u3 a" g把MEI_AddCom.tlb文件拷贝到项目的任何目录下.我就放在D:\MEI_UseCsharpCom\MEI_UseCsharpCom.; o7 F+ A) m+ S8 V! t& b

2 ~7 o6 x$ y$ C7 S! f& L8 ?我们会看到一个MEI_UseCsharpCom.cpp文件,双击打开把默认生成的代码全部删掉.敲入下面代码:
' t, ^# y8 ~1 P8 Y9 Z( R& N* \1 H
) s" j- s2 M, `9 x( v) u# m# h# s& p+ L2 H' J3 ]. w
#include "stdafx.h") Y2 y  |/ m3 n% c
#include <windows.h>
/ Q& R7 T' \8 l6 s2 h3 C* T2 J" F#include <string.h>, ^8 I9 z% y& W8 v, o7 y
7 C  b( i6 H7 H1 N9 N1 h0 l! ]
#import "MEI_AddCom.tlb" named_guids raw_interfaces_only
5 \' e- S. [6 O2 A% H4 P* P7 D. w: e* j; B4 Y
char* WcharToChar(const wchar_t* wp)  //wchar_t转char*
/ r4 _% ^+ O3 q( `; S9 A! ^{  
8 H8 Q: _" _  {8 {& G9 H/ j    char *m_char;2 S) k$ z/ l8 @8 N& N5 B. m
    int len= WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),NULL,0,NULL,NULL);  
7 J; X9 d4 n: ^    m_char=new char[len+1];  # t) J' c9 m; X  W" V4 r
    WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),m_char,len,NULL,NULL);  / J7 D8 U9 v# a+ I7 h( w# n8 z: G
    m_char[len]='\0';  - ]* R3 d7 u* r  B& P
    return m_char;    `) O1 W% b0 M. j# z" l- e# i% X
}  
7 F5 b; V* e" n3 ]% _/ Uwchar_t* CharToWchar(const char* c)   //char*转wchar_t
: J( z3 `5 V8 d# r{  ! F  e, ]9 [8 [
   wchar_t *m_wchar;# D; r& C4 U- `6 j# B
    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
0 ^' x; _. W4 `- p& B1 D    m_wchar=new wchar_t[len+1];  ) v, o3 ?, `2 W* x+ g, I! f
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  / Q( m0 `1 c$ i4 a# u) \
    m_wchar[len]='\0';  
; |$ l8 @' h; b* C    return m_wchar;  
7 y+ @& q2 V6 l9 `, h9 n( I}  ) g; y1 n2 ^9 }
3 n+ [! z  J3 r: q( d" m7 k, u# Z1 ]
void _tmain(int argc, _TCHAR* argv[])" ]) M. a8 C; f9 v3 o

- t3 D, s; j. d* ?4 I2 I' |, G{
8 R4 W" a: E+ z( X% ^3 T5 b6 [# Z& s# }$ y2 y6 q. P  s, i. i
    CoInitialize(NULL);
0 h9 a% A0 S/ M6 P
& `3 j2 v! q; A: R$ B% I        MEI_AddCom::MEI_COMPtr ptr;   //类似明志一个指向接口的指针
: S" P/ Q3 c% c4 O3 w5 ]3 H2 i: B( l5 l2 B) ]8 O# H. D! S" a
        ptr.CreateInstance(MEI_AddCom::CLSID_MEI_COM_T);   //实例化一个类 CLSID_ 类名+ O- |  n8 ?0 N6 |
" l# Q$ B9 h9 S+ z& w
   //这个地方有一点点奇怪我也还没弄懂.在C#中的函数是int Plus(int,int).但类型在这里都转成long了.另外就是我们不能直接+ n# F* b9 T6 n% \8 i4 v6 o
6 B/ ]9 z1 E# a' [7 |* v5 G7 W
   //来个long a = ptr->Plus(1,2);这样得不到a = 3,反正会出错.
* g' V" i% L, a   //这里函数Plus的参数变成三个了long Plus(long,long,long *).其中最后一个指针得两数相加的结果$ r. ?4 i. J( H% M4 C) q- p  y
5 x( G( b" b( @: B
   long a = 1;/ J) Q; F! A: s5 Y( [

! G- j" F$ M/ h/ d5 V6 m. h   long * lPtr = &a;
/ \# F* E1 R5 m0 M# A  X; ]
, ?6 Q4 F! ?+ K( l) x7 K    ptr->Plus(1,2,lPtr);- P# t' N& M- P+ s. T# g2 ^
$ ^& U" K, Y+ M) h2 Y
    char msg[132]="";4 [: }: C8 d# E0 m2 ]
    sprintf(msg, "%d",lPtr[0]);
" Y) w( g+ a/ c8 v* I, x# P9 g: L- }5 t' R9 V  l1 P
        LPCWSTR str=CharToWchar(msg);
7 d8 |0 r! r, [7 h5 ?
5 \1 g' M& s" `5 z3 E! K    MessageBox(NULL,str,_T("123"),MB_ICONWARNING);& I& O$ ?) v8 R3 Z5 _  `

0 A& y, }* S7 ?" Y) q1 A5 {
6 ^4 @# A9 L. Q* i: Q8 k7 _}. Z3 u& q, u, \: b, q

: O6 o5 M$ g& M1 Y' k5 P: N2 Z此时就可以正确运行了.得到结果34 o" S! C; g! a2 C2 [: a
' ^+ q" v: W! }* E8 ]' f+ j' k
如果没有正常运行,则必须把dll文件拷贝到有MEI_UseCsharpCom.exe这个文件的目录下.4 V. j: n  J& ?  E( x: |1 {; |
, K$ E9 M' ?/ _. x* D- ^0 y

! }" T3 y, {% J+ y8 Y--------------------------------------------------------------9 ^0 Q/ G5 m1 e8 }7 w0 {- \0 ~
C# Npoi库 操作excel 的代码网上很多
$ {4 `/ U' Q) A  {) t% L  d
$ n/ C) A- W. R5 c! v3 o// ----------------------------------------------------------------------
4 U# ?7 q  U; w  J7 K& ?// 使用Npoi创建一个简单的xls文件,写内容
7 b* M  N: m" S4 C. ~2 F% ~, o' }8 |! `2 J
using System;
; v' A2 v. u$ D9 S& gusing System.Collections.Generic;6 ]" G" N. \7 {3 `
using System.Linq;6 c  C2 F% a9 z2 V0 [
using System.Text;. U( t, C2 C# n0 ?! _
using NPOI.SS.UserModel;
. U+ `4 Z/ J2 qusing NPOI.XSSF.UserModel;- Y4 D* p& A% M1 N& @' ~
using NPOI.HSSF.UserModel;
2 u$ E; K/ q' j# |; h. i2 Dusing System.IO;
; Q6 @5 `# U5 a) |8 `using System.Data;
! \# Q: [$ |& J  f
5 ^- L( E3 o  R+ t( g3 x, J) t//using System.Windows.Forms;
4 a9 `2 S4 S8 f
1 m- h" p3 s! H. S6 E# |namespace CC
6 k' @" V% I& s2 I) D' c{
$ N( n, n  g9 w
  o1 _, e: N; ^8 |  W    class Program
( n2 z* ^" h5 ]( w9 G) S+ u    {
, C' M& Z  ]0 Z( r) q3 Q
# ?: V7 a4 t: g
/ `: f( ?/ ]+ \; S        static void Main(string[] args)
6 q2 R7 o2 M9 J% p' T: T( e! Y        {2 o4 v2 I6 R: T
            //创建工作薄
" D* X/ X  s- m: m            HSSFWorkbook wk = new HSSFWorkbook();% R+ r- S5 Q  ^5 \
            //创建一个名称为mySheet的表
" s/ a. _; e4 Y            ISheet tb = wk.CreateSheet("mySheet");/ J7 ^) H' l% k9 f' `0 D
            //创建一行,此行为第二行: K' R" f) @3 M
            IRow row = tb.CreateRow(1);
, H/ J: E3 |7 B4 J' C            for (int i = 0; i < 20; i++)
% n4 X6 o& f. ^            {
. |5 Y% u: `. P0 \& v+ C+ }% b! A                ICell cell = row.CreateCell(i);  //在第二行中创建单元格0 s, t$ w" d1 a! e. O9 o. l
                cell.SetCellValue(i);//循环往第二行的单元格中添加数据/ ^) r$ y7 I9 n
            }
" `5 |* [2 }: T# S3 R8 f            using (FileStream fs = File.OpenWrite(@"c:/myxls.xls")) //打开一个xls文件,如果没有则自行创建,如果存在myxls.xls文件则在创建是不要打开该文件!
( p  \3 P9 x8 Y+ [9 X2 ~( M6 f0 B            {" r/ t) F8 j; N. C
                wk.Write(fs);   //向打开的这个xls文件中写入mySheet表并保存。1 E- r' A; I, |! V. U4 m' {- R
                // MessageBox.Show("提示:创建成功!");/ A  O* x1 S1 l9 O+ r& U
            }
# r" A3 U1 C% O  H1 [! Q0 u' a
1 K2 z2 ]9 {/ T1 w1 l- x% |        }
7 R; o& \; c( P  `0 q
% }* O3 z- X3 J3 s8 R
6 D% p0 k9 n. f9 l    }+ A5 p- D% X9 G6 \2 @, |
) n. l) O2 M, A$ _; a

9 j! c5 z! e  H4 \' x# |- j, S7 n% {( O
}( X/ H1 x, U6 U( @: n/ J7 ?

, S. @  p* M* O& q; G4 G# `; c// ----------------------------------------------------------------------
5 v2 A4 e2 E! }! h8 R// 使用Npoi读一个简单的xls文件' p$ Y0 s. H/ y  @; ]  y7 Y
3 P  O7 e' G3 o
using System;
  E5 P& ]! F- D. x' x, Husing System.Collections.Generic;/ Y0 [( a2 }( \5 f" y) C
using System.Linq;
& _2 K) Z1 ]8 n$ v7 M5 x- ~9 Y4 rusing System.Text;
- s* U: h3 B. V- Xusing NPOI.SS.UserModel;, g5 d1 b7 ~: ?. C* q
using NPOI.XSSF.UserModel;
# Q5 P6 D  P+ husing NPOI.HSSF.UserModel;
' n4 ?+ J* l; Xusing System.IO;
. S" F. q* R( O: ?0 iusing System.Data;
. n+ \+ t5 K1 A' U
% P5 [5 k7 Q0 F+ c" X. enamespace CC
' t- j% z9 _$ x. n4 p" R+ [8 |{: w: j0 p. U. I) ~
' K6 f# j+ M0 H* `5 S- a
    class Program3 L0 Q) k. s% _
    {
& Y) K. C4 ^! N# Z! X1 h7 i" \+ Q% j- X3 s
' \' n( P  C$ }
        static void Main(string[] args)
7 S3 p; d# S1 P2 D$ W+ q7 U- h        {; C; j+ x/ z6 f5 `
            StringBuilder sbr = new StringBuilder();
9 z$ H6 L7 \& E            using (FileStream fs = File.OpenRead(@"c:/myxls.xls"))   //打开myxls.xls文件
. Z0 p, O2 |9 v+ H/ y3 T            {
1 y' r# u! p6 z' A                HSSFWorkbook wk = new HSSFWorkbook(fs);   //把xls文件中的数据写入wk中% b# w( i: A" v+ a4 U  i
                for (int i = 0; i < wk.NumberOfSheets; i++)  //NumberOfSheets是myxls.xls中总共的表数9 Q* _" b; g, z1 O) a! h9 r, }! F; P
                {
& Q+ Z$ \+ r( J                    ISheet sheet = wk.GetSheetAt(i);   //读取当前表数据
- L1 m# E" `2 j$ I; e# z2 k% ]                    for (int j = 0; j <= sheet.LastRowNum; j++)  //LastRowNum 是当前表的总行数
, X! ]! B9 k4 r6 e- @- m- e                    {/ X( z( f3 A6 O1 ]
                        IRow row = sheet.GetRow(j);  //读取当前行数据
2 e* x  h# [6 f% z; m5 c                        if (row != null)! g6 \: k$ W- a% l" L/ [6 ]9 ~& U
                        {, C4 i' s9 [) V! \; {
                            sbr.Append("-------------------------------------\r\n"); //读取行与行之间的提示界限
. W1 v! g& D/ ]4 C9 j' l+ H                            for (int k = 0; k <= row.LastCellNum; k++)  //LastCellNum 是当前行的总列数( u9 ?( T6 D8 Z# g% D: z' w
                            {5 s7 ?: `! S, u/ k1 r6 z
                                ICell cell = row.GetCell(k);  //当前表格/ ^( e7 ^) m, V' [3 R! d; B0 h
                                if (cell != null)
' b0 e( \, Z2 e                                {7 N2 L/ M  c& P! u; P: l
                                    sbr.Append(cell.ToString());   //获取表格中的数据并转换为字符串类型( O# K1 J% t! Q: w" E. G
                                }6 _3 h1 K1 X3 y
                            }
6 S2 P4 X) f* c( a7 q% S# Z% `                        }
' ~! D3 `: ^7 l8 a                    }% ?; ~2 G3 K7 m5 e
                }% n" X- l, b: R: s/ W& R# m
            }; ^$ E2 G$ @" W; l+ m- \
            sbr.ToString();% y1 F: B$ E5 e  }1 o' f5 s
            using (StreamWriter wr = new StreamWriter(new FileStream(@"c:/myText.txt", FileMode.Append)))  //把读取xls文件的数据写入myText.txt文件中5 k; N+ |9 Y) ?  _
            {
. x; B/ _. f7 e2 n& r& T" K( U                wr.Write(sbr.ToString());
: z/ n/ N+ M3 M. L7 v4 ~7 F  G                wr.Flush();
% O7 C# `8 }* p4 n9 L/ |4 r+ v! Z            }
! D# u/ }9 V/ _/ V$ V
  i/ t( {3 B: b; \, a* L0 C
. d% A8 W. W, i0 I        }2 G# U! a+ ?: l( ~+ W
: V# Y5 S' A1 t8 q  p
9 m) h9 P- Z+ o. L3 V# K& h. W
    }3 E& B6 t4 S6 S& u0 x

5 b* l& Y- h9 e2 T
5 K" g" ]) }4 S8 D5 b5 |) |2 F# P2 P* j+ ^& m4 |
}
5 F' O' e  |! {0 Z3 S3 C, |! H' \- Z  U0 c

7 t/ q$ |& {7 I/ l% {, ~8 U然后 自己封装 给 c++用; l. e8 [& W/ a

3 D  Q% u- Z$ R$ C5 m- w5 ]& ~: P3 ]+ k+ \: [0 n

0 m0 G5 b7 K( j; ?0 E! H: a; U, J. z9 |
5 v4 @, ]3 T  m3 J0 j8 m3 W0 n! j. p* J8 S3 P; T  y
7 [8 X, ?" A$ r$ M/ t9 r
! Z, ]8 Q3 Q. W  E3 s
1 U( ]( v/ x2 s. n

- I; u  Z7 Q  v: w4 T0 |. k  \$ l" H, x7 V
6 g5 Z3 ~$ ?5 G; ?; Y- c2 Z+ y. S) ?

6 Q6 W0 L& G$ d# d, z" X
8 O# ~( h$ z4 n; C# z) [. a
% }: Y7 C) H2 B6 F  k$ q
: P0 u1 f* u0 }

/ D5 ?7 h$ m/ ]2 q# A: Y& h+ E) x) U! W1 i4 {4 @
8 _7 h9 m2 e; D1 |( G: t) Y
% a1 U0 X/ R- b0 n; k2 s
5 i8 i8 L5 Q5 ^* o2 [

0 ~1 L5 m; t, a' N1 {% L6 r7 n
% h# |8 O& L/ E* W5 w- M& E/ o) [/ p8 j) v1 Y9 e" Y7 p4 Z
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

全部回复1

2

主题

13

回帖

163

积分

注册会员

积分
163
发表于 2017-3-6 19:21:55 | 显示全部楼层
梅大师,就是叼!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了