Ho scritto una procedura che aprirà un xls da un disco locale, aggiornerà i dati al suo interno e quindi lo salverà di nuovo. Funziona beneApertura di un foglio di calcolo xls in modo programmatico in C# da un sito di SharePoint in modalità di lettura/scrittura
Il problema si verifica quando si sostituisce il nome file per fare riferimento a un sito di SharePoint. Apre il file bene. Aggiorna il file, ma quando recupera per salvare il file genera un'eccezione con il messaggio "Impossibile salvare come quel nome. Il documento è stato aperto in sola lettura.". Se provo a salvare il file con un nome file diverso, allora funziona bene.
Qualcuno sa cosa mi manca? Penso che debba avere a che fare con il modo in cui sto aprendo il file. C'è un altro modo in cui posso forzare l'apertura del file in modo lettura/scrittura?
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;
}
}
Molte grazie in anticipo per i suggerimenti.
Jonathan
L'URL del documento è simile a "https: //domainname/sites/sitename/Shared%20Documents/filename.xls". Può aprire questo file e salvare il file in un url come questo, tuttavia non può salvare nello stesso file. Non si dovrebbe fare riferimento al documento nel database direttamente poiché Microsoft potrebbe cambiare il metodo di memorizzazione del documento durante la notte. –