[英]c# update links in excel file in sharepoint through sharepoint client
我有一個主要的excel文件,該文件具有指向sharepoint文件夾中其他幾個子excel文件的鏈接。 讓我們將主excel稱為main.xlsx,將sub excel稱為sub1.xlsx,sub2.xlsx。
每個excel的第一行都是相同的(標題行)。 main.xlsx的第二行引用sub1.xlsx。 main.xlsx的第三行引用sub2.xlsx,依此類推。
main.xlsx中第二行的第一單元格包含的值等於sub1.xlsx中第二行的第一單元格的內容。 main.xlsx中第二行的第二個單元格包含的值等於sub1.xlsx中第二行的第二個單元格的內容,依此類推。 同樣,main.xlsx中第三行的單元格鏈接到sub2.xlsx第二行。
這些所有文件都位於一個sharepoint文件夾中。 我的目的是將main.xlsx文件下載到本地服務器。 excel的sub1,sub2將由各自的用戶修改。 因此,在下載時,主要的excel應該具有更新的內容。 這就是我面臨的問題。
我想先更新主要Excel中的鏈接,然后再下載。
下面是我的代碼
var clientContext = new ClientContext(url)
ClientContext context = new ClientContext("https://siteurl");
context.Credentials = new NetworkCredential("userid", "password", "domain");
context.Load(context.Web);
List list = context.Web.Lists.GetByTitle("document library");
context.Load(list);
context.ExecuteQuery();
CamlQuery query = new CamlQuery();
query.ViewXml = "<view/>";
ListItemCollection licoll = list.GetItems(query);
context.Load(licoll);
context.ExecuteQuery();
string filePath = @"D:\Docs\sp\";
foreach(ListItem li in licoll)
{
Microsoft.SharePoint.Client.File file = li.File;
if(file!=null && file.Name == "main.xlsx")
{
var fileRef = file.ServerRelativeUrl;
FileInformation fileInfo = file.OpenBinaryDirect(context, fileRef.ToString());
var fileName = Path.Combine(filePath,(string)file.Name);
using (var fileStream = System.IO.File.Create(fileName))
{
fileInfo.Stream.CopyTo(fileStream);
}
}
}
該代碼工作正常。 唯一的問題是,如果有人更新了sub1或sub2 excel,則主excel中的值不會更新。
下載后,由於原始文件位於sharepoint中,因此我無法更新主要Excel中的鏈接。 那么,在將其下載到本地計算機之前,如何更新主要Excel中的鏈接?
是否可以通過excelservices或REST API實現?
首先,該查詢將增加很多額外的開銷,不需要您提取所有列表項。
其次,使用Excel的API獲取本地文件流后,您可以編輯文件。 因為在下載文件之前您沒有文件。 如果您在服務器端進行操作,則可以在“下載前”進行操作。 但是他們的確不需要,如上所示(fileinfo.Stream),將其下載到代碼中的內存中。 然后繼續在內存中創建一個新的Excel工作簿(您將需要Office Developer Tools的副本才能執行此操作。
Microsoft.Office.Interop.Excel.Application xls = new Microsoft.Office.Interop.Excel.Application()
Workbook wb = xls.Application.Workbooks.Open(fileInfo.Stream);
/* edit document here */
wb.SaveAs(fileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault); //saves your changes to the local drive location you specified
wb.Close();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.