Как получить доступ к данным в общем файле Excel, хранящемся на сайте SharePoint? - PullRequest
0 голосов
/ 16 апреля 2019

Для небольшой части проекта мне нужно прочитать данные из файла Excel, хранящегося на сайте Sharepoint моего клиента.

Мой клиент дал мне ссылку для доступа к этому файлу.На самом деле я могу получить к нему доступ вручную, но не могу получить к нему программный доступ.Я никогда раньше не работал с Sharepoint.

Я пробовал использовать Excel Interop, как в этом сообщении.

Строка excel.Worbooks.Open требовала, чтобы Microsoft идентифицировала меня такЯ набрал свой адрес электронной почты и пароль, но получил это сообщение (переведено):

«Доступ запрещен.Свяжитесь с вашим администратором.»

Я пытался использовать URL-адрес руководства и несколько других.Часть из них использовала OData, но все равно (например, здесь ).

Благодаря этой статье я также попытался использовать Graph API, но получил 404Ответ.

Я думаю, что проблема связана с правами на файл.


Итак, если я прав, мой вопрос: что должен сделать мой клиент, чтобы разрешить мне этот программный доступ?Он не айтишник.

Если я ошибаюсь, откуда эта проблема?Что я могу сделать?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 18 апреля 2019

Вы можете получить доступ к онлайн-файлу SHarePoint по CSOM .

Затем считайте данные в Excel с помощью EPPlus .

using (var clientContext = new ClientContext("https://tenant.sharepoint.com/sites/lee"))
            {
                Console.ForegroundColor = ConsoleColor.Green;
                string password = "password";
                SecureString sec_pass = new SecureString();
                Array.ForEach(password.ToArray(), sec_pass.AppendChar);
                sec_pass.MakeReadOnly();
                clientContext.Credentials = new SharePointOnlineCredentials("user@tenant.onmicrosoft.com", sec_pass);

                File file = clientContext.Web.GetFileByServerRelativeUrl("/sites/lee/MyDoc3/Book.xlsx");
                ClientResult<System.IO.Stream> data=file.OpenBinaryStream();
                clientContext.Load(file);
                clientContext.ExecuteQuery();
                using (var pck = new OfficeOpenXml.ExcelPackage())
                {
                    //using (var stream = File.OpenRead(""))
                    //{
                    //    pck.Load(stream);
                    //}
                    using (System.IO.MemoryStream mStream = new System.IO.MemoryStream())
                    {
                        if (data != null)
                        {
                            data.Value.CopyTo(mStream);
                            pck.Load(mStream);
                            var ws = pck.Workbook.Worksheets.First();
                            DataTable tbl = new DataTable();
                            bool hasHeader = true; // adjust it accordingly( i've mentioned that this is a simple approach)
                            foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
                            {
                                tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column));
                            }
                            var startRow = hasHeader ? 2 : 1;
                            for (var rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
                            {
                                var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
                                var row = tbl.NewRow();
                                foreach (var cell in wsRow)
                                {
                                    if (null != cell.Hyperlink)
                                        row[cell.Start.Column - 1] = cell.Hyperlink;
                                    else
                                        row[cell.Start.Column - 1] = cell.Text;
                                }
                                tbl.Rows.Add(row);
                            }
                            Console.WriteLine('1');

                        }
                    }



                }

                Console.WriteLine("Done");
                Console.ReadKey();

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