À l'aide de l'Interopérabilité avec du C#, Excel Enregistrer changement d'origine.Comment nier cela?

StackOverflow https://stackoverflow.com/questions/29141

  •  09-06-2019
  •  | 
  •  

Question

Le problème:Chargement d'un modèle de feuille de calcul excel.À l'aide de la commande Enregistrer avec un nom différent, puis cesser de l'interopérabilité de l'objet.Cela finit par sauver le fichier de modèle d'origine.Pas le résultat qui est aimé.

public void saveAndExit(string filename)
{        
    excelApplication.Save(filename);
    excelApplication.Quit();
}

Fichier d'origine est ouvert c: esting emplate.xls Le nom de fichier qui est transmis est c: esting\7777 (date).xls

Quelqu'un aurait-il une réponse?

(La réponse que j'ai choisi est la plus correcte et complète bien la wbk.Close() nécessite des paramètres qui lui sont passés.Merci.)

Était-ce utile?

La solution

Excel interop est assez douloureux.J'ai déterré un vieux projet que j'avais, fait un peu de jouer du violon, et je pense que c'est ce que vous cherchez.Les autres intervenants sont de droite, mais, au moins dans mon expérience, il est beaucoup plus à l'appel de SaveAs() que ce que vous attendez, si vous avez utilisé les mêmes objets (sans le wrapper interop) en VBA.

Microsoft.Office.Interop.Excel.Workbook wbk = excelApplication.Workbooks[0];  //or some other way of obtaining this workbook reference, as Jason Z mentioned
wbk.SaveAs(filename, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, 
            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing);
wbk.Close();
excelApplication.Quit();

Gotta love tous ceux de Type.Missings.Mais je pense qu'ils sont nécessaires.

Autres conseils

Plutôt que d'utiliser un ExcelApplication, vous pouvez utiliser le Classeur objet et l'appel de la méthode SaveAs ().Vous pouvez passer à la mise à jour de nom de fichier là.

Avez-vous essayé de l'enregistrer sous de la Feuille de calcul?

  1. Idem sur le SaveAs
  2. Chaque fois que j'ai à faire Interop j'ai créer un VB.NET la bibliothèque de la classe et à écrire la logique dans VB.Il n'est tout simplement pas en valeur la dispute de le faire en C#
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top