WINCC使用C脚本生成EXCEL报表

使用论坛中提供的代码,在全局脚本中定时执行脚本,但是写入EXCEL的值都是0,不知道为何?
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
int i;
#pragma code ("kernel32.dll")//调用动态链接库
VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);
#pragma code ()
#pragma code("Shell32.dll")//调用动态链接库
VOID ShellExecuteA(HWND, LPCTSTR , LPCTSTR , LPCTSTR , LPCTSTR , INT);
#pragma code()
char FileName[30] = ""; 
SYSTEMTIME sysTime;
__object* pExcel = NULL; //建立 pExcel 指针 用来对 EXCEL 进行操作
HWND handle=NULL;
handle=FindWindow(NULL,"WinCC-运行系统 - ");
GetLocalTime(&sysTime);
//***********************************
SetTagWord("Minute",sysTime.wMinute);
i=GetTagWord("Minute")+3;
if (i>26) { GetTagWord("Minute") ;}
else if (i<=26) 
{
sprintf(FileName,"d:\\Day_Report_%02d-%02d-%02d.xls",sysTime.wYear,sysTime.wMonth,sysTime.wDay);
pExcel = __object_create("Excel.Application"); 
pExcel->Visible = 0;//控制生成的excel文件是否可见,当1时,生成excel文件时可见.
pExcel->Workbooks ->Open (FileName);
pExcel->Worksheets("sheet1")->Range("X1")->Value=GetTagChar("@ServerName");//Return-Type: char* 读取当前计算机名
pExcel->Worksheets("sheet1")->Range("X2")->Value=GetTagChar("@CurrentUser");//Return-Type: char* 读取当前操作员
pExcel->Worksheets("sheet1")->Cells(6,i)->Value=GetTagChar("GI-10001");
pExcel->Worksheets("sheet1")->Cells(7,i)->Value=GetTagFloat("GI-10002"); 
pExcel->Worksheets("sheet1")->Cells(8,i)->Value=GetTagFloat("GI-10003"); 
pExcel->Worksheets("sheet1")->Cells(9,i)->Value=GetTagFloat("GI-10004"); 
pExcel->Worksheets("sheet1")->Cells(10, i)->Value=GetTagFloat("GI-10005"); 
pExcel->Worksheets("sheet1")->Cells(11, i)->Value=GetTagFloat("GI-100016"); 
pExcel->ActiveWorkbook->Save;//As(FileName);//存盘~
//pExcel->ActiveWorkbook->PrintPreview();//可以预览
//if (i>=27) { pExcel->ActiveWorkbook->PrintOut(); }//直接打印
pExcel->Workbooks->Close();//关闭文件
pExcel->Quit();//退出Excel
__object_delete(pExcel); 
}
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
}

另外此段脚本的含义是什么?
SetTagWord("Minute",sysTime.wMinute);
i=GetTagWord("Minute")+3;
if (i>26) { GetTagWord("Minute") ;}
else if (i<=26)

最佳答案

http://www.52plc.net/read.php?tid=4596
参考这个,带注释的

SetTagWord("Minute",sysTime.wMinute);//wincc变量Minute写入当前系统时间的分钟值
i=GetTagWord("Minute")+3;//i=当前时间的分钟值+3
if (i>26) { GetTagWord("Minute") ;}//如果当前时间的分钟值+3大于26则读取保存的分钟值
else if (i<=26)//否则如果分钟值+3小于等于26则。。。。。。

提问者对于答案的评价:
谢谢您的解答,也感谢其他朋友的热心帮助。zhangli0能否将代码发到我的邮箱呢,我以前注册过,但是一直登录不上。394514773@qq.com .      这段程序原作者应该是使用的STEP7软件,而我使用的是PCS7所以对于GI-10001这些变量的地址写错了,改为变量归档中的实际地址后没有问题了。

最佳答案作者回复:
你直接到这个网站上去下载就好了,这是我上传的。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc192658.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年8月15日 上午12:27
下一篇 2017年8月15日 上午12:27

相关推荐

  • 怎么向WINCC“用户管理器”添加授权?

    怎么向WINCC“用户管理器”添加授权? 高手指点。 问题补充:不好意思我没讲清楚。是诸如1:用户管理; 2:变量输入; 3:过程控制; 4…

    SIMATIC WinCC 2019年6月11日
  • wincc7.0报警如何确认

    我用wincc7.0的报警器实现声音报警,在报警记录中点确认,声音消失一下又有声音报警,确认状态也消失了。 问题补充:可以在报警信号有的情况下,如何关闭报警器的声音? 最佳答案 在…

    SIMATIC WinCC 2021年7月5日
  • 如何自动关闭弹出的子画面

    一客户提出了这样的要求:不用点击子画面右上角的关闭按键,直接用鼠标左键点击主画面任一位置或画面上的设备,既自动关闭上一步打开的子画面。请教这个功能如何实现呢? 最佳答案 不知你的子…

    SIMATIC WinCC 2019年6月10日
  • WINCC报表打印怎么加报表名称?

    WINCC报表需要打印,因为几个报表数据差不多,容易弄混,想给打印出的报表增加名称,例如:车间1数据记录、车间2数据记录等,由此来区分报表的不同。应该怎么处理? 最佳答案 通用方法…

    SIMATIC WinCC 2018年12月14日
  • 高分求WINCC学习视频和资料

    本人新手,求高手发给我学习视频和资料,还有WINCC函数的手册,谢谢,我的学习软件是WINCC 6.2的中文版.邮箱:yidy725@126.com 最佳答案 我有win…

    SIMATIC WinCC 2019年6月11日
  • wincc报警记录不显示

    在已使用的wincc中添加报警项目,结果运行起来报警信息不显示,奇怪了?这个点是图一的方块,报警变红,从这个地址找到块,plc中也有反应,添加这个变量进报警表运行没有报警?点动作了…

    2021年7月5日
  • 如何WINCC画面中增加系统的诊断信息

    我希望在WINCC画面中增加系统的诊断信息,例如网络线是否正常,PLC及其扩展模块是否正常,PROFIBUS是否正常等 问题补充:我是说在WINCC中如何实现 不是PCS…

    SIMATIC WinCC 2019年6月11日
  • WINCC、K-TP178双语切换

    WINCC、K-TP178如何做双语切换(中文和俄文切换),K-TP178里面做切换比较容易点,能否在程序里做一个地址,通过程序里的对位控制语言切换呢? 最佳答案 WINCC多语言…

    SIMATIC WinCC 2019年6月11日
  • 怎么实现WinCC经由串口直接连接MODBUS仪表

    系统需要增加一套仪表,仪表采用RS485接口的MODBUS协议,由于现场布线的原因,无法直接连到PLC,但连到中控室很方便.现在的想法是在中控计算机增加一块RS232转RS485的…

    SIMATIC WinCC 2019年6月11日
  • wincc7.4组态画面上的静态文字,显示不全,如下图,咋回事。

    计算机属性里面勾选的是“调整画面”,不是“全屏”。然后组态的几个画面,其中一个画面,如下图,静态文字显示不全。 图片说明:    最佳答案 检查一下静态文本,其…

    2021年7月5日