找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
{{itemCategory}}
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
具体做法上面2位都提供了,不过我个人认为与OFFICE交互,VBS是强项,毕竟是一个公司出来,而且都是BASIC语言写的.
至于你提出的问题,其实就是建立一个对象(通俗的说:开辟一块内存区域用于运行应用程序),PEXCEL,指向这个对象内存区域的指针(也就是首地址),这样引用PEXCEL->对应地址,就是指这个对象的相应属性项.
VBS里面对象OPJECT也是同样的意思,只不过是用对象名字(其实也是这片内存区域的首地址的字符串而已),VBS就是使用字符串名字来代替字符串首地址,也就代替了C语言指针,理解起来容易得多.
1、记录脚本:同一卡片号的每一根钢的数据记录,有多少根,记多少行
#include "apdefap.h"
int gscAction( void )
{
#pragma code ()
char FileName[20] = " ";
double genshu,row,col;
__object* pExcel = NULL;
genshu=GetTagDouble("记数根数");
SetTagDouble("根数记录",genshu);
row=genshu+4;
if((GetTagBit("钢温记录信号")==1))
{
pExcel = __object_create("Excel.Application.9"); //9表示用的是office
2000
pExcel->Visible =0;
pExcel->Workbooks ->Open ("e:\\LZEQ_HMI\\JILU.xls");//Cells(row,col)
pExcel->Worksheets("sheet1")->Cells(row,1)->Value=GetTagWord("记数根数
");
pExcel->Worksheets("sheet1")->Cells(row,2)->Value=GetTagChar("开始时间
");
pExcel->Worksheets("sheet1")->Cells(row,3)->Value=GetTagWord("1#高温计
温度记录");
pExcel->Worksheets("sheet1")->Cells(row,4)->Value=GetTagFloat("1#水箱流
量记录");
pExcel->Worksheets("sheet1")->Cells(row,5)->Value=GetTagWord("2#高温计
温度记录");
pExcel->Worksheets("sheet1")->Cells(row,6)->Value=GetTagFloat("2#水箱流
量记录");
pExcel->Worksheets("sheet1")->Cells(row,7)->Value=GetTagWord("3#高温计
温度记录");
pExcel->Worksheets("sheet1")->Cells(row,8)->Value=GetTagFloat("3#水箱流
量记录");
pExcel->Worksheets("sheet1")->Cells(row,9)->Value=GetTagWord("4#高温计
温度记录");
pExcel->Worksheets("sheet1")->Cells(row,10)->Value=GetTagWord("5#高温计
温度记录");
pExcel->Worksheets("sheet1")->Cells(row,11)->Value=GetTagFloat("4#水箱
流量记录");
pExcel->Worksheets("sheet1")->Cells(row,12)->Value=GetTagWord("6#高温计
温度记录");
pExcel->Worksheets("sheet1")->Cells(row,13)->Value=GetTagWord("7#高温计
温度记录");
pExcel->Worksheets("sheet1")->Cells(row,14)->Value=GetTagFloat("5#水箱
流量记录");
pExcel->Worksheets("sheet1")->Cells(row,15)->Value=GetTagWord("8#高温计
温度记录");
pExcel->Worksheets("sheet1")->Cells(row,16)->Value=GetTagChar("系统时间
");
SetTagBit("钢温记录信号",0);
}
pExcel->ActiveWorkbook->Save;
pExcel->Workbooks->Close();
pExcel->Quit();
__object_delete(pExcel);
return 0;
}
1、在WinCC 里面写一个全局脚本,在每天的00:00:01触发,执行复制Day_Report.xls并以此刻
的年月日加载到模板文件名里面,将复制新生产的“Day_Report年月日.xls”存盘到你指定的目录。
这样当天的空白日报文件也就有了。全局脚本代码如下:(本人测试通过,仅供参考)
#include "apdefap.h"
int gscAction( void )
{
#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] = "";
SYSTEMTIME sysTime;
__object* pExcel = NULL; //建立 pExcel 指针 用来对 EXCEL 进行操作
HWND handle=NULL;
handle=FindWindow(NULL,"WinCC-运行系统 - ");
GetLocalTime(&sysTime);
sprintf(FileName,"d:\\Day_Report_%02d-%02d-%02d.xls",sysTime.wYear,sysTime.wMonth,sysTi
me.wDay);
pExcel = __object_create("Excel.Application");
pExcel->Visible = 0;//控制生成的excel 文件是否可见,当1 时,生成excel文件时可见.
pExcel->Workbooks ->Open ("d:\\Day_Report.XLS");
pExcel->ActiveWorkbook->SaveAs(FileName);//存盘
//pExcel->ActiveWorkbook->PrintPreview();//可以预览
//pExcel->ActiveWorkbook->PrintOut();//直接打印
pExcel->Workbooks->Close();//关闭文件
pExcel->Quit();//退出Excel
__object_delete(pExcel);
return 0;
}
2、再写一个全局脚本,整点触发,把你需要记录的变量写到“Day_Report年月日.xls”相应的单
元格里面并存盘;这样就完成了报表的数据存储和打印。也就是说,我们可以在电脑里面存放一份报
表,并打印一份报表。同样也实现了数据的存储。
相关脚本代码如下:(当时是以分钟来做测试的,仅供参考;注意此段代码缺少对其它excel进程的
判断,在此脚本执行前,不要有其它excel应用!切记哦!!!呵呵。)
#include "apdefap.h"
int gscAction( void )
{
int i;
#pragma code ("kernel32.dll")//调用动态链接库
httP://ssyway.blog.sohu.com
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,sysTi
me.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-Typ
e: char* 读取当前计算机名
pExcel->Worksheets("sheet1")->Range("X2")->Value=GetTagChar("@CurrentUser");//Return-Ty
pe: char* 读取当前操作员
pExcel->Worksheets("sheet1")->Cells(6,i)->Value=GetTagChar("TAG1");
pExcel->Worksheets("sheet1")->Cells(7,i)->Value=GetTagFloat("TAG2");
pExcel->Worksheets("sheet1")->Cells(8,i)->Value=GetTagFloat("TAG3");
pExcel->Worksheets("sheet1")->Cells(9,i)->Value=GetTagFloat("TAG4");
pExcel->Worksheets("sheet1")->Cells(10, i)->Value=GetTagFloat("TAG5");
pExcel->Worksheets("sheet1")->Cells(11, i)->Value=GetTagFloat("TAG6");
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;
}
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!