Импорт списка из SharePoint в Excel в виде диапазона (или с фиксированным именем таблицы) - PullRequest
0 голосов
/ 16 января 2019

поэтому у меня есть код ниже, который извлекает список из SharePoint и импортирует его в Excel.Моя проблема заключается в том, что он импортирует его как таблицу, а не как диапазон, и я не могу автоматически преобразовать его в диапазон, поскольку имя таблицы меняется каждый раз, когда я запускаю сценарий (Table1, Table2, ... и т. Д.).

У меня такой вопрос: могу ли я сразу импортировать список из SharePoint в качестве диапазона Excel, чтобы мне не пришлось его преобразовывать?Если нет, могу ли я сделать так, чтобы при каждом запуске процедуры импорта имя импортируемой таблицы фиксировалось?

Вот мой код:

   Sub SharePoint_Import()
        Dim objMyList As ListObject
        Dim objWksheet As Worksheet
        Dim strSPServer As String
        Const SERVER As String = "xxxx.xxxxx.xxx.net/xxxx/xxxx" 'SP server
        Const LISTNAME As String = "{1234567-1234-1234-1234-1234567891}" 'SP List ID
        Const VIEWNAME As String = "" 

            Set RData = Sheets("rawdata") 'reset import sheet
            RData.UsedRange.ClearContents

        strSPServer = "https://" & SERVER & "/_vti_bin" '<- _vti_bin is necessary
        Set objWksheet = RData

          Set objMyList = objWksheet.ListObjects.Add(xlSrcExternal, Array(strSPServer, LISTNAME, VIEWNAME), False, , Range("A1"))
          Set objMyList = Nothing
          Set objWksheet = Nothing

    End Sub

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Вы можете запросить список Sharepoint, используя ADODB. Проверьте следующий код (непроверенный, потому что у меня нет Sharepoint, но я использовал что-то подобное в прошлом)

Const SERVER As String = "xxxx.xxxxx.xxx.net/xxxx/xxxx" 'SP server
Const LISTNAME As String = "{1234567-1234-1234-1234-1234567891}" 'SP List ID

Dim connStr As String
Dim conn As New ADODB.Connection
Dim rs As ADODB.Recordset

connStr = "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=1;RetrieveIds=Yes;" _
        & "DATABASE=" & SERVER _
        & ";LIST=" & LISTNAME & ";"
conn.Open connStr
Set rs = conn.Execute("select * from list")

Dim rData As Worksheet
Set rData = thisworknbook.Sheets("rawdata") 'reset import sheet
rData.UsedRange.ClearContents
rData.Range("A1").CopyFromRecordset rs
conn.Close
0 голосов
/ 16 января 2019

Сделай это

[1] Измените RData.UsedRange.ClearContents на RData.Cells.Clear. Это очистит лист полностью. Удаляет форматы, текст, таблицы и т. Д.

[2] После импорта таблицы добавьте этот код. Поскольку будет только одна таблица, вы можете использовать номер таблицы для работы с ней.

Dim tbl As ListObject
Set tbl = RData.ListObjects(1)

Dim tblRng As Range
Set tblRng = tbl.Range

'~~> Convert table to range
tbl.Unlist

'~~> Comment this in case you do not
'~~> want to remove the formatting
With tblRng
    .Interior.ColorIndex = xlColorIndexNone
    .Font.ColorIndex = xlColorIndexAutomatic
    .Borders.LineStyle = xlLineStyleNone
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...