Oracle DB View - >使用VBScript将视图复制到Excel

时间:2015-06-24 16:14:08

标签: excel vbscript oracle11g hp-uft

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

我在Oracle DB中创建了一个只包含我需要的数据的视图。 在我的VBScript文件中使用SQL,我使用:

选择View
"SELECT * FROM TEST_1234"

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

  1. 是否有一种简单的方法可以一次复制整个事物或至少完整的行或列?
  2. 如果1.不起作用,我可以使用两个循环“迭代”遍历行和列并将每个字段中的数据复制到Excel中的相应字段吗?
  3. 能够在不使用记录集中列的名称的情况下复制数据会很好(有没有办法使用数字直到EOC [列的结尾]?),因为存在非常高的数量要复制的列和列名称可能会更改。

    感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

从程序员==代码编写者的角度来看,最有吸引力的解决方案是你的第一种方法(用一个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 IN IN External Database"对。 [看看我的(只是downvoted)answer,看看人们对使用单项复制循环的代码感到绝望和退缩(并且还有upvote)。在你的情况下,你必须研究是否至少有一个可用的Oracle提供程序支持与Excel的外部连接(反之亦然)。

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

如果上述所有操作都失败了,您需要在记录集上的行和列循环中分配单个单元格,请记住Fields collection不仅可以访问数据,还可以访问元信息(列数,列名,类型,......)。

答案 1 :(得分:0)

感谢您的帮助以及您提供的链接,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