从Windows Scripting Host中删除Excel文件

Ser*_*nik 2 vbscript excel ado wsh

是否有一种快速方法可以从Windows Scripting Host 操作现有 XLS文件的内容?

我们收到了客户提供的Excel模板.我们的任务是使用从Oracle数据库中获取的数据填充这些模板.

目前的方法是使用Windows Scripting Host和VBScript:

  1. 使用ADODB从Oracle获取数据:

    Set db = CreateObject("ADODB.Connection")
    SQL = "SELECT ..."
    Set rs=db.execute(SQL)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用VBScript在Windows Scripting Host中创建Excel对象:

    Set objExcel = CreateObject("Excel.Application")  
    Set objWorkbook = objExcel.Workbooks.Open(xls_final)  
    Set objSheet = objWorkBook.Sheets(1)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后像这样逐个单元填写模板:

    If rs.EOF = False Then
       rs.MoveFirst
       Do Until rs.EOF
          objSheet.Cells(RowNumber, 1).Value = rs("COLUMN1")
          objSheet.Cells(RowNumber, 2).Value = rs("COLUMN2")
          objSheet.Cells(RowNumber, 3).Value = rs("COLUMN3")
          rs.MoveNext
       Loop
    End If
    objWorkbook.Save 
    rs.Close
    
    Run Code Online (Sandbox Code Playgroud)

    问题是这些文件中的一些包含大量数据,并且需要花费数小时来填充它们.有更快的方法吗?

Mik*_*use 5

我觉得你很高兴在这里:

Set db = CreateObject("ADODB.Connection")
SQL = "SELECT ..."
Set rs=db.execute(SQL)

Set objExcel = CreateObject("Excel.Application")  
Set objWorkbook = objExcel.Workbooks.Open(xls_final)  
Set objSheet = objWorkBook.Sheets(1)
Run Code Online (Sandbox Code Playgroud)

但正如你所发现的那样,其余部分将会非常缓慢.与工作表的交互具有很高的开销,您需要为每行中的每一列付费.这有一些方法.

最简单的是

objSheet.Cells(1,1).CopyFromRecordset rs
Run Code Online (Sandbox Code Playgroud)

我建议你先试试.