Lotus Notes查看多行数据导出到Excel

我需要导出一个莲花笔记视图来优秀。 问题是,我有两列在视图中显示多个值“新行”作为分隔符。 我尝试了内置的导出function以及一个格式很less的新莲花脚本导出function。 在这两种情况下,不能使多个值出现在一个单元中。 每行只显示第一个值。 其余的值被忽略。 我们的用户只希望在新行中使用多个值,而不要使用任何其他分隔符。

请帮助我的build议。 我正在使用Lotus Notes 6.5和Microsoft Office 2010。

谢谢。

用Lotusscript写出口。 不难,你完全控制出口。 如果这些字段是多值字段,只需将值作为变体读取,然后使用每行之间的换行符将它们写入输出文件。

以下是如何解决这个问题的一个想法:

%REM Agent View Export Created Mar 27, 2013 by Karl-Henry Martinsson Description: Code to export a specified view as CSV. Copyright (c) 2013 by Karl-Henry Martinsson This code is distributed under the terms of the GNU General Public License V3. See http://www.gnu.org/licenses/gpl.txt %END REM Option Public Option Declare Class RowData Public column List As String Public Sub New() End Sub Public Sub SetColumnHeader(view As NotesView) Dim viewcolumn As NotesViewColumn Dim cnt As Integer ForAll vc In view.Columns Set viewcolumn = vc column(CStr(cnt)) = viewcolumn.Title cnt = cnt + 1 End Forall End Sub Public Sub SetColumnValues(values As Variant) Dim cnt As Integer Dim tmp As String ForAll v In values If IsArray(v) Then ForAll c In v tmp = tmp + c + Chr$(13) End ForAll column(CStr(cnt)) = Left$(tmp,Len(tmp)-1) Else column(CStr(cnt)) = v End If cnt = cnt + 1 End ForAll End Sub End Class Class CSVData Private row List As RowData Private rowcnt As Long %REM Function New Description: Open the view and read view data into a list of RowData objects. %END REM Public Sub New(server As String, database As String, viewname As String) Dim db As NotesDatabase Dim view As NotesView Dim col As NotesViewEntryCollection Dim entry As NotesViewEntry Dim colcnt As Integer Set db = New NotesDatabase(server, database) If db Is Nothing Then MsgBox "Could not open " + database + " on " + server,16,"Error" Exit Sub End If Set view = db.GetView(viewname) If view Is Nothing Then MsgBox "Could not access view " + viewname + ".",16,"Error" Exit Sub End If Set col = view.AllEntries() rowcnt = 0 Set entry = col.GetFirstEntry() Set row("Header") = New RowData() Call row("Header").SetColumnHeader(view) Do Until entry Is Nothing rowcnt = rowcnt + 1 Set row(CStr(rowcnt)) = New RowData() Call row(CStr(rowcnt)).SetColumnValues(entry.ColumnValues) Set entry = col.GetNextEntry(entry) Loop End Sub %REM Function CSVArray Description: Returns a string array of CSV data by row %END REM Public Function CSVArray() As Variant Dim rowarray() As String Dim textrow As String Dim cnt As Long ReDim rowarray(rowcnt) As String ForAll r In row textrow = "" ForAll h In r.column textrow = textrow + |"| + Replace(h,Chr$(13),"\n") + |",| End ForAll rowarray(cnt) = Left$(textrow,Len(textrow)-1) cnt = cnt + 1 End ForAll CSVArray = rowarray End Function %REM Function HTMLArray Description: Returns a string array of HTML data by row %END REM Public Function HTMLArray() As Variant Dim rowarray() As String Dim textrow As String Dim cnt As Long ReDim rowarray(rowcnt) As String ForAll r In row textrow = "" ForAll h In r.column textrow = textrow + |<td>| + Replace(h,Chr$(13),"<br>") + |</td>| End ForAll rowarray(cnt) = "<tr>" + textrow + "</tr>" cnt = cnt + 1 End ForAll HTMLArray = rowarray End Function End Class %REM ******************************** Example of how to call the class ******************************** %END REM Sub Initialize Dim csv As CSVData Dim outfile As String Set csv = New CSVData("DominoServer/YourDomain", "names.nsf", "People\By Last Name") outfile = "c:\ExcelExportTest.csv" Open outfile For Output As #1 ForAll row In csv.CSVArray() Print #1, row End ForAll Close #1 outfile = "c:\ExcelExportTest.xls" Open outfile For Output As #2 Print #2, "<table>" ForAll row In csv.HTMLArray() Print #2, row End ForAll Print #2, "</table>" Close #2 End Sub