要求通过写全局C脚本,来生成EXCEL把表。
因为我不太懂脚本代码,所以找来了一个例子工程,里面有写好的全局C脚本。
现在操作过程如下:
1.在E盘建立EXCEL文档(模板)E:\backup\Day_Report.xls,然后建立文件夹E:\Databackup
2.打开例子工程,打开计算机属性对话框,点击启动选项按钮,选中全局脚本运行系统(打钩)。点击运行按钮激活项目。通过修改计算机系统时间,从23:59:59开始,让系统时钟自动走过每个整点。这样系统就会在每天的00:00:00自动复制并以当天日期命名的EXCEL文档。每个整点会自动向EXCEL文档中写入实时数据。
当系统时间通过修改跳过了一天时,可以在E:\Databackup找到这一天的EXCEL文档。
3.然后我把上面E:\Databackup得到的EXCEL文档删掉。把F:\Cixiwicc\PAS里的几个脚本文件复制到我要做的项目a,修改脚本里的变量名,别的不变。激活项目a后,系统不执行复制模板的动作,也不写实时数据。只是在取消激活的时候会提示“动作仍在执行,是否退出该
动作”。
请问:哪里出问题了,还有别的设置么?copyday.pas和writedata.pas脚本放在任何项目都应该会执行生成EXCEL吧?
脚本copyday.pas如下:
#include "apdefap.h"
int gscAction( void )
{
#pragma option(mbcs)
// 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
#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] = ""; char DateTime[30] = "";
int d;
int n;
SYSTEMTIME sysTime;
__object* pExcel = NULL; //建立 pExcel 指针 用来对 EXCEL 进行操作
HWND handle=NULL;
handle=FindWindow(NULL,"WinCC-运行系统 - ");
GetLocalTime(&sysTime);
SetTagWord("Day",sysTime.wDay);
d=GetTagWord("OldDay");
n=GetTagWord("Day");
if(n==1&d>1)
{
sprintf(FileName,"E:\\Databackup\\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 ("E:\\backup\\Day_Report.XLS");
pExcel->ActiveWorkbook->SaveAs(FileName);//存盘
//pExcel->ActiveWorkbook->PrintPreview();//可以预览
//pExcel->ActiveWorkbook->PrintOut();//直接打印
pExcel->Workbooks->Close();//关闭文件
pExcel->Quit();//退出Excel
__object_delete(pExcel);
SetTagWord("OldDay",GetTagWord("Day"));
SetTagWord("OldHour",23);
}
if(d
{
sprintf(FileName,"E:\\Databackup\\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 ("E:\\backup\\Day_Report.XLS");
pExcel->ActiveWorkbook->SaveAs(FileName);//存盘
//pExcel->ActiveWorkbook->PrintPreview();//可以预览
//pExcel->ActiveWorkbook->PrintOut();//直接打印
pExcel->Workbooks->Close();//关闭文件
pExcel->Quit();//退出Excel
__object_delete(pExcel);
SetTagWord("OldDay",GetTagWord("Day"));
SetTagWord("OldHour",23);
}
return 0;
}
脚本writedata.pas如下:
#include "apdefap.h"
int gscAction( void )
{
#pragma option(mbcs)
// 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
int i;
int h;
int m;
#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("Hour",sysTime.wHour);
h=GetTagWord("OldHour");
m=GetTagWord("Hour");
if(h==23&m<23&m>0) {SetTagWord("OldHour",0);h=GetTagWord("OldHour");}
if(m==0&h>0)
{
i=GetTagWord("Hour")+3;
if (i>26) { GetTagWord("Hour") ;}
else if (i<=26)
{
sprintf(FileName,"E:\\Databackup\\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(i,2)->Value=GetTagFloat("一号SO2进口浓度");
pExcel->Worksheets("sheet1")->Cells(i,3)->Value=GetTagFloat("二号塔SO2进口浓度");
pExcel->Worksheets("sheet1")->Cells(i,4)->Value=GetTagFloat("三号SO2进口浓度");
pExcel->Worksheets("sheet1")->Cells(i,5)->Value=GetTagFloat("一号塔中部温度");
pExcel->Worksheets("sheet1")->Cells(i,6)->Value=GetTagFloat("一号塔出口温度");
pExcel->Worksheets("sheet1")->Cells(i,7)->Value=GetTagFloat("一号进口温度");
pExcel->Worksheets("sheet1")->Cells(i,8)->Value=GetTagFloat("一号塔除雾段压差");
pExcel->Worksheets("sheet1")->Cells(i,9)->Value=GetTagFloat("一号塔压差");
pExcel->Worksheets("sheet1")->Cells(i,10)->Value=GetTagFloat("脱硫塔PH值");
pExcel->Worksheets("sheet1")->Cells(i,11)->Value=GetTagFloat("一号塔循环泵甲电流");
pExcel->Worksheets("sheet1")->Cells(i,12)->Value=GetTagFloat("一号塔循环泵乙电流");
pExcel->Worksheets("sheet1")->Cells(i,13)->Value=GetTagFloat("一号塔循环泵丙电流");
pExcel->Worksheets("sheet1")->Cells(i,14)->Value=GetTagFloat("一号塔SO2出口浓度");
pExcel->Worksheets("sheet1")->Cells(i,15)->Value=GetTagFloat("一号塔粉尘浓度");
pExcel->Worksheets("sheet1")->Cells(i,16)->Value=GetTagFloat("二塔中温度");
pExcel->Worksheets("sheet1")->Cells(i,17)->Value=GetTagFloat("二塔出口温度");
SetTagWord("OldHour",GetTagWord("Hour")); //Return-Type: BOOL
pExcel->ActiveWorkbook->Save;//As(FileName);//存盘~
//pExcel->ActiveWorkbook->PrintPreview();//可以预览
//if (i>=27) { pExcel->ActiveWorkbook->PrintOut(); }//直接打印
pExcel->Workbooks->Close();//关闭文件
pExcel->Quit();//退出Excel
__object_delete(pExcel);
}
}
if(h{
i=GetTagWord("Hour")+3;
if (i>26) { GetTagWord("Hour") ;}
else if (i<=26)
{
sprintf(FileName,"E:\\Databackup\\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(i,2)->Value=GetTagFloat("一号SO2进口浓度");
pExcel->Worksheets("sheet1")->Cells(i,3)->Value=GetTagFloat("二号塔SO2进口浓度");
pExcel->Worksheets("sheet1")->Cells(i,4)->Value=GetTagFloat("三号SO2进口浓度");
pExcel->Worksheets("sheet1")->Cells(i,5)->Value=GetTagFloat("一号塔中部温度");
pExcel->Worksheets("sheet1")->Cells(i,6)->Value=GetTagFloat("一号塔出口温度");
pExcel->Worksheets("sheet1")->Cells(i,7)->Value=GetTagFloat("一号进口温度");
pExcel->Worksheets("sheet1")->Cells(i,8)->Value=GetTagFloat("一号塔除雾段压差");
pExcel->Worksheets("sheet1")->Cells(i,9)->Value=GetTagFloat("一号塔压差");
pExcel->Worksheets("sheet1")->Cells(i,10)->Value=GetTagFloat("脱硫塔PH值");
pExcel->Worksheets("sheet1")->Cells(i,11)->Value=GetTagFloat("一号塔循环泵甲电流");
pExcel->Worksheets("sheet1")->Cells(i,12)->Value=GetTagFloat("一号塔循环泵乙电流");
pExcel->Worksheets("sheet1")->Cells(i,13)->Value=GetTagFloat("一号塔循环泵丙电流");
pExcel->Worksheets("sheet1")->Cells(i,14)->Value=GetTagFloat("一号塔SO2出口浓度");
pExcel->Worksheets("sheet1")->Cells(i,15)->Value=GetTagFloat("一号塔粉尘浓度");
pExcel->Worksheets("sheet1")->Cells(i,16)->Value=GetTagFloat("二塔中温度");
pExcel->Worksheets("sheet1")->Cells(i,17)->Value=GetTagFloat("二塔出口温度");
SetTagWord("OldHour",GetTagWord("Hour")); //Return-Type: BOOL
pExcel->ActiveWorkbook->Save;//As(FileName);//存盘~
//pExcel->ActiveWorkbook->PrintPreview();//可以预览
//if (i>=27) { pExcel->ActiveWorkbook->PrintOut(); }//直接打印
pExcel->Workbooks->Close();//关闭文件
pExcel->Quit();//退出Excel
__object_delete(pExcel);
}
}
return 0;
}