Napisałem procedurę, która otworzy plik xls z dysku lokalnego, odświeży dane w nim, a następnie zapisze ponownie. To działa dobrze.Otwieranie arkusza kalkulacyjnego Xls programowo w języku C# z witryny programu SharePoint w trybie odczytu/zapisu
Problem występuje, gdy zastępuję nazwę pliku, aby wskazywała na witrynę programu SharePoint. Otwiera plik w porządku. Odświeża plik, ale kiedy próbuje zapisać plik, zgłasza wyjątek z komunikatem "Nie można zapisać jako ta nazwa. Dokument został otwarty jako tylko do odczytu.". Jeśli spróbuję zapisać plik o innej nazwie, to działa poprawnie.
Czy ktoś wie, czego mi brakuje? Myślę, że to musi mieć jakiś związek z tym, jak otwieram plik. Czy istnieje inny sposób, w jaki mogę wymusić otwarcie pliku w trybie odczytu/zapisu?
private static void RefreshExcelDocument(string filename)
{
var xls = new Microsoft.Office.Interop.Excel.Application();
xls.Visible = true;
xls.DisplayAlerts = false;
var workbook = xls.Workbooks.Open(Filename: filename, IgnoreReadOnlyRecommended: true, ReadOnly: false);
try
{
// Refresh the data from data connections
workbook.RefreshAll();
// Wait for the refresh occurs - *wish there was a better way than this.
System.Threading.Thread.Sleep(5000);
// Save the workbook back again
workbook.SaveAs(Filename: filename); // This is when the Exception is thrown
// Close the workbook
workbook.Close(SaveChanges: false);
}
catch (Exception ex)
{
//Exception message is "Cannot save as that name. Document was opened as read-only."
}
finally
{
xls.Application.Quit();
xls = null;
}
}
Bardzo dziękuję z góry za sugestie.
Jonathan
Adres URL dokumentu wygląda tak: "https: //nazwa_domeny/sites/sitename/Shared%20Documents/filename.xls". Może otworzyć ten plik i zapisać plik w adresie URL takim jak ten, jednak nie można go zapisać w tym samym pliku. Nie powinieneś odwoływać się bezpośrednio do dokumentu w bazie danych, ponieważ Microsoft może zmienić metodę przechowywania dokumentu na noc. –