• CAPL 无法处理 xlsx 表格,Python老大哥曲线助攻



    📘前言

    • 🍅 CAPL 可以读取csv表格,却不能直接读取xlsx文件,这是事实。Vector为什么要留这个遗憾呢?
      xlsx格式表格并不是普通的文本文件,底层比较复杂,咱也不懂,总之处理起来并不容易。 CAPL基于C语言,其实C/C++处理 xlsx表格都非常困难,而且第三方库也非常少,即使有依赖文件也比较多。所以我没选择封装动C++态库来实现功能,我选择了相对友好的Python 来实现

    • 🍅 核心思想就是通过Python 脚本来实现将xlsx转为csv格式;CAPL中通过sysExeC函数来调用Python脚本;最后,CAPL脚本处理csv格式表格

    • 根据上面的分析,你可能需要先熟悉下相关的知识点:

    • Python Excel xlsx,xls,csv 格式互转

    • CAPL 脚本下调用cmd 和其它应用程序

    • CAPL读写文本文件 txt,csv等

    • 🍅 演示软硬件环境 Windows11 x64CANoe 11 SP2 x64Python 3.8 x64
      请添加图片描述

    13855848697

    请添加图片描述


    📙 全部代码

    1️⃣ 首先我的D盘目录下 有一个xlsx 格式的测试文件,有一个python 打包之后的toCSV.exe程序

    在这里插入图片描述


    2️⃣ CAPL 源码

    • 下面代码是simulation 类型的CAPL,突出这点,是延时处理,只能用定时器来实现
    • 分成三部分:on key 'a' ,调用 toCSV.exe ,根据xlsx表格生成csv表格(复制,另存为,不破坏源xlsx文件);on timer sleep 调用ReadOutDataFromCsv()函数读取csv文件;ReadOutDataFromCsv函数是执行代码
    • 这里要强调下:capl 脚本并不会等待python脚本执行完毕,所以如果接下来要执行读取csv相关代码,要有一定的延时处理(大概3s左右,如果是调用Python脚本源码的会小很多,具体时间可以根据自己代码去调试。)
    variables
    {
      msTimer sleep;
      char InputFile[256] = "D:\\ToCSV\\TEST.xlsx";
      char OutFile[256] = "D:\\ToCSV\\TEST.csv";
    }
    on timer sleep
    {
       ReadOutDataFromCsv(OutFile);
    }
    
    on key 'a'
    {
      char parameter[256];
      char scriptPath[256]="D:\\ToCSV\\toCSV.exe";
      snprintf(parameter,elCount(parameter),"%s csv",InputFile);
      sysExeC(scriptPath,parameter);
      //capl 脚本并不会等待python脚本执行完毕,所以如果接下来要执行读取csv相关代码,要有一定的延时处理
      //test node 可以直接用testwaitfortimeout()函数
      setTimer(sleep,3000);
    }
    int ReadOutDataFromCsv(char FilePath[])
    { 
      char buffer_ascii[100];
      long retSize;
      int i,j,glbHandle;  
      
      glbHandle = OpenFileRead (FilePath,1);
      
      if (glbHandle!=0 )
      {          for(j=0;fileGetStringSZ(buffer_ascii,elcount(buffer_ascii),glbHandle)!=0 ;j++  )
        {      
          write ("lineNum:%d string*********%s.",j,buffer_ascii);     
        }
        fileClose (glbHandle);     
                 
      }  
      else
      {
        write("Read file :%s failed.",FilePath);
        return 0; //failed    
      }
      return 1; //passed
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    3️⃣ 运行完毕后, 文件目录下会生成一个csv文件 ,CAPL脚本输出csv文件的内容
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    🌎总结

    23

    7

    • 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!

    • 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
      18
  • 相关阅读:
    【wiki知识库】02.wiki知识库SpringBoot后端的准备
    虹科方案 | 车载以太网转换器&交换机解决方案
    【康复学习--LeetCode每日一题】2956. 找到两个数组中的公共元素
    抽象工厂模式
    Elixir - Map
    vue手动搭建脚手架(保姆式教案)
    Python二级综合题:计算总成绩 五种解法
    学习typescript(1)
    vue 模板应用
    【LeetCode】1870. 准时到达的列车最小时速
  • 原文地址:https://blog.csdn.net/qq_34414530/article/details/126608918