如何在文本字段中每次出现特定格式后插入新行

我有一个系统可以输出电子表格。 然后我把这个输出的电子表格,并将其导入MS Access。 在那里,我运行一些基本的更新查询,然后将最终结果合并到SharePoint 2013链接列表中。

我输出的电子表格有一个不幸的长文本字段,其中有一些注释,这是至关重要的。 在托pipe电子表格的系统上,这些注释格式很好。 当它输出电子表格时,字段会变成一个很长的非常空白的string,如下所示:

09:00在01/03/2017,名字姓氏。 : – 已回复要求提供更多信息。 15:12在15/02/2017,名字姓氏。 : – 需要更多信息来处理进度请求。 17:09在09/02/2017,名字姓氏。 : – 已经提出要求。

我想要做的是运行一个查询(无论是在MS Access或MS Excel),可以扫描此字段,检测### ## ## ## ## ###,Firstname姓名上出现“##:##: – “然后在它们之前自动插入一个换行符,这样这个文本就更加整齐地格式化了。 这显然会跳过这种格式的第一次出现,否则它会在字段的开头input一个新行。 理想的最终结果是:

09:00在01/03/2017,名字姓氏。 : – 已回复要求提供更多信息。
15:12在15/02/2017,名字姓氏。 : – 需要更多信息来处理进度请求。
17:09在09/02/2017,名字姓氏。 : – 已经提出要求。

说实话,我到目前为止还没有尝试过很多,因为我真的不知道从哪里开始。 我不知道这是否可以没有正则expression式,或在一个简单的查询与VBA代码。

我确实开始build立一个正则expression式,就像这样:

[0-9]{2}:[0-9]{2}\s[o][n]\s[0-9]{2}\/[0-9]{2}\/[0-9]{4}\,\s 

但是这看起来有些荒谬,我相当肯定我正在以一种非常不必要的方式去解决这个问题。 从我能从文本中看到,检测下一次出现的“##:## on ## / ## / ####”就足够了。 如果我在此之后换一个新的话,那就足够了。

你有你的RegExp模式,现在你需要创build一个函数来附加你的额外分隔符find的项目。

看看这个function。 它需要,你的长string,并find你的date戳使用你的模式,并附加你的分隔符。

理想情况下,我会运行每一行两次,并在每列后添加分隔符,所以你有一个string,

datestamp;名字lastname;评论

你可以使用arr = vba.split(text, ";")将你的数据存入一个数组中,并将其作为

 date-stamp = arr(0) name = arr(1) comment = arr(2) Public Function FN_REGEX_REPLACE(iText As String, iPattern As String, iDelimiter As String) As String Dim objRegex As Object Dim allmatches As Variant Dim I As Long On Error GoTo FN_REGEX_REPLACE_Error Set objRegex = CreateObject("vbscript.regexp") With objRegex .Multiline = True .Global = True .IgnoreCase = True .Pattern = iPattern If .test(iText) Then Set allmatches = .Execute(iText) If allmatches.count > 0 Then For I = 1 To allmatches.count - 1 ' for i = 0 to count will start from first match iText = VBA.Replace(iText, allmatches.item(I), iDelimiter & allmatches.item(I)) Next I End If End If End With FN_REGEX_REPLACE = Trim(iText) Set objRegex = Nothing On Error GoTo 0 Exit Function FN_REGEX_REPLACE_Error: MsgBox Err.description End Function 

使用上述function

 mPattern = "[0-9]{2}:[0-9]{2}\s[o][n]\s[0-9]{2}\/[0-9]{2}\/[0-9]{4}\," replacedText = FN_REGEX_REPLACE(originalText,mPattern,vbnewline) 

Excel使用LF来换行,Access使用CRLF。

所以运行一个简单的replace查询就足够了:

 UPDATE myTable SET LongTextField = Replace([LongTextField], Chr(10), Chr(13) & Chr(10)) WHERE <...> 

您需要确保这只在新导入的logging上运行一次,而不是在所有logging上重复运行。