小编Ede*_*der的帖子

SAP:SAPGUI Parse GuiUserArea

问题!

目前在我工作的地方我们正在尝试使用SAPGui,ExcelVBA自动执行某种重复性任务.通常,我们从SAP的TCode收集的大多数报告都使用GuiUserArea显示,这不容易,整洁且快速解析.

解!

无论如何,我设法根据某些类型的要求解析这些报告.因此,我第一次尝试解析任何报告(显示为GuiUserArea)时,我想到了将报告保存为未格式化文本然后使用VBA解析它(Regexes,Splits)的想法很容易,Text Length,...)而不是使用GuiUserArea方法和属性.

请注意,使用此过程(保存文件)更容易,更快速地解析信息,但是使用SAPGUI对象只是为了保存文件而不是完成更复杂的任务作为解析信息...

与GuiUserArea合作我提出了以下解决方案:

Sub ParseSAPGUI()
    Dim objSAPGui As Object
    Dim objApplication As Object
    Dim objConnection As Object
    Dim objSession As Object

    If (objSAPGui Is Nothing) Then
        Set objSAPGui = GetSAPGuiObject()
        Set objApplication = GetSAPGuiScriptEngine(objSAPGui)
    End If

    If (objConnection Is Nothing) Then
        Set objConnection = GetSAPGuiConnection(objApplication)
    End If

    If (objSession Is Nothing) Then
        Set objSession = GetSAPGuiSession(objConnection)
    End If

    With objSession

        Dim intItemsShown As Integer
        Dim intVerticalScrollEndPoint As Integer …
Run Code Online (Sandbox Code Playgroud)

.net excel sap vba excel-vba

7
推荐指数
1
解决办法
1758
查看次数

SSIS:通过 SSIS 执行 Ironpython 或 Ironruby 脚本

问题!

我有一个小的 python 脚本,它遍历一个网页(http-crawling)。此网页托管在 Intranet 内,并使用 NTLM 身份验证来收集对其的访问权限。

所以,我发现这个任务(检索 http 内容)可以使用 python 轻松编程,而不是尝试将整个 python 脚本重新编写为 C#,然后通过 SSIS 上的“脚本任务”使用它,以完成任务。

暗示!

我仔细查看了 SSIS 工具,发现有一个名为“执行进程任务”的控制流,它允许您执行 Win32 可执行文件。

但问题在于如何调用我的 python 脚本,因为它不是可执行的,需要由 python 解释器解释(如果你能原谅重复的话)。因此,我可以轻松地构建一个简单的“.bat”文件,该文件同时调用 python 脚本和解释器。然后通过SSIS“执行进程任务”执行该文件。

题!

有没有其他方法可以实现这一点?(整洁的方式)

编辑 #1

用法

从脚本中检索到的信息将把该信息从数据库存储到一个表中,以便从另一个 SSIS 进程通过数据库表访问该信息。

我正在从不同来源(平面文件、数据库表、http 请求等)检索信息,以便将该信息存档到可以发布在 Web 服务中然后从 Excel 项目访问的数据库中。

提前致谢!

c# python ironpython ssis

5
推荐指数
1
解决办法
4207
查看次数

独立Jython:导入错误(Apache-POI)

在我尝试将Jython与Apache-POI一起使用时,Jython独立jar会抛出ImportError异常.

下面你会发现我如何调用我的Jython脚本:

java -cp C:\jAutoMailerScript\lib\poi-3.9-20121203.jar -jar jython.jar main.py
Run Code Online (Sandbox Code Playgroud)

错误:

Traceback(最近一次调用最后一次):

文件"main.py",第32行,in

来自org.apache.poi.hssf.usermodel import*

ImportError:没有名为apache的模块

这是第32行的代码:

from org.apache.poi.hssf.usermodel import *
Run Code Online (Sandbox Code Playgroud)

为了使用Java的第三方应用程序,Jython是否有任何限制?

提前致谢,

java jython apache-poi

5
推荐指数
1
解决办法
3111
查看次数

C#正则表达式麻烦

问题!

我有一个平面文件中的以下输入(规则)(谈论数字输入):

  • 输入可能是一个自然数(低于1000): 1, 10, 100, 999, ...
  • 输入可能是用引号括起来的逗号分隔数字(大于1000): "1,000", "2,000", "3,000", "10,000", ...

我有以下正则表达式来验证输入:(?:(\d+)|\x22([0-9]+(?:,[0-9]+)*)\x22),所以对于像10我期望在第一个匹配组中的输入10,这正是我得到的.但是当我得到一个像"10,000"我期望的第一个匹配组的输入10,000,但它存储在第二个匹配组.

string text1 = "\"" + "10,000" + "\"";
string text2 = "50";

string pattern = @"(\d+)|\x22([0-9]+(?:,[0-9]+){0,})\x22";

Match match1 = Regex.Match(text1, pattern);
Match match2 = Regex.Match(text2, pattern);

if (match1.Success)
{
    Console.WriteLine("Match#1 Group#1: " + match1.Groups[1].Value);
    Console.WriteLine("Match#1 Group#2: " + match1.Groups[2].Value);

    # Outputs
    # Match#1 Group#1: 
    # Match#1 Group#2: 10,000
}

if (match2.Success)
{
    Console.WriteLine("Match#2 Group#1: …
Run Code Online (Sandbox Code Playgroud)

c# regex filehelpers

3
推荐指数
1
解决办法
465
查看次数

创建匿名类型!

我知道我可以这样做:

var test = new { FirstName = string.Empty, LastName = string.empty };
Run Code Online (Sandbox Code Playgroud)

但我不知道是否有办法动态地做到这一点,让我们说:

var test = new {};
if (condition) {
    test.Property = string.Empty;
}
Run Code Online (Sandbox Code Playgroud)

让我说我有这个:

string[] names = 
{
    "eder",
    "quiñones",
    "quoe840629",
    "3301"
};

var anonymous = new {};
foreach (string name in names) {
    // Create anonymous types...
}
Run Code Online (Sandbox Code Playgroud)

有什么建议?

~EderQuiñones

anonymous-types c#-3.0

2
推荐指数
1
解决办法
793
查看次数

用正则表达式缓慢解析

我有以下正则表达式用于数据验证:

lexer = /(?:
      (.{18}|(?:.*)(?=\s\S{2,})|(?:[^\s+]\s){1,})\s*
      (.{18}|(?:.*)(?=\s\S{2,})|(?:[^\s+]\s){1,})\s*
      (?:\s+([A-Za-z][A-Za-z0-9]{2}(?=\s))|(\s+))\s*
      (Z(?:RO[A-DHJ]|EQ[A-C]|HIB|PRO|PRP|RMA)|H(?:IB[2E]|ALB)|F(?:ER[2T]|LUP2|ST4Q))\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\s+\d{10}|\s+)\s*
      (\d{6})\s*
      (.*)(?=((?:\d{2}\/){2}\d{4}))\s*
      ((?:\d{2}\/){2}\d{4})\s*
      (\S+)
    )/x
Run Code Online (Sandbox Code Playgroud)

问题是我必须遍历10000行(平均值)的文件,使用正则表达式执行验证,从而导致解析缓慢的应用程序.

  filename = File.new(@file, "r")
  filename.each_line.with_index do |line, index|
    next if index < INFO_AT + 1

    lexer = /(?:
      (.{18}|(?:.*)(?=\s\S{2,})|(?:[^\s+]\s){1,})\s*
      (.{18}|(?:.*)(?=\s\S{2,})|(?:[^\s+]\s){1,})\s*
      (?:\s+([A-Za-z][A-Za-z0-9]{2}(?=\s))|(\s+))\s*
      (Z(?:RO[A-DHJ]|EQ[A-C]|HIB|PRO|PRP|RMA)|H(?:IB[2E]|ALB)|F(?:ER[2T]|LUP2|ST4Q))\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\S+)\s*
      (\s+\d{10}|\s+)\s*
      (\d{6})\s*
      (.*)(?=((?:\d{2}\/){2}\d{4}))\s*
      ((?:\d{2}\/){2}\d{4})\s*
      (\S+)
    )/x

    m = lexer.match(line)
    begin
      if (m) then …
Run Code Online (Sandbox Code Playgroud)

ruby regex parsing jruby token

0
推荐指数
1
解决办法
695
查看次数