美文网首页
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