回复:EXCEL读写-VBS

已锁定

RENHQ

版主 西门子1847工业学习平台

  • 帖子

    13722
  • 精华

    61
  • 被关注

    2173

论坛等级:至圣

注册时间:2008-12-28

钻石 钻石 如何晋级?

发布于 2022-04-17 22:38:53

58楼

展开查看
以下是引用手机用户20220322260396在2022-04-17 19:09:17的发言 >56楼

'创建excel
On Error Resume Next
Dim oExcel,oWorkBook,oSheet
Dim oFso
Dim sSheetName,sPath,sFileName,sNewFileName,sNewPath
Set oFso = CreateObject("Scripting.FileSystemObject")
sPath = HMIRuntime.Tags("Filename").Read   '变量记录的文件夹路径
sFileName = sPath & "muban.xls"   '变量记录的文件夹的模板文件的路径
sNewFileName = Year(Now) & "-" & Right("0" & Month(Now),2) & "-" & Right("0" & Day(Now),2)   '记录文件路径
sNewFileName = sNewFileName & " "& Right("0" & Hour(Now),2) & "." & Right("0" & Minute(Now),2)
sNewFileName = sNewFileName & ".xls"
sNewPath=sPath & sNewFileName
Set  oExcel = GetObject(,"Excel.Application")'获取已经打开的Excel进程
If VarType(oExcel)=vbEmpty Then '如果未找到Excel进程,则由CreateObject新建
    Set oExcel = CreateObject("Excel.Application")'新建Excel进程
End If
Set oWorkBook = oExcel.Workbooks(sNewFileName)'试图获取已经打开的Excel文件
If VarType(oWorkBook)=vbEmpty Then '如未找到,则Open打开Excel文件
    If oFso.FileExists(sNewPath) = True Then '查找是否存在表格文件,如果存在直接打开
        Set oWorkBook = oExcel.workbooks.Open(sNewPath) '打开excel文件
    Else
        Set oWorkBook = oExcel.workbooks.Open(sFileName) '如果不存在,则打开模板并保存在模板位置
              oWorkBook.saveas sNewPath
    End If
End If
oExcel.visible = True '是否可见,False为不可见
Set oSheet = oWorkBook.Sheets("Sheet1")
HMIRuntime.DataSet.Remove("oExcel")
HMIRuntime.DataSet.Add "oExcel",oExcel '将oExcel保存到DataSet中,以供其它调用
HMIRuntime.DataSet.Remove("oSheet")
HMIRuntime.DataSet.Add "oSheet",oSheet '将oSheet保存到DataSet中,以供其它调用
Set oFso = Nothing

'插入数据
On Error Resume Next
Dim oExcel,oSheet
Dim IO1,IO2,IO3,IO4,IO5,IO6,IO7,IO8,IO9,IO10,IO11,IO12
Dim i,m,n
Set IO1=HMIRuntime.Tags("设定值1")
Set IO2=HMIRuntime.Tags("设定值2")
Set IO3=HMIRuntime.Tags("设定值3")
Set IO4=HMIRuntime.Tags("设定值4")
Set IO5=HMIRuntime.Tags("数据包位数1")
Set IO6=HMIRuntime.Tags("数据包位数2")
Set IO7=HMIRuntime.Tags("数据包位数3")
Set IO8=HMIRuntime.Tags("数据包位数4")
Set IO9=HMIRuntime.Tags("数据包位数5")
Set IO10=HMIRuntime.Tags("数据包位数6")
Set IO11=HMIRuntime.Tags("数据包位数7")
Set IO12=HMIRuntime.Tags("数据包位数8")
Set oExcel = HMIRuntime.DataSet.Item("oExcel").Value'获取创建的excel对象
Set oSheet = HMIRuntime.DataSet.Item("oSheet").Value'获取创建的sheet对象
For i=1 To 101'循环判断表格空白位置,防止表格过大
    If IsEmpty(oSheet,cells(i,1).Value)= True Then
        Exit For
    End If
Next
If i< 102 Then
    oSheet.cells(i,1).value = i-1
    oSheet.cells(i,2).value = IO1.OutputValue
    oSheet.cells(i,3).value = IO2.OutputValue
    oSheet.cells(i,4).value = IO3.OutputValue
    oSheet.cells(i,5).value = IO4.OutputValue
    oSheet.cells(i,6).value = IO5.OutputValue
    oSheet.cells(i,7).value = IO6.OutputValue
    oSheet.cells(i,8).value = IO7.OutputValue
    oSheet.cells(i,9).value = IO8.OutputValue
    oSheet.cells(i,10).value = IO9.OutputValue
    oSheet.cells(i,11).value = IO10.OutputValue
    oSheet.cells(i,12).value = IO11.OutputValue
    oSheet.cells(i,13).value = IO12.OutputValue
Else
    Msgbox "任务次数超出100次"
End If

'关闭
On Error Resume Next
Dim oExcel,oSheet
Set oExcel = HMIRuntime.DataSet.Item("oExcel").Value'获取excel对象
Set oSheet = HMIRuntime.DataSet.Item("oSheet").Value'获取sheet对象
oExcel.DisplayAlerts = False'不显示警告弹窗
oExcel.activeWorkBook.save'保存表格
oExcel.activeWorkBook.close'关闭文档
oExcel.quit'退出excel
Set oSheet = Nothing'释放空间
Set oExcel = Nothing
HMIRuntime.DataSet.Remove("oExcel")'删除对象

HMIRuntime.DataSet.Remove("oSheet")


楼主大大,我参照您的那个常驻内存写excel文件的帖子写的代码,但是我实际使用发现直接打开模板文件,不能将变量数据写入excel,而且没另存为别的文件,能关闭。我感觉dataset好像没用上。我只要用按钮触发脚本就行。大大能帮我看下吗?

On Error Resume Next

这个尽量别用,用了这个脚本中间有错误也会向下执行,而且不在脚本诊断里面打印

去掉这个看看脚本诊断,那里有错误

Q群:https://jq.qq.com/?k=9BDuEgf6
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32760条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。