我正在更改 Access 2010 报告。报告的一部分从名为“注释”的 SharePoint 字段中读取原始数据,其中包含每条记录的注释。在“注释”字段中,可以有多个句子。我需要找到一种方法将这些句子分成我报告中每个句子的要点。
我试图想出一个聪明的方法来做到这一点。我可以让数据输入人员在原始数据中使用某种符号,表示需要新的子弹。这样,在我的报告表达式中(或者可能通过 VBA),我可以将它分开......但是如何?
有什么想法吗?
我正在更改 Access 2010 报告。报告的一部分从名为“注释”的 SharePoint 字段中读取原始数据,其中包含每条记录的注释。在“注释”字段中,可以有多个句子。我需要找到一种方法将这些句子分成我报告中每个句子的要点。
我试图想出一个聪明的方法来做到这一点。我可以让数据输入人员在原始数据中使用某种符号,表示需要新的子弹。这样,在我的报告表达式中(或者可能通过 VBA),我可以将它分开......但是如何?
有什么想法吗?
MS Access 中的备注数据字段可以设置为富文本作为属性,因此:
UPDATE Table1
SET Table1.AMemo = "<ul><li>" &
IIf(InStr([AMemo],".")>0,
Replace(Mid([AMemo],1,Len([AMemo])-1),".","</li>"),[AMemo]) & "</li></ul>"
以最基本的形式,您可以执行以下操作。是拆分“.”上的 [Notes] 文本并为每个句子创建一个单独的“点”。
示例数据:[SharePointData]
SlideNumber Notes
----------- ------------------------------------
1 Title slide.
2 Brief overview. Just the highlights.
3 More stuff.
VBA代码:
Option Compare Database
Option Explicit
Public Function SplitNoteText(RawText As Variant) As Variant
Dim rtn As Variant, StringArray() As String, Point As Variant
Const BulletChar = "-"
rtn = Null
If Not IsNull(RawText) Then
rtn = ""
StringArray = Split(RawText, ". ", -1, vbBinaryCompare)
For Each Point In StringArray
If Len(Point) > 0 Then
If Len(rtn) > 0 Then
rtn = rtn & vbCrLf & vbCrLf
End If
rtn = rtn & BulletChar & " " & Point
If Right(Point, 1) <> "." Then
' add back the period that got "consumed" in the Split
rtn = rtn & "."
End If
End If
Next
End If
SplitNoteText = rtn
End Function
测试查询:
SELECT SlideNumber, Notes, SplitNoteText(Notes) AS Points FROM SharePointData;
结果:
SlideNumber Notes Points
----------- ------------------------------------ ----------------------
1 Title slide. - Title slide.
2 Brief overview. Just the highlights. - Brief overview.
- Just the highlights.
3 More stuff. - More stuff.