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
}


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

在这里插入图片描述

在这里插入图片描述

🌎总结

23

7

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

  • 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
    18
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蚂蚁小兵

慢慢长夜磨一章好文章,费烟!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值