Передать учетные данные SharePoint для доступа к файлу Excel с помощью Interop? - PullRequest
0 голосов
/ 01 октября 2018
string url = HttpUtility.HtmlAttributeEncode("https://site.sharepoint.com/sites/Project/Shared%20Documents/ExcelSheet.xlsx");

        Excel.Application xlApp = new Excel.Application();
        Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(url):

Это запрашивает у меня адрес электронной почты (идентификатор пользователя) и пароль, я знаю, что могу передать пароль, но как мне получить туда адрес электронной почты (идентификатор пользователя).

У меня также есть учетные данные SharpePointсохраненный, я попытался с помощью SharepointClient, но я не смог понять, как загрузить файл, и я не мог понять, как преобразовать его в книгу Excel для циклического перемещения по ячейкам.

ClientContext context = new ClientContext("https://site.sharepoint.com/sites/Project/"):          
SecureString passWord = new SecureString();

 context.Credentials = new SharePointOnlineCredentials(password)      

Cheers!

1 Ответ

0 голосов
/ 01 октября 2018

Вместо Excel Interop я бы предложил использовать Excel Services REST API , который позволяет читать данные Excel без каких-либо зависимостей от внешних или сторонних библиотек.

Пример

В следующем примере показано, как прочитать данные рабочей книги из Financial Sample.xlsx образец файла Excel, хранящийся в SharePoint Online Documents library

var credentials = GetCredentials(userName, password);
var client = new ExcelClient(webUrl, credentials);
var data = client.ReadTable("Shared Documents/Financial Sample.xlsx", "Sheet1","A1", "P500");
JObject table = JObject.Parse(data);
int idx = 0;
foreach(var row in table["rows"])
{
     if(idx == 0)
     {
        //skip header
     }
     else
     {
        //get cell values
        var segment = row[0]["v"] as JValue;
        var country = row[1]["v"] as JValue;
        Console.WriteLine("Segment: {0}, Country: {1}", segment.Value,country.Value);
     }
     idx++;
}

, где

WebClient класс используется для использования служб Excel REST

public class ExcelClient : WebClient
{

    public ExcelClient(string webUrl, ICredentials credentials)
    {
        BaseAddress = webUrl;
        Credentials = credentials;
        Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
    }

    public string ReadTable(string fileUrl, string sheetName, string cellStart,string cellEnd, string format="json")
    {

        var endpointUrl = BaseAddress + string.Format("/_vti_bin/ExcelRest.aspx/{0}/Model/Ranges('{1}!{2}|{3}')?$format={4}", fileUrl,sheetName,cellStart,cellEnd,format);
        return DownloadString(endpointUrl);
    }

}

и SharePointOnlineCredentials класс для доступа к ресурсам SharePoint Online через учетные данные пользователя

static ICredentials GetCredentials(string userName, string password)
{
    var securePassword = new SecureString();
    foreach (var c in password)
    {
        securePassword.AppendChar(c);
    }
    return new SharePointOnlineCredentials(userName, securePassword);
}

Результаты

enter image description here

enter image description here

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...