有个往EXCEL里写数据的报表,VBS,是一天产生一个文件夹,但是现在出现这样一个怪事,从运行的第一天数据是从第3行写数据进去,比如写到第6行,当第二天的数据是从第7行开始写,前面6行是空的,也就是说下一天的数据开始写的行数就是上一天数据结束的那行开始,而不是从第3行开始,还一个问题就是下一天的数据的开始,比如是7月6号,那么第一个数据有的时候会是有一个7月5号的数据作为7月6号的开始第一个数据?这两个问题是出在哪里,请麻烦具体说说改哪里?
int gscAction( void )
{
#pragma code ("kernel32.dll")
VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);
#pragma code ()
char FileName[25] = "",Date[2] = "";
static int i=2;
SYSTEMTIME sysTime;
__object* pExcel = NULL;
__object* fso=NULL;
GetLocalTime(&sysTime);
sprintf(FileName,"e:\\%d年%d月%d日.xls",sysTime.wYear,sysTime.wMonth,sysTime.wDay);
sprintf(Date,"%d",sysTime.wDay);
i++;
pExcel = __object_create("Excel.Application");
fso=__object_create("Scripting.FileSystemObject");
pExcel->Visible = 0;
if(!(fso->FileExists(FileName)))
{
pExcel->Workbooks ->Open ("e:\\book1.xls");
pExcel->ActiveWorkbook->SaveAs(FileName);
}
__object_delete(fso);
pExcel->Workbooks ->Open (FileName);
pExcel->WorkSheets("sheet1")->Cells(i,1)->Value=GetTagChar("riqi");
pExcel->WorkSheets("sheet1")->Cells(i,2)->Value=GetTagChar("shijian");
pExcel->WorkSheets("sheet1")->Cells(i,3)->Value=GetTagDWord("补水"); //Return-Type: DWORD
pExcel->WorkSheets("sheet1")->Cells(i,4)->Value=GetTagDWord("供水");
pExcel->WorkSheets("sheet1")->Cells(i,4)->Value=GetTagDWord("yali");
pExcel->ActiveWorkbook->Save();pExcel->Workbooks->Close();
pExcel->Quit();
__object_delete(pExcel);/
最佳答案
经过测试发现应该是你的i没有复位造成的第一个问题,我估计你的Wincc一直在激活运行,到了00:00:00的时候日期更换了以后,但是是你的I还是继续I++,所以会在后一行更新,建议你在日期更换的时候复位一下I就应该可以解决这个问题。在这个地方增加一个i=2,
if(!(fso->FileExists(FileName)))
{
i=2;
pExcel->Workbooks ->Open ("e:\\book1.xls");
pExcel->ActiveWorkbook->SaveAs(FileName);
}
提问者对于答案的评价:
谢谢
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc272850.html