web-dev-qa-db-fra.com

Comment enregistrer/écraser un fichier Excel existant avec Excel Interop - C #

Existe-t-il un moyen d'enregistrer les modifications apportées à une feuille de calcul Excel via l'interopérabilité Excel (dans ce cas, j'y ajoute une feuille de calcul) sans l'avoir invitée à indiquer à l'utilisateur s'il souhaite remplacer le fichier existant par les modifications. Je ne veux même pas que l'utilisateur voie la feuille de calcul ouverte dans mon application. Avoir une boîte de message contextuelle leur demandant si elles veulent écraser le fichier semble très déplacé et peut-être déroutant pour l'utilisateur. 

J'utilise la méthode workbook.SaveAs (fileloaction). 

Voici où j'initialise les objets de référence COM pour l'interopérabilité Excel.

private Excel.Application app = null;
    private Excel.Workbook workbook = null;

    public Excel.Workbook Workbook
    {
        get { return workbook; }
        set { workbook = value; }
    }
    private Excel.Worksheet worksheet = null;
    private Excel.Range workSheet_range = null;

Vous trouverez ci-dessous le code que j'utilise pour fermer/enregistrer le fichier Excel. La ligne de méthode workbook.close () est celle qui lève apparemment l'exception non gérée. 

 workbook.Close(true, startForm.excelFileLocation, Missing.Value);
            Marshal.ReleaseComObject(app);
            app = null;
            System.GC.Collect();
20
user1546315

Fondamentalement, tout ce dont vous avez besoin est ExcelApp.DisplayAlerts = False - Voici comment je le fais, cependant:

ExcelApp.DisplayAlerts = False
ExcelWorkbook.Close(SaveChanges:=True, Filename:=CurDir & FileToSave)

J'espère que cela t'aides

53
John Bustos

Seul ce code nécessitera une alerte d'arrêt prioritaire ou un modèle déjà utilisé

ExcelApp.DisplayAlerts = False

8
Shivam Srivastava

Je sais que ceci est un ancien post, mais je voulais partager un moyen de faire ce travail sans créer de frustration dans le futur. 

Tout d'abord ce que je n'aime pas dans l'utilisation de: ExcelApp.DisplayAlerts = False

La définition de cet indicateur définira cette propriété sur le fichier Excel, et pas uniquement dans votre programme. Cela signifie que si un utilisateur modifie le fichier et le ferme (en cliquant sur le X), il ne sera pas invité à enregistrer le fichier et provoquera une frustration plus tard. Il désactivera également les autres invites que Excel publierait généralement.

J'aime vérifier si le fichier existe avant de le sauvegarder:

        if (File.Exists(SaveAsName))
        {
            File.Delete(SaveAsName); 
        }
0
user5581710