2

SO、SU、SP.SEで解決策を探しましたが、必要なものが見つかりませんでした。スクリプトまたはその他の非コーディング方法/ツールである可能性のあるソリューションを探しています。

さまざまなレポートを SharePoint サイトに自動的にアップロードするためのスクリプト (他のユーザーが使用する) またはその他の形式の自動化を作成しようとしています。次の(VBScript)コードを機能させることができましたが、テキストベースのファイルのみ-この場合は.CSVですが、これは.TXTなどでも機能します.

Option Explicit

Dim sCurPath
sCurPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
UploadAllToSP sCurPath

Sub UploadAllToSP(sFolder)
    Dim fso, folder, fil
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(sFolder)
    For Each fil In folder.Files
        If fso.GetExtensionName(fil) = "csv" Then
            UploadFileToSP fil
        End If
    Next
End Sub

Sub UploadFileToSP(ofile)
    Dim xmlhttp
    Dim sharepointUrl
    Dim sharepointFileName
    Dim tsIn
    Dim sBody

    Set tsIn = ofile.openAsTextstream
    sBody = tsIn.readAll
    tsIn.close
    sharepointUrl = "http://SHAREPOINT URL HERE"

    sharepointFileName = sharepointUrl & ofile.name
    set xmlHttp = createobject("MSXML2.XMLHTTP.4.0")
    xmlhttp.open "PUT", sharepointFileName, false
    xmlhttp.send sBody
    If xmlhttp.status < 200 Or xmlhttp.status > 201 Then
        wscript.echo "There was a problem uploading " & ofile.name & "!"
    End If
End Sub

これは、テキスト データを SP サイトのファイルにパイプするため、テキスト ファイルに対してのみ機能します。ただし、任意の種類のバイナリ ファイル (.XLS、.PDF) を転送したい場合、ゴミがアップロードされます。

Shell.Application==>を調べてみました.Namespace()が、これは URL では機能しないようで、物理ドライブのみで機能します。ここに私が試したことのいくつかがあります(関連する部分を表示するためにトリミングされています):

Set oApp = CreateObject("Shell.Application")

If oApp.NameSpace(sharepointUrl) <> Null then ' Always Null!
    ' Copy here
    ' Some lines omitted
    oApp.NameSpace(sharepointUrl).CopyHere ofile.Name ' This also fails when not surrounded by the Null check
Else
    MsgBox "SharePoint directory not found!"
End If

xcopyを使用してバッチファイルも試しましたが、どちらにも接続できませんhttp://私はこの方法を見ましたが、これは私にとってはうまくいくかもしれませんが、NET USE私たちの会社には複数のネットワーク共有があり、ログインしているユーザーによってマッピングが異なるため、 mapping/ を扱いたくありません。

これらはどれも私が必要とする方法で機能しないため、この種の機能を自動化する方法はありますか?

私は VBA/VBscript の経験があるので、上記のようなスクリプトか、MS Office アプリケーションに組み込まれているもの (Outlook が最適ですが、与えられたものは何でも適応できる可能性があります) のいずれかが望ましいでしょう。そうは言っても、私は Windows または Office でネイティブに実行して、これを可能にするあらゆる方法を受け入れます。ただし、Visual Studio にアクセスできないため、.NET 機能を使用できません。

4

2 に答える 2

5

私が見ていなかった明らかな答えを教えてくれたSean Cheshireに感謝します。これがまだSOに存在するとは思わないので、関連するコードを投稿します。

Sub UploadFilesToSP(sFolder)

Dim sharepointUrl
Dim sharepointFileName
Dim LlFileLength
Dim Lvarbin()
Dim LobjXML
Dim LvarBinData
Dim PstrFullfileName
Dim PstrTargetURL
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim fldr
Dim f

    'This has not been successfully tested using an "https" connection.
    sharepointUrl = "http://SHAREPOINT URL HERE"
    Set LobjXML = CreateObject("Microsoft.XMLHTTP")
    Set fldr = fso.GetFolder(sFolder)

    For Each f In fldr.Files
        sharepointFileName = sharepointUrl & f.Name

        PstrFullfileName = sFolder & f.Name
        LlFileLength = FileLen(PstrFullfileName) - 1

        ' Read the file into a byte array.
        ReDim Lvarbin(LlFileLength)
        Open PstrFullfileName For Binary As #1
        Get #1, , Lvarbin
        Close #1

        ' Convert to variant to PUT.
        LvarBinData = Lvarbin
        PstrTargetURL = sharepointFileName 

        ' Put the data to the server, false means synchronous.
        LobjXML.Open "PUT", PstrTargetURL, False

        ' Send the file in.
        LobjXML.Send LvarBinData
    Next f

Set LobjXML = Nothing
Set fso = Nothing

End Sub

これは、VBScript で動作するようにフォーマットされた VBA コードですが、このブロックを適切に転送することはできませんでした。VBAとして、これはデータ型を割り当てることなどでいくらか改善できます.

' Read the file into a byte array.
ReDim Lvarbin(LlFileLength)
Open PstrFullfileName For Binary As #1
Get #1, , Lvarbin
Close #1
于 2012-08-20T15:37:14.363 に答える
2

これは非常に古い投稿ですが、非常に役立つ投稿です。皆さんの貢献に感謝します。これは、初期バインディングを使用した私のバージョンです。宣言されていない変数の型を VBA が想定しているため、以前の投稿が機能しないことがわかりました。

Private Sub cmdUploadToApplicationsAndApprovals_Click()

    Dim strSharePointUrl As String
    Dim strSharePointFileName As String
    Dim lngFileLength As Long
    Dim bytBinary() As Byte
    Dim objXML As XMLHTTP
    Dim varBinData As Variant
    Dim strFullfileName As String
    Dim strTargetURL As String
    Dim fso As FileSystemObject
    Set fso = New FileSystemObject
    Dim folder As folder
    Dim file As file
    Dim strFolder As String
    
    strFolder = CurrentProject.Path & "\Upload\"
        
    'This has not been successfully tested using an "https" connection.
    strSharePointUrl = "http://sps.mysite.ca/subsite/DocLib/"
    Set objXML = New XMLHTTP 'CreateObject("Microsoft.XMLHTTP")
    Set folder = fso.GetFolder(strFolder)

    For Each file In folder.Files
        strSharePointFileName = strSharePointUrl & file.Name

        strFullfileName = strFolder & file.Name
        lngFileLength = FileLen(strFullfileName) - 1

        'Read the file into a byte array.
        ReDim bytBinary(lngFileLength)
        Open strFullfileName For Binary As #1
        Get #1, , bytBinary
        Close #1

        'Convert to variant to PUT.
        varBinData = bytBinary
        strTargetURL = strSharePointFileName

        'Put the data to the server, false means synchronous.
        objXML.Open "PUT", strTargetURL, False

        'Send the file in.
        objXML.Send varBinData
        
        'Now Update the metadata
        
        
    Next file

    'Clean up
    Set objXML = Nothing
    Set fso = Nothing
    MsgBox "Done"
End Sub

参考までに、上記のコードには 2 つの参照が必要でした。1. Microsoft XML、v6.0 2. Microsoft スクリプティング ランタイム

これが、すでに素晴らしい答えを改善するのに役立つことを願っています!!

于 2015-03-29T23:01:57.817 に答える