web-dev-qa-db-fra.com

Comment fermer sans enregistrer un classeur Excel / xlsm, avec une fonction personnalisée, à partir de C #

J'ai un classeur Excel avec une fonction de cellule personnalisée non dépendante du temps que j'ouvre à partir d'une application C # WindowsForms à l'aide d'Interop.Excel. J'ai lu quatre valeurs, je n'effectue aucun changement/calcul explicite, puis je le ferme à partir de C #.

Lorsque j'essaie de fermer directement (sans enregistrer), j'obtiens une invite de sauvegarde. Je soupçonne que c'est parce qu'Excel interprète le recalcul automatique à l'ouverture comme créant un changement, même si rien ne change réellement numériquement ou formellement. J'ai également défini Excel.Application.Calculation = Excel.XlCalculation.xlCalculationManual. Comment puis-je empêcher l'invite d'enregistrement d'apparaître et de simplement fermer sans enregistrer?

30
Jack Huang

Lorsque vous utilisez les objets Excel, assurez-vous de fermer le classeur comme ceci:

Excel.Application xlApp ;
Excel.Workbook xlWorkBook ;
Excel.Worksheet xlWorkSheet ;
object misValue = System.Reflection.Missing.Value;

xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add("Yourworkbook");

xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

....do your stuff

xlWorkBook.Close(false, misValue, misValue);

xlApp.Quit();

Le faux dans la méthode close indique de ne pas enregistrer les modifications.

53
Motes

Récemment, je travaillais sur l'automatisation d'Excel et j'ai trouvé que ce lien était la solution parfaite Kill Process Excel C #

1
Rajnish Patel