excel - 从 Windows Scripting Host 操作 Excel 文件

标签 excel vbscript 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)
    
  2. 使用 VBScript 在 Windows Scripting Host 中创建 Excel 对象:

    Set objExcel = CreateObject("Excel.Application")  
    Set objWorkbook = objExcel.Workbooks.Open(xls_final)  
    Set objSheet = objWorkBook.Sheets(1)
    
  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
    

问题在于,其中一些文件包含大量数据,像这样填充它们需要几个小时。 有没有更快的方法?

最佳答案

我认为你到目前为止还不错:

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)

但正如您所发现的,其余部分将慢得惊人。与工作表的交互会产生很高的开销,您要为每一行的每一列付出代价。有一些方法可以解决这个问题。

最简单的是

objSheet.Cells(1,1).CopyFromRecordset rs

我建议您先尝试一下。

关于excel - 从 Windows Scripting Host 操作 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/766992/

相关文章:

python - XLWT 多种款式

excel - 检测格式化为文本的重复项

c# - "Invalid procedure call or argument"VBScript 调用 C# COM 方法

object - 如何在VB脚本中检查对象类型

debugging - 为什么这个代码片段不起作用?

c++ - 使用单个 ADO 查询将数据从文本文件复制到另一个 ODBC 源

excel - Excel 中的 if/And 语句和查找

Excel VBA - 格式化除标题行之外的整列

sql-server - VB6 - 如何在一次调用中执行多个 SQL 查询

database - TADOQuery.Open 执行一条语句但只执行一次