【发布时间】:2021-09-23 15:08:57
【问题描述】:
我需要阅读 SharePoint Excel 文件并获取所需数据。现在我正在做的是在我的本地机器上下载 Excel 文件然后阅读它。但是我想摆脱下载部分,而是直接读取共享点上的Excel文件并获取所需的数据。
我当前的代码:
public string Get(int CSI_ID)
{
const string username = "********";
const string password = "********";
string url = @"https://globalfunctionsshare.nam.citi.net/";
var securedPassword = new SecureString();
foreach (var c in password.ToCharArray()) securedPassword.AppendChar(c);
NetworkCredential credentials = new NetworkCredential(username, password, "eur");
var path = @"sites/otdrrm/_layouts/15/download.aspx?SourceUrl=%2Fsites%2Fotdrrm%2FDocuments%2Ftools%2FLegal%20Hold%20Application%20Tracker/Legal%20Hold%20Application%20Tracker%2020210702.xlsx";
DownloadFile(url, credentials, path);
DataTable dt = ImportExceltoDatatable(@"C:\Users\mk20317\Legal_Hold_Application_Tracker.xlsx", CSI_ID);
string Status = dt.Rows[0]["Preservation Status"].ToString();
return Status;
}
private static void DownloadFile(string webUrl, ICredentials credentials, string fileRelativeUrl)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
using (var client = new System.Net.WebClient())
{
client.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
client.Headers.Add("User-Agent: Other");
//client.Credentials = credentials;
client.Credentials = CredentialCache.DefaultCredentials;
client.DownloadFile(new Uri(webUrl + fileRelativeUrl), @"C:\Users\mk20317\Legal_Hold_Application_Tracker.xlsx");
//var data = client.DownloadString(webUrl + fileRelativeUrl);
//JObject table = JObject.Parse(data);
}
}
public DataTable ImportExceltoDatatable(string Filepath, int CSI_ID)
{
// string sqlquery= "Select * From [SheetName$] Where YourCondition";
string sqlquery = "Select [Preservation Status] From [App List$] Where [CSI ID]=" + CSI_ID;
DataSet ds = new DataSet();
string constring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Filepath + ";Extended Properties=\"Excel 12.0;HDR=YES;\"";
OleDbConnection con = new OleDbConnection(constring + "");
OleDbDataAdapter da = new OleDbDataAdapter(sqlquery, con);
da.Fill(ds);
DataTable dt = ds.Tables[0];
return dt;
}
虽然我可以使用此代码在这里实现我的要求,但是通过不下载它并直接从共享点读取 excel (例如将数据放入内存流然后读取它)可以更简单。 请如果有人可以建议或帮助将数据放入内存流然后从中读取。
【问题讨论】:
标签: c# asp.net asp.net-web-api sharepoint