美文网首页
labwindows/cvi 2019入门(6)——libxl操

labwindows/cvi 2019入门(6)——libxl操

作者: 菜鸟笔记 | 来源:发表于2019-06-15 18:07 被阅读0次

    上一期的例子中使用NI官方的库Excelreport库操作Excel文件,这种方法简单易用,但存在一些不足。那就是不能脱离office环境,运行速度慢。今天实例使用第三方库libxl来操作Excel文件,该库具有原生支持c语言,速度快,不依赖office环境,同时支持跨平台,支持CVS和XLSX格式。

    LibXL库使用详解

    LibXL可以不依赖EXCEL读取XLS和XLSX文件。包括设置对齐方式、字体、颜色等格式。支持C, C++, C#,Python等语言。并且支持多个平台windows、Linux、Mac等。下面仅介绍windows平台CVI开发环境下,C语言的使用。


    image.png

    LibXL主要文件介绍

    上图是完整libxl库的文件结构,主要有以下几方面的东东:

    • bin 32位 动态链接库(需要将其放在可执行文件的目录)
    • bin64 64位 动态链接库
    • doc 函数说明的文档
    • examples 一些使用的例子,用C,C++,C#,python等语言的
    • include_c C的头文件
    • include_cpp C++的头文件
    • lib 32位微软Visual C++的库
    • lib64 64位微软Visual C++的库
    • net .NET使用的
    • stdcall 使用stdcall调用约定的32位动态库

    使用libxl创建Excel文件

    该实例基本是引用官方例子,把它移植到Cvi环境下,进行编译运行,掌握是libxl的基本方法。

    • 记得引用libxl.h文件
    • 把c语言需要的头文件、lib文件、dll文件放到项目目录下


      image.png

      设计项目界面如下:


      image.png
      软件运行效果如下:
      image.png

      该项目相对简单,加上函数方法太多,不在一一列述,大家可以查看库目录下文档查询自己想要的函数方法。网上关于libxl使用c语言操作的例子并不多,大部分是c++的。差别就是后者是面向对象的。全部代码如下:

    #include <utility.h>
    #include <ansi_c.h>
    #include <cvirte.h>     
    #include <userint.h>
    #include "libxl.h"
    #include "libxlDemo01.h"
    
    static int panelHandle;
    
    int main (int argc, char *argv[])
    {
        if (InitCVIRTE (0, argv, 0) == 0)
            return -1;  /* out of memory */
        if ((panelHandle = LoadPanel (0, "libxlDemo01.uir", PANEL)) < 0)
            return -1;
        DisplayPanel (panelHandle);
        RunUserInterface ();
        DiscardPanel (panelHandle);
        return 0;
    }
    
    int CVICALLBACK panelCB (int panel, int event, void *callbackData,
                             int eventData1, int eventData2)
    {
        switch (event)
        {
            case EVENT_GOT_FOCUS:
    
                break;
            case EVENT_LOST_FOCUS:
    
                break;
            case EVENT_CLOSE:
                QuitUserInterface (0);
                break;
        }
        return 0;
    }
    
    int CVICALLBACK btnExit (int panel, int control, int event,
                             void *callbackData, int eventData1, int eventData2)
    {
        switch (event)
        {
            case EVENT_COMMIT:
                QuitUserInterface (0);
                break;
        }
        return 0;
    }
    
    int CVICALLBACK btnNewXLS (int panel, int control, int event,
                               void *callbackData, int eventData1, int eventData2)
    {
        switch (event)
        {
            case EVENT_COMMIT:
                //声明Excel文件句柄并创建
                BookHandle book = xlCreateBook();
                //对控件进行授权注册
                xlBookSetKey(book,"TommoT", "windows-2421220b07c2e10a6eb96768a2p7r6gc");
                if(book)//如果book不为空
                {
                    
                    //声明sheet句柄并创建sheet1
                    SheetHandle sheet = xlBookAddSheet(book,"Sheet1",0);
                    if(sheet)//如果sheet不为空
                    {
                        //b3单元格输入"hello,world!";
                        xlSheetWriteStr(sheet,2,1,"Hello,World!",NULL);
                        //b4单元格输入整数1000;
                        xlSheetWriteNum(sheet,3,1,1000,NULL);
                        //b5单元格输入实数3.1415;
                        xlSheetWriteNum(sheet,4,1,3.1415,NULL);
                        //b6单元格设为true;              
                        xlSheetWriteBool(sheet,5,1,1,NULL);
                        //b7单元格设为false;             
                        xlSheetWriteBool(sheet,6,1,0,NULL);
                        //b8单元格增加注释"how are you?"   ;
                        xlSheetWriteComment(sheet,7,1,"how are you?","kitty",100,50);
                        //b9单元格设置错误格式;                  
                        xlSheetWriteError(sheet,8,1,"you have a Err!",NULL);
                        //b10单元格设置公式为b4+b5  ;
                        xlSheetWriteFormula(sheet,9,1,"=B4+B5",NULL);
                    }
                    char filename[MAX_PATHNAME_LEN]={0};
                    GetProjectDir(filename);
                    strcat(filename,"\\example.xls");
                    //保存Excel文件;
                    xlBookSave(book, filename);
                    //释放存储空间;               
                    xlBookRelease(book);
                }
                break;
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:labwindows/cvi 2019入门(6)——libxl操

          本文链接:https://www.haomeiwen.com/subject/qdfvfctx.html