2013-03-27 119 views
0

我需要將蓮花註釋視圖導出爲ex​​cel。問題是,我在視圖中有兩列,以「新行」作爲分隔符顯示多個值。我嘗試了內置的導出功能以及幾個格式化的新蓮花腳本導出功能。在這兩種情況下,不能使多個值出現在一個單元中。每行只顯示第一個值。其餘的值將被忽略。我們的用戶只希望在新行中使用多個值,而不要使用任何其他分隔符。Lotus Notes使用多行數據查看導出到Excel

請幫助我提出您的建議。我正在使用Lotus Notes 6.5和Microsoft office 2010.

謝謝。

回答

4

在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 
+0

請注意,我用的CSV \ n取代換行符,因爲換行符是無效的存在。要麼在Excel中進行替換,要麼將其替換爲您喜歡的任何分隔符。 – 2013-03-27 19:44:46

+0

非常感謝你:) – Priya 2013-04-05 08:05:57

相關問題