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.SelectedItems
URL에서 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
'programing' 카테고리의 다른 글
'Binding'은 종속성 개체의 종속성 속성에만 설정할 수 있습니다. (0) | 2023.04.27 |
---|---|
Eclipse에서 디버깅하는 동안 변수가 표시되지 않음 (0) | 2023.04.27 |
YAML을 사용하여 파이프라인을 트리거하는 Azure 파이프라인 (0) | 2023.04.22 |
'for' 루프를 사용하여 디렉토리 내의 모든 파일을 반복합니다. (0) | 2023.04.22 |
안드로이드 엔드리스 목록 (0) | 2023.04.22 |