使用C#通过调用minitab的COM库自动化生成报表

本文介绍通过C#调用minitab com组建自动化生成报表的方法。

首先需要在minitab中通过手动配置的方式生成报表来得到该报表的命令行,过程如下

  1. 选择菜单“编辑器”-》“启用命令”启用命令窗口

  2. 在工作表中输入数据,并按需求配置并生成需要的报表

  3. 拷贝出会话窗口中生成该报表的命令行

得到所需的mimitab命令后就可以在C#中通过调用minitab执行该命令得到对应的报表了,过程如下

  1. 新建C#工程,并把名为Mtb 17.0 Type Library的COM库加入到该工程的引用

  2. 执行以下代码,即可根据输入的数据生成对应的报表
  3. static void Main(string[] args)
    {
        try
        {
            foreach (Process proc in Process.GetProcessesByName("Mtb"))
            {
                proc.Kill();
            }
        }
        catch (Exception ex)
        {
    
        }
    
        Mtb.Application MtbApp = new Mtb.Application();
        MtbApp.UserInterface.Visible = true;
        Console.WriteLine("Status = " + MtbApp.Status);
        Console.WriteLine("LastError = " + MtbApp.LastError);
        Console.WriteLine("Application Path = " + MtbApp.AppPath);
        Console.WriteLine("Window Handle = " + MtbApp.Handle);
    
        Mtb.Project MtbProj = MtbApp.ActiveProject;
        /*
        Mtb.Columns MtbColumns = MtbProj.ActiveWorksheet.Columns;
        Mtb.Column MtbColumn1 = MtbColumns.Add(null,null,1);
        MtbColumn1.Name = "缺陷项";
        String[] data1 = {"虚焊","漏焊","强度不够","外观受损","其他"};
        MtbColumn1.SetData(data1);
    
        Mtb.Column MtbColumn2 = MtbColumns.Add(null, null, 1);
        MtbColumn2.Name = "数量";
        Double[] data2 = { 500, 300, 200, 150, 160};
        MtbColumn2.SetData(data2);
        */
    
        Mtb.Columns MtbColumns = MtbProj.ActiveWorksheet.Columns;
        Mtb.Column MtbColumn1 = MtbColumns.Add(null, null, 1);
        Double[] data1 = { 1808, 1796.3, 1799, 1800.8, 1800.5, 1803.6, 1794.5, 1796.9, 1802.1, 1796.5, 1795.5, 1812.8, 1795.8, 1805.6, 1798.6, 1799.6, 1803.7, 1800.9, 1799.4, 1808.6, 1800.3, 1804, 1804.4, 1798.8, 1802.1, 1810.1, 1797, 1809.4, 1793.3, 1803.6, 1801, 1797.5, 1797.8, 1796.4, 1796.1, 1793.9, 1809.7, 1795.3, 1798.9, 1796.6, 1793.6, 1794.4, 1798.5, 1806.2, 1807, 1805.4, 1806.9, 1800.7, 1799.5, 1802.3, 1791.8, 1795.5, 1798.5, 1801.1, 1794.2, 1799.4, 1792.5, 1803.7, 1805.1, 1808.9, 1795.6, 1806.3, 1799.5, 1798.9, 1799.6, 1795.8, 1799.9, 1795.1, 1806.4, 1809.6, 1808, 1796.1, 1797.1, 1793.1, 1802.6, 1800, 1796.5, 1799.3, 1798.6, 1808, 1803.2, 1810.2, 1793.9, 1798.6, 1808, 1797, 1793.2, 1801.6, 1803.4, 1801.5, 1794.5, 1801.2, 1807.3, 1796.3, 1801.7, 1797.5, 1794.5, 1797.7, 1798.5, 1794.2, 1797.2, 1800.4, 1794.9, 1797.5, 1797.1, 1796.3, 1796.8, 1805.7, 1798.7, 1796.7, 1799, 1793.3, 1798.4, 1809.6, 1793.2, 1791.8, 1796.8, 1797.1, 1800.7, 1797.3, 1799.5, 1807, 1802.7, 1800.9, 1790, 1805.9, 1802.6, 1800.8, 1795.9, 1801.9, 1807.8, 1798.4, 1795.6, 1789.7, 1801.9, 1797.9, 1799.5, 1805.8, 1804.8, 1795.7, 1797.4, 1801.8, 1788.5, 1802.3, 1800.3, 1798.3, 1802.6, 1794.8, 1799, 1794.5, 1800.2, 1799.8, 1798, 1797.7, 1804.7, 1800.9, 1799.5, 1797, 1796.4, 1801.5, 1801.4, 1801.8, 1813.7, 1796.4, 1805.4, 1797.6, 1805, 1792.6, 1809.8, 1799.8, 1804.8, 1798.9, 1801.4, 1798.1, 1802.4, 1803.7, 1796.9, 1808.8, 1798.9, 1795.8, 1803.8, 1796.2, 1797.2, 1797.5, 1803.2, 1803, 1805.4, 1796.7, 1795.1, 1796, 1794.5, 1801.7, 1803.5, 1806.5, 1799, 1793.6, 1812.2, 1809.6, 1801.2, 1802.2, 1802.4, 1796.5, 1812.8, 1795.2, 1793.1, 1804, 1799.9, 1797, 1799.3, 1801.6, 1798.1, 1794.8, 1801.5, 1810, 1799.2, 1798.5, 1795.7, 1792.9, 1801.8, 1803.4, 1798.9, 1801.5, 1804, 1802.3, 1797.1, 1795.7, 1797.8, 1801.3, 1796.6, 1800.4, 1798, 1803.4, 1805.7, 1800.6, 1801.4, 1801.8, 1798.7, 1805.9, 1794.8, 1800.6, 1795.7, 1811.2, 1798.3, 1792.4, 1801.8, 1805.6, 1806.9, 1798.4, 1797.9, 1795.4, 1801.2, 1800, 1801, 1793, 1797.4, 1805.6, 1793.9, 1794.9, 1797, 1795.3, 1801.7, 1799.7, 1805.1, 1799.5, 1796.9, 1797.9, 1795.7, 1794.4, 1796.4, 1797.1, 1798.4, 1804.3, 1800.2, 1799.1, 1792, 1811.3, 1802, 1798.8, 1804.9, 1792.8, 1792.4, 1791.4, 1794.7, 1796.6, 1793.8, 1799.2, 1794.7, 1799.9, 1790.1, 1795.1, 1799.6, 1795.7, 1796.5, 1800.1, 1801.6, 1797.2, 1790.5, 1799, 1794.3, 1803.5, 1794.1, 1794.5, 1800, 1801.8 };
        MtbColumn1.SetData(data1);
    
        MtbProj.ExecuteCommand("Capa C1 304;  Lspec 1764;  Uspec 1836;  Pooled;  AMR;  UnBiased;  OBiased;  Toler 6;  Within;  Percent;  Title \"Measure DUT key resistance: 1.01: L=1764 H=1836 (Ohm)\";  CStat.");
    
        Mtb.Graph MtbGraph = MtbProj.Commands.Item(1).Outputs.Item(1).Graph;
    
        MtbGraph.SaveAs("C:\\MyGraph" + DateTime.Now.ToString("yyyy-MM-dd HHmmss"), true, Mtb.MtbGraphFileTypes.GFPNGHighColor);
    
        MtbApp.Quit();
    
    }
时间: 2024-10-13 01:23:45

使用C#通过调用minitab的COM库自动化生成报表的相关文章

malloc,colloc,realloc内存分配,动态库,静态库的生成与调用

 1.在main方法里面直接定义一个非常大的数组的时候,可能会出现栈溢出:错误代码演示: #include<stdio.h> #include<stdlib.h> void main() { int a[1024 * 1024]; int num = 100; system("pause"); } 错误截图: 2.在定义数组的时候要定义数组的长度,否则会出现错误.(特例:在GCC编译器下,不会出现错误(因为标准不一样)). 3.打印并且赋值的是: for (

C#调用C/C++动态库 封送结构体,结构体数组

因为公司一直都是做C++开发的,因客户需要要提供C#版本接口,研究了一下C#,发现其强大简洁, 在跨语言调用方面封装的很彻底,提供了强大的API与之交互.这点比JNA方便多了. Java与C#都只能调用C格式导出动态库,因为C数据类型比较单一,容易映射. 两者都是在本地端提供一套与之映射的C#/java描述接口,通过底层处理这种映射关系达到调用的目的. 一. 结构体的传递 Cpp代码   #define JNAAPI extern "C" __declspec(dllexport) /

makefile编写---.a静态库的生成和调用

#.SUFFIXES: .c .o Cc =gcc #OSA=/data/users/osa IncDir=-I. -I./ Debug = -g Cflags = -c $(DEBUG) Libs = -lpthread Lib_Dir=./#/data/users/osa/api/ #PKIOBJ=PKITool.o kdmd5.o Lib=alg.aPkiObj=alg.o .c.o: $(Cc) $(Cflags) $(IncDir) $*.c all: PKITool #clean P

[Lua]Lua调用C/C++函数/库(函数压栈方式)

test.cpp文件 /*Lua调用C/C++函数/库(函数压栈方式)*/ #include<iostream> using namespace std; #include<lua.hpp> /* 当我们需要在Lua里面调用C/C++函数时,所有的函数都必须满足以下函数签名: typedef int (*lua_CFunction) (lua_State *L);换句话说,所有的函数必须接收一个lua_State作为参数,同时返回一个整数值.因为这个函数使用Lua栈作为参数,所以它

[Lua]Lua调用C/C++函数/库(动态链接方式)

新建DLL空的win32工程,新建test.cpp文件,内容如下 /*Lua调用C/C++函数/库(动态链接方式)*/ #include<iostream> using namespace std; #include<lua.hpp> static int math_abs(lua_State *L) { lua_pushnumber(L, abs((int)luaL_checknumber(L, 1))); return 1; } static int math_cos(lua_

C# 调用其他的动态库开发应注意的问题

1.背景 程序开发语言可以说是五花八门,这就引出了一个新问题 ,不同语言开发的系统进行对接时相关调用的问题. 下面我主要说一下我自己在做接口开发时遇到的问题及解决方法仅供参考,我使用的C#开发进行对接其他程序. 2.具体做法 首先,谈一下目前系统对接的几种常见对接方式.a.通过非托管的动态库dll文件导入.b.通过对方提供的COM组件调用.c.通过webService进行调用. 目前比较常用的就这个几种.下面一起看看都是如何具体调用实现以及遇到的问题. a.通过非托管的动态库dll文件导入 此种

Android NDK开发及调用标准linux动态库.so文件

源:Android NDK开发及调用标准linux动态库.so文件 预备知识及环境搭建 1.NDK(native development Kit)原生开发工具包,用来快速开发C.C++动态库,并能自动将so文件和java应用一起打包成apk.对应:jni层c++开发 2.Cygwin:是windows平台上模拟Linux运行环境的工具,即window平台上的linux环境工具,so文件需要在linux平台上编译运行.对应:arm linux平台 3.CDT:eclipse下的C/C++开发工具,

C#调用非托管动态库中的函数方法

C#如何调用一个非托管动态库中的函数呢,比如用VC6写的动态库,总之C#调用动态库的过程是比Java调用DLL动态库方便快捷多了,下面举例说明这个过程. 1.创建一个非托管动态库 代码如下: 代码如下: //这一句是声明动态库输出一个可供外不调用的函数原型. extern   "C"  __declspec(dllexport)  int  add( int ,  int ); int  add( int  a, int  b) { //实现这个函数returna+b; } 除声明外,

2017-2018-2 20155228 《信息安全系统设计原理》 动态库的生成和调用

2017-2018-2 20155228 <信息安全系统设计原理> 动态库的生成和调用 不得不说一下关于环境的问题 只要我打一个响指,一半的安装在win7上的VC6.0都会因为兼容性问题直接崩掉 懒得研究怎么解决兼容性的问题了,直接开一个winXP虚拟机完美运行vc6.0,省时省心,岂不美哉 研究大佬的博客的时候 Windows下静态库与动态库的创建与使用 尝试使用.def文件生成动态库并使用隐式链接到工程时,发现这个方法仅适用于动态库所在的工程和调用动态库的工程同时处于一个工作空间 如图所示