工控编程吧

标题: wincc 使用C脚本生成EXCEL报表 [打印本页]

作者: baikhgmv    时间: 2016-9-21 22:47
标题: wincc 使用C脚本生成EXCEL报表
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->rintPreview();//可以预览
//if (i>=27) { pExcel->ActiveWorkbook->rintOut(); }//直接打印
pExcel->Workbooks->Close();//关闭文件
pExcel->Quit();//退出Excel
__object_delete(pExcel);
}
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END
// WINCCICNAME_SECTION_START
// syntax: #define PicNameInAction "ictureName"
// next PicID : 1
// WINCCICNAME_SECTION_END
}
另外此段脚本的含义是什么?
SetTagWord("Minute",sysTime.wMinute);
i=GetTagWord("Minute")+3;
if (i>26) { GetTagWord("Minute") ;}
else if (i<=26)




----------找到问题所在了,应为是使用的PCS7软件后变量名称的问题,所以对于GetTagFloat("GI-100016")这里变量应该是GetTagFloat("GI-10006/7.PV_Out#Value")


--------学习,以前曾用WINCC的VBS做过EXCEL,有感受


--------不知道这是做什么的,我以前做过在触摸屏上插张卡,在WINCC程序中做些模拟量的采集1S或5S采一个,如压力,流量,通量等,到一定时间实验员把卡拔出来插电脑上用EXCEL打开看数据。是不是这个意思?







欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4