我需要从包含基于特定条件的文本行的excel单元格中获取一个日期,时间戳字段
包含多行文本数据的示例excel单元格如下所示: ------------从下面的EXCEL CELL开始示例文本-------------------------- ------------------------------- -
2019-07-01 11:42:20-Adeba Shariff(工作说明)
我们检查并发现5条消息(2条肥皂和3条有效消息),并由于以下错误而在中间件(ISR.CXT.ESB.ERROR.DETAILS.LOCAL)上失败:
错误文本:
[IBM] [ODBC 20101驱动程序] [Microsoft SQL Server]违反了PRIMARY KEY约束“ Replenishment_PK”。无法在对象“ dbo.Replenishment”中插入重复键。重复的键值为(MNPOKNI1N810210-E86-M,598,2019年7月1日10:02 AM)。
重新处理之前:-
dis qs(ISR.CXT.ESB.ERROR.DETAILS.LOCAL)
28 : dis qs(ISR.CXT.ESB.ERROR.DETAILS.LOCAL)
AMQ8450I: Display queue status details.
QUEUE(ISR.CXT.ESB.ERROR.DETAILS.LOCAL)
TYPE(QUEUE) CURDEPTH(5)
IPPROCS(0) LGETDATE(2019-06-30)
LGETTIME(11.18.14) LPUTDATE(2019-07-01)
LPUTTIME(10.02.58) MEDIALOG( )
MONQ(LOW) MSGAGE(25991)
OPPROCS(0) QTIME(999999999, 999999999)
UNCOM(NO)
解决方案:我们忽略了带有备份的这些失败消息,因为这是违反PRIMARY KEY问题的。请让我们知道是否需要从头开始采取任何行动。
重新处理后:
dis qs(ISR.CXT.ESB.ERROR.DETAILS.LOCAL)
29 : dis qs(ISR.CXT.ESB.ERROR.DETAILS.LOCAL)
AMQ8450I: Display queue status details.
QUEUE(ISR.CXT.ESB.ERROR.DETAILS.LOCAL)
TYPE(QUEUE) CURDEPTH(0)
IPPROCS(0) LGETDATE(2019-07-01)
LGETTIME(11.36.08) LPUTDATE(2019-07-01)
LPUTTIME(10.02.58) MEDIALOG( )
MONQ(LOW) MSGAGE(0)
OPPROCS(0) QTIME(999999999, 999999999)
UNCOM(NO)
最好的问候
2019-07-01 11:15:31-Adeba Shariff(工作说明) 重新处理之前:-
dis qs(ISR.CXT.ESB.ERROR.DETAILS.LOCAL)
28 : dis qs(ISR.CXT.ESB.ERROR.DETAILS.LOCAL)
AMQ8450I: Display queue status details.
QUEUE(ISR.CXT.ESB.ERROR.DETAILS.LOCAL)
TYPE(QUEUE) CURDEPTH(5)
IPPROCS(0) LGETDATE(2019-06-30)
LGETTIME(11.18.14) LPUTDATE(2019-07-01)
LPUTTIME(10.02.58) MEDIALOG( )
MONQ(LOW) MSGAGE(25991)
OPPROCS(0) QTIME(999999999, 999999999)
UNCOM(NO)
2019-07-01 10:10:54 -Adeba Shariff(工作说明) 分流完成
2019-07-01 09:37:55-Adeba Shariff(工作说明) 确认。
2019-07-01 07:57:44-Shreya Inamdar(工作笔记) Tivoli Enterprise Portal警报:
brokerlog.log错误
[IS.ISR.SalesReport] rlap1mqs:KUL / var / mqsi / common / log / 19/01/19 07:52:29 2322子SQL异常IIBP01HA1IS.ISR23003278SalesReportNode> SalesReport.ConvertToXML 0 0 07/01/19 07: 52:29 / var / mqsi / common / log / brokerlog.log [IS.ISR.SalesReport] 2322儿童SQL异常 IIBP01HA1IS.ISR23003278SalesReportSalesReport.ConvertToXML
---------带有文本行的示例单元格结束--------------------------- ---------------------------
我正在尝试从上面的单元格中提取日期时间戳(在上面的示例文本中以粗体突出显示),并根据条件“ 分类完成” ”。
换句话说,我需要一个公式来提取2019-07-01 10:10:54(从上面显示的单元格数据中),这是分流完成时的时间戳。
我有一堆带有不同文本的单元格,但是所有单元格中的单元格中都有文本“ Triage complete”,并且在要提取的文本上方有一个时间戳。
我尝试了LEFT,MID,INDEX和FIND无济于事。
不胜感激。谢谢。
=LEFT(A2, SEARCH("Triage completed",A2,1)-1)
结果与预期不符
我希望根据日期的时间戳从上面的给定单元格中提取日期条件,条件是该条件在该单元格中找到字符串“ Triage complete”。
答案 0 :(得分:0)
我建议在VBA中编写用户定义函数(UDF)并使用正则表达式。
要输入此用户定义函数(UDF),<alt-F11>
将打开Visual Basic编辑器。
确保您的项目在“项目浏览器”窗口中突出显示。
然后,从顶部菜单中选择插入/模块,然后
将下面的代码粘贴到打开的窗口中。
要使用此用户定义函数(UDF),请在某些单元格中输入类似=triageComplete(A1)
的公式。
实际上,如果格式为<date/time … some text-newline-Triage Complete>
,并且日期/时间始终与您显示的格式完全相同,请尝试:
Option Explicit
Function triageComplete(S As String) As Date
Dim RE As Object, MC As Object
Set RE = CreateObject("vbscript.regexp")
With RE
.Global = True
.ignorecase = True
.Pattern = "\b(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})\b.*\n.*Triage Completed"
.MultiLine = True
If .Test(S) = True Then
Set MC = .Execute(S)
triageComplete = MC(0).submatches(0)
End If
End With
End Function
如果格式可能不同,则需要更具体。
上面的UDF适用于复制/粘贴的数据,尽管您可能必须格式化公式返回其结果的单元格。