【问题标题】:Oracle DB View -> Copying View to Excel using VBScriptOracle DB 视图 -> 使用 VBScript 将视图复制到 Excel
【发布时间】:2015-06-24 16:14:08
【问题描述】:

英语不是我的母语,但我希望我能充分解释我的问题。

我在 Oracle DB 中创建了一个仅包含我需要的数据的视图。 在我的 VBScript 文件中使用 SQL,我通过以下方式选择视图:

"SELECT * FROM TEST_1234"

我现在选择了完整的视图,效果很好。 现在我需要使用 VBScript(通过 UFT [统一功能测试])将完整的视图“导出”或复制到 Excel。

  1. 是否有一种简单的方法可以一次复制整个内容或至少复制完整的行或列?
  2. 如果 1. 不起作用,我是否可以使用两个循环“迭代”行和列并将每个字段中的数据复制到 Excel 中的相应字段?

如果能够在不使用记录集中列的名称的情况下复制数据会很好(有没有办法在 EOC [列结束] 之前使用数字?),因为有大量的要复制的列和列名可能会更改。

感谢您的帮助!

【问题讨论】:

    标签: excel vbscript oracle11g hp-uft


    【解决方案1】:

    从程序员==代码编写者的角度来看,最有吸引力的解决方案是您的第一种方法(仅使用一条 SQL 语句复制整个内容)。根据提供者的能力,这个语句可能看起来像

    INSERT INTO [DstTable] SELECT * FROM [SrcTable] IN '' 'odbc;dsn=DSNName'
    

    SELECT * INTO [DstTable] FROM [SrcTable] IN '' 'odbc;dsn=DSNName'
    

    查看here 寻找一个再简单不过的可行解决方案;但我承认到目标数据库的 dsnless 连接看起来更复杂,并且您的驱动程序可能有其他咒语来引用外部数据库。此外,您的一对提供程序可能不支持从源到目标的外部连接,并且使用 Access OLEDB 驱动程序(它来自/仍然存在?与 ADO)在外部连接到两个数据库的肮脏技巧可能对您不起作用。总而言之,要正确执行“INSERT/SELECT INTO External Database”当然不容易。 [查看我的(刚刚被否决的)answer 看到人们对使用单项复制循环的代码感到失望并退回(和赞成)。]在你的情况下,你必须研究是否至少有一个您可用的 Oracle 提供程序支持与 Excel 的外部连接(反之亦然)。

    从程序员==黑客的角度来看(让我们以最小的麻烦完成工作)一个简单的解决方案可能是将视图/表导出到 .csv( 我看了this,很失望,但你可能知道得更好)并将它们导入Excel(只是load .csv and save .xls) 如果您不能/不会使用文件系统,您可以通过内存:使用GetRows 将数据放入二维数组并将其分配给所需的 Excel 范围。

    如果以上所有方法都失败了,并且您需要在记录集中的行和列循环中分配给单个单元格,请记住 Fields collection 不仅可以让您访问数据,还可以访问元信息(列数,列-名称、类型……)。

    【讨论】:

    • 好文章。如果 ADO 在图片中,我建议使用 Excel 的 CopyFromRecordset 函数,然后再使用 GetRows。它从 Excel 2000 开始可用。
    • 我仍然遇到了这个解决方案的一个小问题。它以正确的顺序复制所有内容,但小数点后的所有内容都会被删除。在复制到 Excel 之前,我尝试将 Excel 格式化为小数点后 2 位小数,但它总是 xxx.00 这个问题有什么解决方案吗?
    【解决方案2】:

    感谢 Ekkehard 和 Bond 的帮助以及您提供的链接!在阅读并尝试了很多之后,我得到了一个非常简单的解决方案。

    这里有一些工作代码,如果其他人面临相同或类似的问题:

    Option explicit
    
    Dim conn, rec, xlStat, xlStatW, dbCnnStr, SQLSec, statArt
    
    Set conn        = Createobject("ADODB.Connection") 
    Set rec         = CreateObject("ADODB.Recordset")
    Set xlStat      = CreateObject("Excel.Application")
    
    dbCnnStr = "[your DB-connection]"
    
    conn.open dbCnnStr
    'Start Excel XXX
    Set xlStatW = xlStat.Workbooks.Add()
    xlStatW.Sheets(1).Name = "AAA_123"
    xlStatW.Sheets(2).Name = "BBB_123"
    xlStatW.Sheets(3).Name = "CCC_123"
    
    SQLSec = "SELECT * FROM XXX_123"
    rec.open SQLSec,conn
    xlStatW.Sheets(1).cells(2,1).CopyFromRecordset rec
    rec.Close
    
    SQLSec = "SELECT * FROM YYY_123"
    rec.open SQLSec,conn
    xlStatW.Sheets(2).cells(2,1).CopyFromRecordset rec
    rec.Close
    
    SQLSec = "SELECT * FROM ZZZ_123"
    rec.open SQLSec,conn
    xlStatW.Sheets(3).cells(2,1).CopyFromRecordset rec
    rec.Close
    
    xlStatW.SaveAs ("C:\test.xlsx")
    xlStatW.Close
    'Ende Excel XXX
    conn.Close
    

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多