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 v6 英文版建立的工程项目,复制到另一台电脑,用wincc v6 sp2 中文版打开项目没有问题,可是用图形编辑器打开…

    SIMATIC WinCC 2019年6月11日
  • wincc7.3 如何做报警弹框??

    现在我使用wincc7.3,想请问如何做报警弹框,希望得到较为细致的解答,首次使用wincc,有没有视频或者wincc的案例,如果是写脚本的话,我对脚本不懂,希望能得到细致的讲解或…

    SIMATIC WinCC 2021年7月5日
  • 怎样才能把wincc中写到DB块的中值保存下来

    把wincc中IO域的值写到DB块中的一个参数,但是PLC复位后,DB块中的值又恢复成默认值了,怎么才能保存wincc写来的值而不恢复成默认值??谢谢 问题补充:各位学长,对不起了…

    SIMATIC WinCC 2017年6月19日
  • wincc 7.4能打开wincc 7.0sp3编辑的程序吗?如何操作?

    wincc 7.4能打开wincc 7.0sp3编辑的程序吗?如何操作? 最佳答案 可以打开,如果你只是简单的看人家的某一段或某一块,可以直接打开,提示你移植,…

    SIMATIC WinCC 2017年5月31日
  • wincc选件 PM-Control

    有wincc选件  PM-Control的下载地址吗?wincc这些高级选件在中国用的多吗? 最佳答案 找经销商或者西门子销售获取,听说哇哈哈在用。 提问者对于…

    SIMATIC WinCC 2021年7月5日
  • 软件需求

    哪位大师有西门子08版触摸屏编程软件,并告诉我咋安装。谢谢!!! 最佳答案 这个是wincc flexible 2008 SP4中国版,软件不需要授权…

    SIMATIC WinCC 2017年6月29日
  • 我电脑里面安装WINCC7.0版本的。每次关机只能强行关机。软关机会提示间截图

    我电脑里面安装WINCC7.0版本的。每次关机只能强行关机。软关机会提示间截图 最佳答案 无图无真相。优化一下系统、重装一下WINCC7.0、如果还不行只能重装系统了。 提问者对于…

    SIMATIC WinCC 2021年7月5日
  • WINCC设定定时时间

    请教一下WINCC上设定定时器的定时时间.在STEP7中做一个定时器,然后在WINCC上设定这个定时器的定时时间. 最佳答案 可以!但数据格式一定要转换!可能参考相关资料!&nbs…

    SIMATIC WinCC 2019年6月11日
  • wincc6.2DataMonitor

    wincc6.2DataMonitor 怎么样安装使用 最佳答案 1.wincc6.2DataMonitor 怎么样安装在安装时,选择自定义安装,钩选DataM…

    SIMATIC WinCC 2017年8月26日
  • Wincc项目的分屏使用

    一个主机、一个Wincc项目,利用两台显示器独立控制,请问是否可以,如何操作,谢谢! 问题补充:能否分别显示不同的画面 最佳答案 一个主机,两个显示器,显示不同画面,可以实现的。&…

    SIMATIC WinCC 2019年6月11日