web-dev-qa-db-fra.com

comment résoudre Exception: L'appel a été rejeté par l'appelé. (Exception de HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)) en C #?

J'ai écrit un code C # dans une application console pour ouvrir deux fichiers Excel et copier/coller des données d'un Excel à un autre Excel. Cela fonctionnait bien jusqu'à ce que la destination Excel ait une visibilité réelle. Mais je dois cacher Excel au moment de l'exécution. J'ai donc changé la visibilité en faux. Comme,

  _destExcelApp = new Excel.ApplicationClass();
  _destExcelApp.Visible = false;

Maintenant, il montre une exception comme 

L'appel a été rejeté par l'appelé. (Exception de HRESULT: 0x80010001 (RPC_E_CALL_REJECTED))

Comment résoudre celui-ci?

11
Manoj Nayak

Je me suis heurté à la même erreur lorsque j'ai déployé mon application sur une machine sans installation entièrement activée et sous licence d'Excel. J'ai passé des heures à essayer de diagnostiquer le problème. Assurez-vous de vérifier vos installations Office pour vous assurer qu'elles sont complètes.

17
Crash5998

Je faisais face à la même erreur et de nombreuses solutions suggérées ne fonctionnaient pas pour moi ..__J'ai une application fonctionnant sous Windows 8 et j’ai constaté que le problème était Excel qui demandait toujours de choisir l’application par défaut pour les extensions "xlsx" . Lors de l'exécution de l'application, aucune boîte de dialogue de fenêtre n'est apparue, seule l'erreur était affichée.

J'ai résolu le problème en allant dans Panneau de configuration> Programmes> Programmes par défaut et en définissant Microsoft Office Excel 2016 comme programme par défaut pour les fichiers xlsx.

5
Alielson Piffer

J'ai rencontré ce problème avec Word et ma solution consistait à désinstaller OpenOffice. Je ne sais pas s'il existe une autre solution, mais il est fort probable que cela concerne les dll et un conflit avec le gestionnaire de fichiers par défaut pour les fichiers que vous générez par programme. 

3
amadib

Assurez-vous que MS Word/Excel n’affiche pas de boîte de dialogue nécessitant une réponse.

J'ai défini un point d'arrêt sur la ligne à l'origine de l'échec, puis j'ai défini .Visible sur true dans PowerShell pour rechercher ceci:

$Word.Visible = $true

 MS Word Set default program Prompt

Après avoir cliqué sur "Oui" et mis à jour les paramètres, ils ont réussi après avoir réexécuté mes interactions COM scriptées.

2
CJBS

J'ai rencontré cette erreur aujourd'hui dans Excel 2016.

Nous avons découvert que certains compléments étaient activés sur l'ordinateur présentant ce problème.

Bizarrement, un ordinateur a mis des siècles à démarrer Excel. après avoir désactivé les compléments, notre programme a bien fonctionné.

Bizarrement, nous n’aurions pas pu reproduire cela sur nos développeurs.

1
Martin H.

Copiez-vous toute une gamme d’informations d’un document à un autre ou faites-vous des allers-retours entre les deux documents pour copier cellule par cellule? Excel est à thread unique, donc si vous effectuez des va-et-vient, vous risquez d'avoir ce problème. 

1
Duphorn

Couru dans ce problème sur ma machine. Excel est complètement activé et est déjà le programme par défaut pour les fichiers .xlsx. Je chargeais un modèle de classeur créé avec des tableaux croisés dynamiques et un script mettait à jour les données des tableaux. Il s'avère que si les tableaux croisés dynamiques sont configurés sur "Actualiser les données lors de l'ouverture du fichier" sous Options du tableau croisé dynamique> Données, cela provoque une sorte de problème de conflit de thread.
La désactivation de l'actualisation à l'ouverture résout le problème.

0
Ghostnine22

J'ai résolu ce problème avec l'aide de cette question:

Etrange comportement de "Appel a été rejeté par l'appelé." exception avec Excel

Le problème était simplement que le Workbook.Open n'était pas terminé lorsque j'ai donné une commande Worksheet.SaveAs. Donc, parfois, le script fonctionnerait, parfois pas.

J'ai simplement ajouté une pause dans le script après Workbook.Open et cela a fonctionné. J'ai ensuite trouvé une propriété Ready, qui m'a permis de faire exactement ce que je voulais:

    $Excel = New-Object -ComObject "Excel.Application" -ea Stop
    $wb = $Excel.Workbooks.Open($workbook)
    $sheet = $wb.Sheets("List")
    while (-not $Excel.Ready) {
        sleep 1
    }
    $sheet.SaveAs($csvpath,6)

Donc, dans mon cas, cela n'avait rien à voir avec des installations Excel non activées ou corrompues.

0
Joost