LabwindowsCVI Excel操作说明及事例

       在工控测试领域,经常需要操作excel,用于保存测试的数据及测试结果。本章将介绍LabwindowsCVI对Excel操作的支持。LabwindowsCVI 对excel的支持是基于 windows的excel库,简单点说就是对windows的excel库进行了一层封装,这样我们就能更好的操作excel了。下面将介绍操作Excel的常用API:

  1. ExcelRpt_ApplicationNew

ExcelRpt_ApplicationNew用于启动excel程序,其函数原型如下所示:

HRESULT CVIFUNC ExcelRpt_ApplicationNew (int makeVisible, CAObjHandle *applicationHandle);

       其中makeVisible为加载的excel程序是否显示的标志,当其值为1时,显示excel程序界面,如下图所示,applicationHandle为获取的excel程序句柄。

  1. ExcelRpt_WorkbookOpen

ExcelRpt_WorkbookOpen用于打开excel的文件,其函数原型如下所示:

HRESULT CVIFUNC ExcelRpt_WorkbookOpen (CAObjHandle applicationHandle, const char *fileName,CAObjHandle *workbookHandle);

       其中applicationHandle为excel程序的句柄,fileName为要打开的excel文件路径,workbookHandle为获取的excel文件句柄。当程序执行成功后,excel程序将显示excel文件内容,如下所示:

3、ExcelRpt_GetWorksheetFromIndex

ExcelRpt_GetWorksheetFromIndex为获取excel文件中某个sheet句柄,其函数原型如下所示:

HRESULT CVIFUNC ExcelRpt_GetWorksheetFromIndex (CAObjHandle workbookHandle, int Index,CAObjHandle *worksheetHandle);

       其中workbookHandle为excel文件的句柄,Index为excel文件中sheet的索引,其索引值从1开始,worksheetHandle为获得的sheet句柄。

 

4、ExcelRpt_GetCellValue

ExcelRpt_GetCellValue为获取sheet中某cell的内容,其函数原型如下所示:

HRESULT CVIFUNC ExcelRpt_GetCellValue (CAObjHandle worksheetHandle, const char *cellRange,enum ExREnum_ExDataType dataType, void *dataValue);

       其中worksheetHandle为sheet句柄,cellRange为cell的索引,dataType为数据类型,通常情况下,该值设置为CAVT_CSTRING,这样我们可以读取各种数据,然后进行转换,dataValue为读取的数据指针。

 

 

5、ExcelRpt_SetCellValue

ExcelRpt_SetCellValue用于设置sheet中某cell内容,其函数原型如下所示:

HRESULT ExcelRpt_SetCellValue (CAObjHandle worksheetHandle, char cellRange[], enum ExREnum_ExDataType dataType, ...);

       其中worksheetHandle为sheet句柄,cellRange为cell的索引,dataType为数据类型。

 

 

6、ExcelRpt_SetCellRangeAttribute

ExcelRpt_SetCellRangeAttribute为设置cell的属性值,其函数原型如下所示:

HRESULT CVIFUNC_C ExcelRpt_SetCellRangeAttribute (CAObjHandle worksheetHandle, const char* cellRange,int attribute, ...);

       其中worksheetHandle为sheet句柄,cellRange为cell的索引,attribute为属性的名称,…为属性的值。在测试中,我们经常使用该函数用于设置cell的背景颜色,用于直观感受是否测试通过。

 

 

7、ExcelRpt_WorkbookClose

ExcelRpt_WorkbookClose用于关闭打开的excel文件,其函数原型如下所示:

HRESULT CVIFUNC ExcelRpt_WorkbookClose (CAObjHandle workbookHandle, int saveChanges);

       其中workbookHandle为excel打开文件的句柄,saveChanges为关闭时,是否保存excel文件的标志,通常我们设置该值为1,否则测试的数据将保存不了。

 

8、ExcelRpt_ApplicationQuit

ExcelRpt_ApplicationQuit用于关闭打开的excel程序,其函数原型如下所示:

HRESULT CVIFUNC ExcelRpt_ApplicationQuit (CAObjHandle applicationHandle);

       其中applicationHandle为打开的excel程序实例句柄。

 

9、ExcelRpt_GetErrorInfo

ExcelRpt_GetErrorInfo用于得到操作excel异常原因,其函数原型如下所示:

ERRORINFO * CVIFUNC ExcelRpt_GetErrorInfo(void);

       该函数返回ERRORINFO的指针,我们可以观察ERRORINFO-> description的异常描述。

10、CA_DiscardObjHandle

CA_DiscardObjHandle用于释放objHandle对象,其函数原型如下所示:

HRESULT CVIFUNC CA_DiscardObjHandle(CAObjHandle objHandle);

 

项目实践:

       新建一个LabwindowsCVI工程,然后往工程添加Excel库文件,如下图所示:

       这些库文件可以在LabwindowsCVI安装路径下找到,其路径为:D:\Program Files (x86)\National Instruments\CVI2013\toolslib\activex\excel。

 

本工程excel测试代码如下所示:

#include <cvirte.h>            

#include <userint.h>

#include "ExcelTest.h"

#include "excel2000.h"

#include "excelreport.h"

#include <ansi_c.h>

 

static CAObjHandle applicationHandle = 0;

static CAObjHandle workbookHandle = 0;

static CAObjHandle worksheetHandle = 0;

ERRORINFO *pExcelErrorInfo;

char excelStringValue[256];

 

void ExcelTest(void)

{

       HRESULT error;

       if(applicationHandle == 0)

       {

              error = ExcelRpt_ApplicationNew(1, &applicationHandle);

              if (error<0)

              {

                     pExcelErrorInfo = ExcelRpt_GetErrorInfo();

                     printf("ExcelRpt_ApplicationNew error: %s\r\n",pExcelErrorInfo->description);

              }

       }

       if(workbookHandle == 0)

       {

              error = ExcelRpt_WorkbookOpen(applicationHandle,"D:\\lujinming\\个人资料\\Labwindows编程\\LabwindowsCVI_Excel\\ExcelTest.xlsx",&workbookHandle);

              if(error < 0)

              {

                     pExcelErrorInfo = ExcelRpt_GetErrorInfo();

                     printf("ExcelRpt_WorkbookOpen error: %s\r\n",pExcelErrorInfo->description);

              }

       }

       if(worksheetHandle == 0)

       {

              error = ExcelRpt_GetWorksheetFromIndex(workbookHandle,1,&worksheetHandle);

              if(error < 0)

              {

                     pExcelErrorInfo = ExcelRpt_GetErrorInfo();

                     printf("ExcelRpt_GetWorksheetFromIndex error: %s\r\n",pExcelErrorInfo->description);

              }

       }

      

       ExcelRpt_SetCellValue(worksheetHandle,"A1",CAVT_CSTRING,"Pass");

       ExcelRpt_GetCellValue(worksheetHandle,"A1",CAVT_CSTRING,excelStringValue);

       printf("A1=%s\r\n",excelStringValue);

      

       ExcelRpt_SetCellValue(worksheetHandle,"A2",CAVT_CSTRING,"Fail");

       ExcelRpt_SetCellRangeAttribute(worksheetHandle,"A2",ER_CR_ATTR_BGCOLOR,0xFF0000);

      

 

       if (worksheetHandle)

              CA_DiscardObjHandle(worksheetHandle);

      

       if (workbookHandle)

       {

              ExcelRpt_WorkbookClose(workbookHandle, 1);

              CA_DiscardObjHandle(workbookHandle);

       }

       if (applicationHandle)

       {

              ExcelRpt_ApplicationQuit(applicationHandle);

              CA_DiscardObjHandle(applicationHandle);

       }

}

 

static int panelHandle;

int main (int argc, char *argv[])

{

       if (InitCVIRTE (0, argv, 0) == 0)

              return -1;       /* out of memory */

       if ((panelHandle = LoadPanel (0, "ExcelTest.uir", PANEL)) < 0)

              return -1;

       DisplayPanel (panelHandle);

      

       ExcelTest();

      

       RunUserInterface ();

       DiscardPanel (panelHandle);

       return 0;

}

 

int CVICALLBACK Quit (int panel, int control, int event,

                                     void *callbackData, int eventData1, int eventData2)

{

       switch (event)

       {

              case EVENT_COMMIT:

                     QuitUserInterface (0);

                     break;

       }

       return 0;

}

执行效果如下所示:

 

 

 

  • 10
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: LabWindows/CVI是一种基于C语言的图形化编程环境,用于开发和测试各种实时测量和控制系统。它提供了丰富的函数库和工具包,可帮助工程师和科学家轻松创建高效的数据采集和分析应用程序。 LabWindows/CVI教程提供了从入门到高级的学习资源,可以帮助用户快速上手并深入理解LabWindows/CVI编程。教程通常包括以下内容: 1. 环境设置和安装介绍:教程会指导用户如何正确安装和设置LabWindows/CVI开发环境,包括安装软件、配置编译器和连接设备等。 2. 基本概念和语法:教程会对LabWindows/CVI的基本概念和语法进行介绍,如变量、函数、循环、条件语句等。通过实例演示,用户可以快速掌握基本的编程技巧。 3. 数据采集和显示:LabWindows/CVI广泛应用于数据采集和显示领域,教程会详细介绍如何使用LabWindows/CVI来配置和控制数据采集设备,并将数据实时显示在图表或仪表盘上。 4. 数据处理和分析:除了数据采集和显示,LabWindows/CVI还提供了强大的数据处理和分析功能。教程将介绍如何使用LabWindows/CVI来进行数据处理、滤波、傅里叶变换等各种常用算法。 5. 用户界面设计:LabWindows/CVI支持丰富的用户界面设计功能,教程将指导用户如何创建交互式的图形界面,包括按钮、输入框、菜单等,以便用户可以更方便地与应用程序进行交互。 通过学习LabWindows/CVI教程,用户将能够掌握LabWindows/CVI的基本编程技巧,了解其广泛的应用领域,并能够利用LabWindows/CVI开发实际的实时测量和控制系统。 ### 回答2: LabWindows/CVI 是一款由国家仪器(National Instruments)开发的集成开发环境(IDE),用于C语言的开发和编程。它提供了一系列强大的工具和库,能够方便地进行仪器控制、数据采集、信号分析等应用的开发。 LabWindows/CVI教程提供了从入门到进阶的学习资源,帮助用户快速上手并全面掌握LabWindows/CVI的使用。教程内容通常包括以下几个方面: 1. 安装和配置:介绍如何正确安装LabWindows/CVI以及配置相关环境,确保软件能够正常运行。 2. 编程基础:从C语言基础开始,介绍LabWindows/CVI的编程特性、语法和常用函数。学习者可以通过简单的示例代码来加深对LabWindows/CVI编程的理解。 3. 仪器控制:教程会介绍如何使用LabWindows/CVI来控制各种仪器和设备,包括仪器的初始化、数据的采集和处理、以及结果的展示。 4. 图形界面设计:LabWindows/CVI提供了可视化的界面设计器,教程会说明如何设计用户界面,并将代码集成到图形界面中,使程序更加友好和易用。 5. 数据分析与处理:LabWindows/CVI提供了强大的数据分析和处理功能,教程将介绍如何利用这些功能进行数据处理、结果分析和可视化。 6. 调试与优化:教程会讲解如何使用调试工具来定位和修复代码中的错误,并提供一些优化技巧,使程序的性能达到最佳状态。 总之,LabWindows/CVI教程是帮助用户学习和掌握LabWindows/CVI开发技术的重要资源,通过学习教程,用户能够更加高效地使用LabWindows/CVI进行应用开发和数据处理。 ### 回答3: LabWindows CVI是一种基于图形用户界面的开发环境,用于快速开发测试和测量应用程序。它是一个强大而灵活的工具,适用于各种科学研究、实验室测量、工业控制和自动化等领域。 LabWindows CVI教程为初学者提供了详细的指导,使他们能够快速了解和掌握该开发环境。教程从基础开始,包括界面布局、控件设计、事件处理等方面的内容。它还介绍了如何创建和管理项目,包括添加新文件、编译和调试应用程序。 教程还涵盖了LabWindows CVI的各种功能和工具,比如数据采集、图形显示、数据分析等。它提供了丰富的示例代码和详细的说明,使学习者能够快速上手并应用到实际项目中。 LabWindows CVI教程还提供了一些高级主题的学习资料,如多线程编程、仪器通信等。这些主题对于处理复杂的测试和测量任务非常有用,能够帮助开发人员更好地理解和运用LabWindows CVI的功能。 总结来说,LabWindows CVI教程是一个全面而详细的学习资源,适用于初学者和有经验的开发者。它通过清晰的指导和实践示例,帮助学习者快速掌握LabWindows CVI的开发技术,并能够在实际应用中灵活运用。无论是在学术研究、实验室测试还是工业控制领域,LabWindows CVI都是一个强大而可靠的开发环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值