查看: 3553|回复: 1

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

[复制链接]

8

主题

10

回帖

146

积分

注册会员

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

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

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

×
C# 或 c++  不用安装操作 EXCEL的方法:c++ 对excel 的操作 非常不理想 要安装excel 而且读写速度也慢/ j: n5 v" c( n# O
net 有很多 免费的开源库 比如 Npoi库  (Npoi库 支持c#、vb.net 等语言): n# k+ N3 F5 R6 Q
这里我用c# 生成 com 组件 让 c++ 调
" b  J- b' N" m2 N4 ^( o
, w- ?  a& x0 J, o' d; i首先要学会 c++ 调 c# com组件的方法   (和com注册的方法)3 f( M. D- b+ w; `: X/ y" G
C++调用C#的COM组件(DLL)
6 j- `8 b. C( x' n) I
* |: g& n$ N' f! i$ z& K下面我举个简单的小例子.我用的是Microsoft Visual Studio 2012,操作系统是Win 7.
" ?  c8 P) R8 ^( g7 T首先创建一个C# com组件.实现的功能很简单,就是返回两数相加的和.
" o; Z: J- o  x/ c, k  m
- U7 i! `, o* S: A* Q( S- i
+ C" n) [1 z5 G" n. p' d, I9 [4 C4 ~1.新建一个C#项目 ,类型就选 类库 .取名 MEI_AddCom
3 e- |; f) D: f0 F2 s3 t' x' Q4 z! h. e6 ?/ U+ }
2.在项目中添加一个接口,取名MEI_COM.C++调用com组件中所有的功能只能通过接口来调用,不能直接调用类或函数1 u2 Y# [5 ^) G3 l8 A! P- L
7 D0 V7 k+ i! G5 m/ c
具体代码:, m! u2 @" V5 _9 F  y" a
* z+ T" n/ G- T' Z
using System.Runtime.InteropServices; //记得加这个命名空间
# _! E; ^# K" |9 i! Q
6 [& W3 G3 t" i" O3 u% V* Nnamespace MEI_AddCom
9 e7 W1 u& f6 A# S0 m. \
, s) p8 a: z, B# c- D1 ^& d! E$ X{9 H6 ~& u4 w; `5 Y9 P

$ o% ^$ i" O8 N( y2 s    [Guid("DA07B88D-29F0-41cf-B3D3-611010E6F3FF")] // guid的产生可以通过vs自带的工具.点菜单栏上的Tools ->Create GUID,然后选第4个选项.Registry Format.3 _/ p& v# W8 D; c

; u/ Q2 x$ y& ]% }/ P: h          //点按钮New GUID,再点Copy.这样你就可以把产生的guid复制下来,然后粘贴到这个地方来.当然那个大括号得去掉.后面需要用到guid的地方也用这方式产生+ ]# ?# S7 K: R3 r( [
  W5 H/ e/ {* Y( s3 }
    [ComVisible(true)]0 t' f( V/ q1 ]8 D4 o: W  Z
7 w" m! n5 i* g+ G2 n
    public interface MEI_COM        //记得用修饰符public. E& e) S' z5 }5 F% p

' _- d1 i+ h) o* i% P$ |    {
3 Q! b  K! z' p( ]  z! x6 e1 l2 o/ }1 V
        [DispId(1)]       //如果还要添加其他函数就继续来个[DispId(2)],[DispId(3)]加在函数前面
& c" A- E) C6 n% F. m. O) v
& M+ w( Z! u$ I: Z( n        int Plus(int one, int two);# a; q0 g+ p& R9 n" R6 q  z  F
( H# y! O2 ]. U3 }, k
    }
$ m9 y, |! M' a2 F5 P% |3 {* X2 @+ A" j0 n; r6 Q5 q1 O" G
}
, Q* w, T" k; M/ L5 o& K# V( G; V% B  M$ K* N( \( y  r+ f+ J
3 a6 s- B1 I; ^: ?8 [, H# s" o1 H

3 W' q. s/ x# Q0 K- W2 ^3.添加一个类MEI_COM_T,继承接口MEI_COM,具体代码
8 t# {' o+ V# l1 h; Q& Y+ i2 d  n7 G# R4 M4 W" ~9 A" i+ m( n
using System.Runtime.InteropServices;  `* E* I% ~" l: B- \

) F& t1 Y0 }6 G/ Wnamespace MEI_AddCom: A. m& r; h. X  Y) M; R' `
( N! _5 a* g6 G
{
! z) k6 M9 k0 L" M- V
% x9 W/ |, R: t. G& D4 I/ N    [Guid("04F4DC83-8883-4a03-BDBC-92D8630ECC1F")]; d. T' i# v+ |

( Z( e- o  W" L7 G! p    [ClassInterface(ClassInterfaceType.None)]
* F6 q" j1 W3 o- F9 e3 t. H) |% q2 r: @7 m2 X  x4 R
    public class MEI_COM_T : MEI_COM
7 v  M$ G6 c5 |& I9 x$ H
% l6 o7 x$ o' S, @    {
7 G1 U# C& h) A
* p8 j; V) t& X% p        public int Plus(int a, int b)
& ?9 A  I! c  n* f$ u; z: @$ V- l1 A2 }' M4 b9 U
        {
  V4 O" y% Y' o' Y! k! \. o8 ~) ~# S- o$ K2 M% k$ t' |: L( t
            return a + b ;! J$ j8 f- G% \/ d6 B+ I

- x5 f1 a. |; E7 t( G        }* @& d0 n% Q3 `! x3 I; Y- P9 f
5 q; L" @; H. G  ?# w
    }
  z$ {" o9 y/ H  ^/ M
% d5 S: X; b5 e3 g. V}1 w8 G& I9 O7 ]
. u' ~" p3 M2 i/ l/ d
% p: h& |/ L2 @0 V7 \( ^' z: V+ W( B
; Q' A9 }2 n# `! p% e' @* f. r
4.把AssemblyInfo.cs中的[assembly:ComVisible(false)]改成[assembly: ComVisible(true)].) Q. ~; ~7 B2 C3 [. Y

# k: z7 T  w) g/ y5 y6 Q4 g右击项目名打开属性窗口,在生成里,选中 为COM 互操作注册
( o2 Y: U3 e$ [1 Z4 O6 y. F
- c0 l1 L  A! s+ B# `; g2 d4 G* P* p" D& v  U) ]+ A
5. 生成->生成解决方案
7 E$ k& ^5 Q( O  R3 G   注意 这个时候 生成 非常缓慢 2 E/ K2 F0 |" T
   直到 出现 成功 1 个,失败 0 个,为止才 操作一下面内容6 w  K* p/ _2 U* t8 M7 @9 Y7 t
9 L: z: n/ J' q
+ G' K9 w# P, _3 u& B1 Q3 O# W3 U# E7 @
---------------------------1 B( E0 v4 a, F3 o. g0 L2 @

6 N2 x7 Q5 B9 G' X7 t" x; C1.调用前要先把com组件注册才行.
2 O2 c- p; V6 l) z
1 O" |: J3 z* R. t使用C#创建并注册COM组件  C#不能直接创建COM组件,因为其生成的DLL属于程序集,但可通过“使程序集COM可见”选项来支持COM。% ?1 l' K' o. K* s2 d
以下说明如何通过C# 注册、注销COM组件。 - n+ ?( S+ d6 ^  A: s* f3 I

2 w  @$ w4 w: Y5 H8 U/ P& n为了能让生成的DLL能够进行COM注册,需要进行强名称签名
, l$ p  M5 h, I/ {4 ^  i打开COMLib项目属性,选择签名,勾选为程序集签名,通过下拉列表选择新建,弹出创建强名称密钥窗口,输入名称,不勾选使用密码保护密钥文件。
- v$ L: U3 E" I) u5 z# M创建完成后COMLib项目中将出现后缀为.snk的签名文件。0 M& C0 D+ e* D. b
最后,编译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文件。4 G; v6 f" E* ?0 e" r/ \6 @9 r
卸载COM组件:  3 ]; }/ r; k4 s+ e
与注册过程基本相同,只需将命令改为“RegAsm  /u  D:\ COMLib.dll  /tlb: COMLib.tlb  /codebase”。2 w$ P  b! S9 [9 Q8 K

% m! P( _$ O. Z. P; C1 M  J* `+ f- X: u# ~6 ^6 V4 W- _
2.注册完了就可以在代码中用了,先新建一个C++程序, 类型选 Win32 Console控制台应用程序
7 H1 N. P6 i: b/ u3 y  K. y% X/ U) ^3 Q: N2 |! t/ Y1 G! ]
名字取MEI_UseCsharpCom,点完成- z/ D8 e) {  P. ], v0 \8 p
+ e2 U/ s  A$ ^
把MEI_AddCom.tlb文件拷贝到项目的任何目录下.我就放在D:\MEI_UseCsharpCom\MEI_UseCsharpCom.
( H& F) o! S  |! K" y1 o4 ]
0 Q7 c/ Q4 F$ D. r0 z( e0 e! V8 J我们会看到一个MEI_UseCsharpCom.cpp文件,双击打开把默认生成的代码全部删掉.敲入下面代码:! Y( O! R# [& T& k$ }' }5 R1 V

5 {1 Y# M# y+ h1 L6 s) x
: ]2 n' Q+ K' z3 O* r8 v1 H#include "stdafx.h"0 H' h3 |6 k5 `# k4 J8 j
#include <windows.h>
/ n1 l' v# I& ]& P6 W) z: J" Q#include <string.h>
4 X4 w5 T! h" @& H1 F3 X: p! W4 v0 S  ~$ W+ ~* f
#import "MEI_AddCom.tlb" named_guids raw_interfaces_only
- ~) w4 ]7 A, n% A3 `6 h( q* s6 T5 r
char* WcharToChar(const wchar_t* wp)  //wchar_t转char*
+ u! Z, e* `* Q8 h9 v; M/ b& A{  
& e- y* v  O* K# S4 b    char *m_char;
: j7 Y; O6 u# O# Z6 ~6 L+ m    int len= WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),NULL,0,NULL,NULL);  8 V5 h# S& O% K( S3 v
    m_char=new char[len+1];  
! R2 T, X; k- f    WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),m_char,len,NULL,NULL);  
7 V, k5 G/ E& W: }    m_char[len]='\0';  
. q) ^# A6 D& Z! W- P8 W    return m_char;  
+ g( }# g; R. |1 `( k}  : L) z. f( q4 [( ^: g5 q  S
wchar_t* CharToWchar(const char* c)   //char*转wchar_t
! _9 `: C" H7 ~" @{  
: K. [. x& R9 N2 l9 @   wchar_t *m_wchar;
- J- }" R0 _$ H+ g    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
8 Q5 d# q% [* f6 C6 m$ H- v    m_wchar=new wchar_t[len+1];  0 ^. u! F1 C# L( T( j- I
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);    E, c* S" U* p  S; d5 e% ~
    m_wchar[len]='\0';  0 \$ o3 F0 K9 o+ o( a
    return m_wchar;  ) s( e( g4 s9 X; j, l
}  ) q+ V' d% p1 y6 i9 C: O

: G/ D  r( [! G+ Z1 [! b3 Jvoid _tmain(int argc, _TCHAR* argv[])
& g! j2 ?+ |- s9 Y$ D" ~9 _5 z2 Y4 [, {! z! C' L2 f" X& p: N# i' x5 J
{7 e7 K& L$ P' w. H2 X

) D! |3 L  e+ ~( g$ F' d    CoInitialize(NULL);
: `9 M9 |8 e8 _5 r( y6 L/ l6 M6 g4 @4 r$ y( M2 }$ L# G/ I
        MEI_AddCom::MEI_COMPtr ptr;   //类似明志一个指向接口的指针
( \& y- s* V/ w
, p4 s$ q6 |9 ^6 g) a        ptr.CreateInstance(MEI_AddCom::CLSID_MEI_COM_T);   //实例化一个类 CLSID_ 类名( K, A$ \6 J& R; e

( Q2 U) v" D" w/ f' Q   //这个地方有一点点奇怪我也还没弄懂.在C#中的函数是int Plus(int,int).但类型在这里都转成long了.另外就是我们不能直接, C+ x9 v# y8 _( O8 `  Z3 K

! n: k# B, g3 ?7 S) L4 ~( V) N, {   //来个long a = ptr->Plus(1,2);这样得不到a = 3,反正会出错.2 B0 E8 E* s1 l. D& N
   //这里函数Plus的参数变成三个了long Plus(long,long,long *).其中最后一个指针得两数相加的结果
* o* ^+ D/ j$ m' t, h% i: \9 s/ J  c. o3 B. b! L" f1 [! g
   long a = 1;0 U2 x- h7 u( l6 T! {

! Y* n, Q! ~3 a# t. L' T4 I   long * lPtr = &a;
: U4 H7 b0 O- C- o: i6 E9 s. B& a9 b0 [
    ptr->Plus(1,2,lPtr);
, B# Y  Z' d8 i9 y9 X# _* E. i# C2 q! k* _! b/ }
    char msg[132]="";- Q8 v9 F% p' f( W# H
    sprintf(msg, "%d",lPtr[0]);$ H3 q2 j" m7 R& M; J6 Q. ]4 G

6 Z0 n5 H3 Y( C% V; v8 T' @. H9 L        LPCWSTR str=CharToWchar(msg);+ J8 @; f5 L( w  y. C2 M8 ^
+ Z# W, Q* N0 o
    MessageBox(NULL,str,_T("123"),MB_ICONWARNING);
0 p. f) Z* w4 [7 k% O+ U
1 d( u2 O6 h5 H: a0 U8 M5 w. d) f6 k: N0 [2 c, q7 m
}* P2 h) c  c7 q- Y( q3 X
4 `8 y& ]0 r9 l, [+ ~  ]( a2 E' D
此时就可以正确运行了.得到结果3! P3 h5 i0 T8 B2 U0 `
* ^) `+ g3 w1 h; U" X
如果没有正常运行,则必须把dll文件拷贝到有MEI_UseCsharpCom.exe这个文件的目录下.7 w* h+ @; d; K( r
; R8 s% k# A, w! t4 w
5 b# F, Y$ z2 O% W/ q
--------------------------------------------------------------
2 L9 j; c; a: iC# Npoi库 操作excel 的代码网上很多
& ^! N, J( a- S, y5 r7 u+ \7 e- {7 J$ |/ S5 o* I7 I
// ----------------------------------------------------------------------
5 c2 w" D) W' W9 m  [- w// 使用Npoi创建一个简单的xls文件,写内容
: p, T  g5 Y. H" @# }9 ]1 p8 w' E0 a5 _8 ?( Q1 e
using System;
1 i( ~( c% N+ iusing System.Collections.Generic;* s0 r2 L) a: o* R8 s5 c# ?& {; Q
using System.Linq;
& ]* d2 Z/ C- v3 Vusing System.Text;
8 f1 a  p! q: C: s3 Xusing NPOI.SS.UserModel;
3 X, ~/ A, l! g+ }, G1 Xusing NPOI.XSSF.UserModel;
: K# E3 n* ]' R- [9 y$ ]# eusing NPOI.HSSF.UserModel;3 }: T8 A! s6 j# {9 l: l, p& {
using System.IO;$ x) p- I$ O! P& l6 T9 }
using System.Data;; @; i, `- I" M# r" X

  M: q/ X  ~7 {. B) M2 X/ D//using System.Windows.Forms; 3 O. O9 @5 \: F* Q5 l8 [& y3 O
* e4 W8 X. f  f6 B  e
namespace CC, ]& q" Q, ^/ [$ x& Q
{
" q- Y# b6 ~, J6 W6 s& m% _0 j
  Q9 q3 I: U) q8 _    class Program
6 r8 b/ Z4 {9 f$ @" v: _. S5 X: Z7 h    {
1 D( i: w; o9 C7 m$ _$ ^, c2 L- A+ \# D3 D  _: c; }

+ l4 t3 _1 T+ S4 ~! V3 M9 V        static void Main(string[] args)
, d5 m8 k' B% N0 I        {
% f. ]2 w1 B  V4 H" ^3 b            //创建工作薄$ g5 c' K) x' _- Y6 O
            HSSFWorkbook wk = new HSSFWorkbook();
9 F" t9 ~( \3 S, Z1 [. L            //创建一个名称为mySheet的表( p. `0 X, t3 t  q* E
            ISheet tb = wk.CreateSheet("mySheet");
( S7 g# E6 P3 p% p            //创建一行,此行为第二行
4 v5 B: z7 p% {            IRow row = tb.CreateRow(1);, d' B7 L. ]6 f# ]. n
            for (int i = 0; i < 20; i++), C* j; i4 t* t1 o6 _
            {& O! Y! ?5 s# \+ n. R
                ICell cell = row.CreateCell(i);  //在第二行中创建单元格
0 H4 j2 w. }+ P' f! ?; }                cell.SetCellValue(i);//循环往第二行的单元格中添加数据0 Z  @9 g2 O4 s+ e6 A8 v
            }$ y* Y1 |' X: v. Q" t! F+ p
            using (FileStream fs = File.OpenWrite(@"c:/myxls.xls")) //打开一个xls文件,如果没有则自行创建,如果存在myxls.xls文件则在创建是不要打开该文件!
, s7 r% v% y0 K, ], K            {8 ~( Y: ]' H9 U. S* d" v
                wk.Write(fs);   //向打开的这个xls文件中写入mySheet表并保存。
: d8 u: g! ]7 x# _6 c                // MessageBox.Show("提示:创建成功!");( Y' s" i9 w6 L" p
            }
7 k# r# ?" v. R6 h( t, |+ J) o& h4 E, K+ N: L5 o
        }% m+ D; k, V% K: I) R; b  O
- D+ T$ I; ]& s/ F* D' w

# k9 e; V" f: x: j    }% L' Y$ o5 c( Q! E$ B8 k

* J( M3 o, H* n$ W9 o: x- u$ H
- L: u6 H) k3 o5 |* s' Z( P
, A+ V6 H4 N' ?8 t) w}. v: d0 \+ B* N/ j" v

/ i  K9 e( I* D4 |- z4 L- ]2 _// ----------------------------------------------------------------------
+ w) ?/ f. h( Q2 g, o// 使用Npoi读一个简单的xls文件$ H, o8 d7 u$ s( N

/ E1 z/ [2 T% D" B8 g8 |  k/ husing System;/ ~  c6 i+ {& D. F0 ?: z
using System.Collections.Generic;; ?" ?3 e) C5 R/ M6 J8 U
using System.Linq;
' d5 C7 J' D0 X; ]! r/ rusing System.Text;& ~+ }! V& n. G" G5 U8 j
using NPOI.SS.UserModel;
% {% n0 y% X4 c6 Xusing NPOI.XSSF.UserModel;9 }% r9 T  O' ?: G8 H8 W
using NPOI.HSSF.UserModel;- g) U2 z0 L) s
using System.IO;
2 f. }) p. }3 W, @using System.Data;
8 W! b; Y- c* d
7 u/ {% o* ?% o9 o$ E0 H0 f8 R! Lnamespace CC& L& m" S' d& |9 O
{
7 ]- z. u- g7 T# P7 w5 m
' g& A; ^# n$ {9 u& ~6 X    class Program
% Q! D9 J6 o& T4 k4 O    {! |$ r$ V: d; N5 }- G8 \
5 ~1 k0 L  i$ A. U0 L% n

- N$ L/ X$ o7 M: _& C$ d        static void Main(string[] args)
! F4 |& x- |5 E+ Z        {3 Q0 z; z0 ]2 W0 \! A
            StringBuilder sbr = new StringBuilder();0 I5 Q# h% d7 |9 S& }( a
            using (FileStream fs = File.OpenRead(@"c:/myxls.xls"))   //打开myxls.xls文件
- V) n! @( d, d5 _/ B            {. r: @6 f6 F" v' e: t( N0 U
                HSSFWorkbook wk = new HSSFWorkbook(fs);   //把xls文件中的数据写入wk中( S0 S/ b( D( A; w6 r
                for (int i = 0; i < wk.NumberOfSheets; i++)  //NumberOfSheets是myxls.xls中总共的表数8 q; y& u* A: M1 p6 [. m- g; I
                {% \1 x9 E" H+ W1 e! Y
                    ISheet sheet = wk.GetSheetAt(i);   //读取当前表数据: M& O% R' @3 s: }
                    for (int j = 0; j <= sheet.LastRowNum; j++)  //LastRowNum 是当前表的总行数9 L/ x: a) ^' c% p9 X
                    {
) X) T9 t1 e7 W, e, D0 e                        IRow row = sheet.GetRow(j);  //读取当前行数据, w7 Q2 `  D8 g* n0 z5 j6 I4 p
                        if (row != null)) f5 C' V# J$ ^0 |; ]
                        {
6 Q! O5 w) r* {& |: G% p$ A! L2 O9 B                            sbr.Append("-------------------------------------\r\n"); //读取行与行之间的提示界限) {) q6 r. c. F- ^* @6 A* F
                            for (int k = 0; k <= row.LastCellNum; k++)  //LastCellNum 是当前行的总列数' f/ O+ M  r3 F& s3 E7 Z/ M
                            {
3 M# _/ H3 i  m& ~2 J' s                                ICell cell = row.GetCell(k);  //当前表格
; B8 b6 d, w' [- t( Q% J8 ]+ M* {                                if (cell != null)
2 e0 E7 h, q' {" t                                {
$ j" l8 ]- [; n: x                                    sbr.Append(cell.ToString());   //获取表格中的数据并转换为字符串类型
% Q% [* p! K* d4 ?5 Z% a                                }
( r& B$ ?  t8 Z# S, h! B; z                            }
1 W% L) o, |( h2 c. w- c                        }$ Y2 }1 E  U- K; |4 k
                    }
1 w- ~  q7 R  c" y: o  {                }
) G/ x9 [( m' R, \3 m            }
3 j7 Y5 C: d; V$ v  J9 @, m2 }* u. a            sbr.ToString();$ d4 B* e/ {6 i. N. Z/ {
            using (StreamWriter wr = new StreamWriter(new FileStream(@"c:/myText.txt", FileMode.Append)))  //把读取xls文件的数据写入myText.txt文件中
0 N* Q. T8 A' k: \9 X" H5 [3 B            {
( I1 y' b3 n, P/ M1 U; c/ R                wr.Write(sbr.ToString());4 h! c/ A, E3 C0 ]& q5 \& k
                wr.Flush();
. H' A( W8 q& q" H3 G            }. n+ t4 A; D. i
6 r6 E( |1 N: f/ _9 o' O
1 X; i0 ~# ]# s3 y2 v) w
        }# V) Q6 `, p6 u7 W) j
  @8 ^8 T1 A+ S9 }* L7 n* q, L% u
( j( k+ X8 q1 g, J
    }
) h6 {" t# \+ D! T9 f/ ]5 O% z+ |

) e# u6 h/ A- q% d) ]" z! w
0 z- Y% _5 X* d* X# L1 x}
& I! I0 G- e" F+ j) U5 }4 i
! A% R8 n  z: u) K- x( H, k* U- \$ h1 O! i9 K, _
然后 自己封装 给 c++用) H9 Z# \8 l2 ~

! J# z4 E# ?* }6 O4 d  M% l; i7 b+ w2 ?' H. e

" w( Q$ C, `6 K: B: t3 C
5 W0 s1 h! Y) G0 x4 j* u& _
$ s7 g. N8 p" I! w8 \" N  ^1 x* S
8 T( [! r4 z4 t7 k% p9 l% _- d. `* \8 j! Y2 E" w4 ?

1 v  |9 }  f( s0 p; h- s+ q: V! x* X; b7 O* u+ q

. v; t% m) g9 a/ H0 x- K& s& C  N% g, B; A2 D* Z  S$ }

+ P. h( O1 [; b3 S
& N6 `5 ]; l/ u( Z1 R" m

4 x% i2 ?, W) f! w+ H5 |
/ x3 Z& m# s5 A- E5 A& w: |8 ?
5 N; @/ C7 G! q7 u7 u
* ^8 C  F8 q+ k- @
( Q+ s4 I% l* ?! T" U8 E
/ k, w4 Z# e% w1 T& x2 d

, [+ ~2 Y' J  h8 Y
* O+ {: A, L/ U3 C1 s. B

$ W! w( Z  ], y% v$ ~) c$ ]; a% r. A! p; L
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

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
回复 支持 反对

使用道具 举报

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

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部