programing

Excel VBA를 사용하여 쉐어포인트 폴더의 내용 가져오기

skycolor 2023. 4. 27. 22:05
반응형

Excel VBA를 사용하여 쉐어포인트 폴더의 내용 가져오기

보통 저는 이 코드를 사용하여 VBA에서 폴더의 내용을 검색합니다.하지만 쉐어포인트의 경우에는 작동하지 않습니다.어떻게 해야 할까?

Dim folder As folder
Dim f As File
Dim fs As New FileSystemObject

Set folder = fs.GetFolder("//sharepoint.address/path/to/folder")

For Each f In folder.Files
    'Do something
Next f

편집(샤칼페시의 좋은 논평 후):

Windows 탐색기에 주소를 입력하면 공유 지점에 액세스할 수 있습니다.공유 지점에 액세스하려면 인증이 필요하지만 Windows 로그인에 의존하기 때문에 투명합니다.

SharePoint에서 서버 권한이 있는 파일로 작업할 수 있는 유일한 방법은 WebDAV 폴더를 드라이브 문자에 매핑하는 것입니다.다음은 구현의 예입니다.

VBA의 다음 ActiveX 라이브러리에 참조를 추가합니다.

  • 모델wshom.ocx - ) - WshNetwork »
  • 스크립팅 런타임Microsoft 크임런타팅립스scrrun.dll - FileSystemObject) - FileSystemObject 파일입니다.

새 클래스 모듈을 생성합니다. 이 모듈을 호출합니다.DriveMapper다음 코드를 추가합니다.

Option Explicit

Private oMappedDrive As Scripting.Drive
Private oFSO As New Scripting.FileSystemObject
Private oNetwork As New WshNetwork

Private Sub Class_Terminate()
  UnmapDrive
End Sub

Public Function MapDrive(NetworkPath As String) As Scripting.Folder
  Dim DriveLetter As String, i As Integer

  UnmapDrive

  For i = Asc("Z") To Asc("A") Step -1
    DriveLetter = Chr(i)
    If Not oFSO.DriveExists(DriveLetter) Then
      oNetwork.MapNetworkDrive DriveLetter & ":", NetworkPath
      Set oMappedDrive = oFSO.GetDrive(DriveLetter)
      Set MapDrive = oMappedDrive.RootFolder
      Exit For
    End If
  Next i
End Function

Private Sub UnmapDrive()
  If Not oMappedDrive Is Nothing Then
    If oMappedDrive.IsReady Then
      oNetwork.RemoveNetworkDrive oMappedDrive.DriveLetter & ":"
    End If
    Set oMappedDrive = Nothing
  End If
End Sub

그런 다음 코드로 구현할 수 있습니다.

Sub test()
  Dim dm As New DriveMapper
  Dim sharepointFolder As Scripting.Folder

  Set sharepointFolder = dm.MapDrive("http://your/sharepoint/path")

  Debug.Print sharepointFolder.Path
End Sub

HTTP 대신 UNC 경로를 사용합니다.이 코드는 작동합니다.

Public Sub ListFiles()
    Dim folder As folder
    Dim f As File
    Dim fs As New FileSystemObject
    Dim RowCtr As Integer

    RowCtr = 1
    Set folder = fs.GetFolder("\\SharePointServer\Path\MorePath\DocumentLibrary\Folder")
    For Each f In folder.Files
       Cells(RowCtr, 1).Value = f.Name
       RowCtr = RowCtr + 1
    Next f
End Sub

사용할 UNC 경로를 가져오려면 문서 라이브러리의 폴더로 이동하여 수행 메뉴를 드롭다운한 후 Windows 탐색기에서 열기를 선택합니다.거기 보이는 경로를 복사해서 사용하세요.

다음 외에도:

myFilePath = replace(myFilePath, "/", "\")
myFilePath = replace(myFilePath, "http:", "")

공백도 바꿉니다.

myFilePath = replace(myFilePath, " ", "%20")

저는 이 문제를 잠시 고민하다가 매우 간단한 2줄 솔루션을 발견했습니다. 단순히 'http'와 모든 슬래시를 다음과 같이 대체했습니다.

myFilePath = replace(myFilePath, "/", "\")
myFilePath = replace(myFilePath, "http:", "")

모두에게 효과가 있는 것은 아니지만, 저에게는 효과가 있었습니다.

보안 사이트를 사용하는 경우(또는 둘 다 사용하려는 경우) 다음 행을 추가할 수 있습니다.

myFilePath = replace(myFilePath, "https:", "")

IMHO의 가장 멋진 방법은 WebDAV를 통해 이동하는 것입니다(네트워크 폴더가 없는 경우가 많으므로 이러한 방법은 허용되지 않습니다).우수 기사에 나와 있는 대로 ActiveX Data Objects를 통해 이 작업을 수행할 수 있습니다(코드는 Excel에서 직접 사용 가능, 최근에 사용된 개념).

이것이 도움이 되길 바랍니다!

http://blog.itwarlocks.com/2009/04/28/accessing-webdav-in-microsoft-word-visual-basic/

원래 링크는 비활성화되었지만 적어도 텍스트 콘텐츠는 여전히 archive.org 에서 사용할 수 있습니다. http://web.archive.org/web/20091008034423/http ://blog.itwarlocks.com/2009/04/28/accessing-webdav-in-microsoft-word-visual-basic

바로 이 문제에 시간을 할애했습니다. 파일을 열기 전에 파일이 있는지 확인하려고 했습니다.

결국 XML과 SOAP을 사용하는 해결책을 생각해냈습니다. EnumerateFolder 메서드를 사용하고 폴더 내용이 포함된 XML 응답을 끌어옵니다.

는 여기에 블로그를 했습니다.

공유 지점에 대한 드라이브 매핑(https도 포함)

파일 합니다. 입니다. 매핑을 설정하는 방법은 다음과 같습니다.공유 지점에서 탐색기로 열기그런 다음 경로 복사(http* 행)(아래 참조)

탐색기의 주소

는 Map 명령 "Map drive from Explorer" 또는 "Map drive from Explorer")에서합니다.net use N: https:://thepathyoujustcopied참고: https는 XP가 아닌 Windows 7/8에서 작동합니다.

이 방법이 도움이 될 수도 있지만 드라이브 문자가 PC마다 다르기 때문에 다른 방법을 선호합니다.여기서 중요한 것은 쉐어포인트에서 시작하는 것이지 쉐어포인트를 웹 서버로 액세스하는 VBA 스크립트에서 시작하는 것이 아닙니다.

Excel 시트에 대한 데이터 연결 설정

  • SharePoint에서 모니터링할 보기로 이동합니다.
  • 도구; Excel) Excel(2010년: 라이브러리 도구; libarry | Excel로 내보내기)우수 수출
  • 이 Excel을 보면 데이터 소스 설정(탭: 데이터, 연결, 속성, 정의)을 찾을 수 있습니다.

연결 탭

이 쿼리를 vBA에 포함하거나 스프레드시트에 데이터베이스 링크를 유지 관리하여 VBA를 통해 테이블 위에서 반복할 수 있습니다.참고: 위의 이미지는 실제 데이터베이스 연결(명령 텍스트)을 보여주지 않으며, 이를 통해 공유 지점에 액세스하는 방법을 알 수 있습니다.

WebDAV 폴더를 매핑하는 것은 SharePoint에 쉽게 액세스할 수 있는 장기적인 연결을 만드는 제가 선호하는 방법입니다.그러나 적절하게 매핑된 경우에도 파일이 선택될 때 URL을 반환한다는 것을 알게 될 것입니다(특히 다음을 통해).Application.FileDialog)는 Windows 10 1803의 변경 사항으로 인해 표시됩니다.

이 문제를 피하기 위해 다음을 사용하여 드라이브를 매핑할 수 있습니다.DriveMapper( 그에 에 (으)ㄹ 수 있는 것과 같은 것을 Application.FileDialog.SelectedItemsURL에서 UNC로 변환 기능 사용:

Public Function SharePointURLtoUNC( _
  sURL As String) _
As String
  Dim bIsSSL As Boolean

  bIsSSL = InStr(1, sURL, "https:") > 0
  sURL = Replace(Replace(sURL, "/", "\"), "%20", " ")
  sURL = Replace(Replace(sURL, "https:", vbNullString), "http:", vbNullString)
  
  sURL= Replace(sURL, Split(sURL, "\")(2), Split(sURL, "\")(2) & "@SSL\DavWWWRoot")
  If Not bIsSSL Then sURL = Replace(sURL, "@SSL\", vbNullString) 
  SharePointURLtoUNC = sURL
End Function

여기 저에게 맞는 코드가 있습니다.

참고... @SSL이 있는 URL 부분을 가져오려면 공유 지점 폴더의 URL을 Microsoft Edge/Chrome에서 Windows 파일 탐색기로 복사해야 합니다.그런 다음 현재 폴더 -> 속성을 마우스 오른쪽 버튼으로 클릭하면 사용해야 할 @SSL이 있는 경로가 표시됩니다.그것이 가장 어려운 부분입니다!

여기에 이미지 설명 입력

Sub GetAllFileNamesInSharePointFolder()

FileName = Dir("\\mycompany.sharepoint.com@SSL\DavWWWRoot\teams\NCICDS\Testing folder for Me\Elise\Deal Docs\2022\Metro Egypt\Confectionery\*.*")

Do While FileName <> ""
    Debug.Print FileName
    FileName = Dir()
Loop
End Sub

더 나은 안정적인 솔루션은 쉐어포인트를 하드 디스크에 동기화하는 것입니다.이 작업이 완료되면 DIR 기능을 사용하여 하드 디스크의 다른 파일과 마찬가지로 파일을 스캔할 수 있습니다.Microsoft에서 제공하는 이 비디오를 확인하십시오. https://support.microsoft.com/en-us/office/sync-sharepoint-files-and-folders-87a96948-4dd7-43e4-aca1-53f3e18bea9b

공유 지점 라이브러리를 창에서 드라이브 문자에 매핑해 보십시오.그런 다음 코드에서 드라이브와 경로를 선택합니다.

언급URL : https://stackoverflow.com/questions/1344910/get-the-content-of-a-sharepoint-folder-with-excel-vba

반응형