将Excel数据复制到Oracle Applications表单

时间:2017-08-31 13:23:23

标签: excel oracle vba excel-vba

我很擅长使用VBA或其他任何东西将Excel数据移动到外部程序。我做了一些研究,但是我找不到任何真正的答案。

在Excel工作表上,我从第84行开始有多个(从1到1,000左右)行。测量信息:姓氏,名字,性别,身高,体重等。我需要在Oracle Applications表单。

这是我创建的代码,它完成了工作,但它只处理第一行。除了测量行之外,还必须处理初始数据行。我在代码中添加了换行符,以尝试显示Oracle表单中每一行的布局。此外,每行以不同的数字开头。它从10开始,以10的增量增加。

需要长字符串才能访问表单中的另一组列。如果您手动执行此操作,则可以使用下拉菜单,但我认为在VBA中不可能。可能吗?或者使用VBA以外的其他方式做得更好?

Sub MoveToOracle()
    AppActivate "Oracle Applications - cbsProd (11.5.10.2)"
    Application.Wait (Now + TimeValue("0:00:01"))

    SendKeys ("10")
    SendKeys ("{TAB}")
    SendKeys ("A")
    SendKeys ("{TAB}")
    SendKeys Range("E1")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("ENV")
    SendKeys ("{DOWN}")

    SendKeys ("20")
    SendKeys ("{TAB}")
    SendKeys ("1")
    SendKeys ("{TAB}")
    SendKeys ("FN{F3}")
    SendKeys ("{TAB}")
    SendKeys Range("A2")
    SendKeys ("{TAB}")
    SendKeys Range("B2")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys ("{TAB}")
    SendKeys Range("C2")
    SendKeys ("{TAB}")
    SendKeys Range("D2")
    SendKeys ("{TAB}")
    SendKeys Range("E2")
    SendKeys ("{TAB}")
    SendKeys Range("F2")
    SendKeys ("{TAB}")
    SendKeys Range("G2")
End Sub

enter image description here

编辑:不会从Excel工作簿中读取读取订单号。每个新行都需要以10为增量的唯一编号开始,从10开始。我不知道如何使用SendKeys循环访问Excel数据。

另外,我几乎不习惯使用Excel。我没有dev访问权限来创建或管理数据库。

2 个答案:

答案 0 :(得分:0)

据我所知,VBA没有可用于与oracle表单进行交互的公共API,所以你最好的选择就是这样。

编辑:

要遍历工作表,您需要创建某种counter和/或loop

编辑:

或者,您可以为此创建临时数据库。将数据从Excel工作表导出到该临时数据库,然后从中读取数据。 excel中内置了一个导出函数,该表单应该很容易填充后面的oracle数据库。

答案 1 :(得分:0)

    Sub MoveToOracle()
    '   Oracle Applications Forms is a java VM window
    '   VBA code interaction with Controls within the VM window is by the use of sendkeys
    '   One commercial alternate application is Data Load.
    '
    AppActivate "Oracle Applications - cbsProd (11.5.10.2)"
    '   API SetForegroundWindow preferred over AppActivate
    Text string for 1 st row in Oracle Applications
    Let  Field_Text = "10" & "{TAB}" & "A" & "{TAB}" & Range("E1").Value & "{TAB}" & "{TAB}" & "{TAB}" & "ENV" & "{DOWN}"
    '   When using sendkeys the NUMLOCK is toggled on / off with each call of SendKeys
    '   NUMLOCK ON
    Let  SendKeysString = Field_Text & "{NUMLOCK}"
    SendKeys Field_Text
    '   Preferred dedicated pause sub using API sleep
    '   Author Kevin zorvek Posted on 2007-06-22 http://www.experts-exchange.com/
    '   Pause 0.6 seconds here for Oracle Applications before continuing
    '   Allows for Oracle Applications to catch up
    '   NUMLOCK ON
    '   Place pause code here
    Let  SendKeysString = vbNullString
    AppActivate "Oracle Applications - cbsProd (11.5.10.2)"
    '   Text string for 2 nd row in Oracle Applications
    Let  Field_Text = ""     ' Empty variable
    Let  Field_Text = "20" & "{TAB}" & "1" & "{TAB}" & "FN{F3}" & "{TAB}" & Range("A2").Value & "{TAB}" & Range("B2").Value
    Let  Field_Text = Field_Text & "{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}"
    Let  Field_Text = Field_Text & Range("C2").Value & "{TAB}" & Range("D2").Value & "{TAB}" & Range("E2").Value & "{TAB}" & Range("F2").Value & "{TAB}" & Range("F2").Value
    Let  Field_Text = Field_Text & "{NUMLOCK}"
    SendKeys Field_Text
    '   Pause 0.6 seconds here for Oracle Applications before continuing
    '   Allows for Oracle Applications to catch up
    '   NUMLOCK ON
    '   Place pause code here
    Let SendKeysString = vbNullString
End Sub