目前在我工作的地方我们正在尝试使用SAPGui,Excel和VBA自动执行某种重复性任务.通常,我们从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) 我有一个小的 python 脚本,它遍历一个网页(http-crawling)。此网页托管在 Intranet 内,并使用 NTLM 身份验证来收集对其的访问权限。
所以,我发现这个任务(检索 http 内容)可以使用 python 轻松编程,而不是尝试将整个 python 脚本重新编写为 C#,然后通过 SSIS 上的“脚本任务”使用它,以完成任务。
我仔细查看了 SSIS 工具,发现有一个名为“执行进程任务”的控制流,它允许您执行 Win32 可执行文件。
但问题在于如何调用我的 python 脚本,因为它不是可执行的,需要由 python 解释器解释(如果你能原谅重复的话)。因此,我可以轻松地构建一个简单的“.bat”文件,该文件同时调用 python 脚本和解释器。然后通过SSIS“执行进程任务”执行该文件。
有没有其他方法可以实现这一点?(整洁的方式)
从脚本中检索到的信息将把该信息从数据库存储到一个表中,以便从另一个 SSIS 进程通过数据库表访问该信息。
我正在从不同来源(平面文件、数据库表、http 请求等)检索信息,以便将该信息存档到可以发布在 Web 服务中然后从 Excel 项目访问的数据库中。
提前致谢!
在我尝试将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是否有任何限制?
提前致谢,
我有一个平面文件中的以下输入(规则)(谈论数字输入):
1, 10, 100, 999, ..."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) 我知道我可以这样做:
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
我有以下正则表达式用于数据验证:
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)