英语不是我的母语,但我希望我能充分解释我的问题。
我在Oracle DB中创建了一个只包含我需要的数据的视图。 在我的VBScript文件中使用SQL,我使用:
选择View"SELECT * FROM TEST_1234"
我现在选择了完整视图,效果很好。 现在我需要使用VBScript“导出”或将完整的View复制到Excel(通过UFT [统一功能测试])。
能够在不使用记录集中列的名称的情况下复制数据会很好(有没有办法使用数字直到EOC [列的结尾]?),因为存在非常高的数量要复制的列和列名称可能会更改。
感谢您的帮助!
答案 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