2017-09-15 11 views
0

Dans mon code C#, j'ouvre tout d'abord un fichier Excel:Excel COM Exception lors de l'appel méthode SaveAs

Excel.Application xlApp = new Excel.Application(); 
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(modelFileName, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

Je le modifier.

Enfin, je l'enregistrer dans un autre chemin appelé fileName:

xlWorkBook.SaveAs(fileName); 

Le problème est que si fileName correspond à un fichier Excel ouvert, l'instruction se déclenche au-dessus de l'exception COM:

System.Runtime.InteropServices.COMException occurred 
ErrorCode=-2146827284 
HResult=-2146827284 
HelpLink=xlmain11.chm 
Message=Unable to access 'MyFile.xlsx'. 
Source=Microsoft Excel 

Veuillez noter que je n'ai pas le même problème avec la méthode xlWorkBook.Save(), mais j'ai besoin de sauvegarder le fichier édité dans un chemin différent et de ne pas le surcharger.

+0

Eh bien, vous ne pouvez pas enregistrer comme dans un fichier déjà ouvert. Vous devez fermer le fichier existant (qui sera ensuite remplacé) ou enregistrer sous un autre nom. –

+0

Pourquoi je ne peux pas le faire? La méthode Save() permet d'enregistrer dans un fichier ouvert ... – KentuckyJack92

+0

@vous devez vérifier si un fichier portant le même nom existe ou non, et s'il y a "2" à la fin, réessayez, et s'il existait, alors incrémentez-en un de plus jusqu'à ce que vous obteniez un nom qui n'existe pas et vous pouvez l'enregistrer sous ce nom. En VBA, vous pouvez utiliser la fonction DIR() pour récupérer les noms de fichiers dans un dossier – Ibo

Répondre

0

Vous ne pouvez pas enregistrer dans un fichier ouvert. Vous devrez modifier fileName afin qu'il pointe vers un autre chemin.

+0

S'il vous plaît envisager d'ajouter un exemple de code. – jfeferman