2010-04-18 8 views
3

Je le code qui va créer le fichier Excel et la feuille de travail puis insérez les mêmes valeurs.Utiliser Microsoft.Office.Interop pour enregistrer le fichier créé avec C#

Le problème que je suis face que je ne suis pas en mesure d'enregistrer le fichier avec le nom donnant dix colse il.

J'utilisé SaveAs, mais n'a pas fonctionné:

wb.SaveAs(@"C:\mymytest.xlsx", missing, missing, missing, missing, 
    missing, XlSaveAsAccessMode.xlExclusive, missing, missing, missing, missing, missing); 

cette ligne de code me donner cette erreur:

Microsoft Office Excel ne peut pas accéder au fichier 'C: \ A3195000. Il y a plusieurs raisons possibles:

• Le nom du fichier ou le chemin n'existe pas. • Le fichier est utilisé par un autre programme. • Le classeur que vous essayez d'enregistrer porte le même nom qu'un classeur actuellement ouvert.

s'il vous plaît conseiller pour résoudre ce problème.

voici mon code:

private void button1_Click(object sender, EventArgs e) 
{ 
    Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); 

    if (xlApp == null) 
    { 
    MessageBox.Show("EXCEL could not be started. Check that your office installation and project references are correct."); 
    return; 
    } 
    xlApp.Visible = true; 

    Workbook wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet); 
    Worksheet ws = (Worksheet)wb.Worksheets[1]; 

    if (ws == null) 
    { 
    MessageBox.Show("Worksheet could not be created. Check that your office installation and project references are correct."); 
    } 

    // Select the Excel cells, in the range c1 to c7 in the worksheet. 
    Range aRange = ws.get_Range("C1", "C7"); 

    if (aRange == null) 
    { 
    MessageBox.Show("Could not get a range. Check to be sure you have the correct versions of the office DLLs."); 
    } 

    // Fill the cells in the C1 to C7 range of the worksheet with the number 6. 
    Object[] args = new Object[1]; 
    args[0] = 6; 
    aRange.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, aRange, args); 

    // Change the cells in the C1 to C7 range of the worksheet to the number 8. 
    aRange.Value2 = 8; 
    //  object missing = Type.Missing; 
    //  wb.SaveAs(@"C:\mymytest.xlsx", missing, missing, missing, missing, 
    //missing, XlSaveAsAccessMode.xlExclusive, missing, missing, missing, missing, //missing); 

} 
+0

Pourquoi utilisez-vous Type.InvokeMember() pour définir les valeurs des cellules? –

+0

J'ai obtenu cet exemple du site de MSDN ainsi j'essaye de l'employer et emploie Type.InvokeMember() poserais le problème pour sauver le dossier? – Eyla

+0

Non, il semble juste une façon étrange de le faire. –

Répondre

1

Avez-vous réellement l'autorisation d'enregistrer des fichiers à la racine de C? Je pense que par défaut, vous ne l'avez pas dans Windows 7.

Vous pouvez l'essayer en essayant juste d'enregistrer un fichier Excel manuellement C :.

+0

oui .... Je suis un administrateur. – Eyla

+1

Mon compte d'utilisateur fait partie du groupe Admin sur ma machine Win7 mais je viens d'essayer et je ne suis pas autorisé à enregistrer des fichiers à la racine de C. Cependant, de toute façon, je vous suggère d'essayer d'enregistrer le fichier avec un peu nom différent à un répertoire différent juste pour s'assurer qu'il n'y a pas de conflit avec une fois que vous avez exécuté ce code. J'utiliserais également le gestionnaire de tâches pour vérifier s'il existe d'anciennes instances ouvertes d'Excel qui auraient pu verrouiller le nom de fichier d'une manière ou d'une autre. –

+0

Merci pour votre aide. votre conseil a fonctionné pour moi mais que dois-je faire pour pouvoir enregistrer dans C: \ drive? – Eyla

0

Vérifiez les points suivants:

  • utilisation "C:\\mymytest.xlsx" comme nom de fichier (pas signe @ et double barre oblique inverse comme antislash caractère d'échappement)
  • vérifiez que vous ne disposez pas d'une autre copie de fonctionnement Excel - voir le numéro de Processus EXCEL dans le gestionnaire de tâches. Il se peut que vous ne fermiez pas correctement Excel, puis lorsque vous créez un nouveau classeur, vous pouvez démarrer une nouvelle instance.
    Vous pouvez vérifier s'il s'agit d'un problème en vous assurant que vous avez toujours un nom de fichier différent (au moins pour le test).
+0

Je suis d'accord avec votre deuxième suggestion, mais pas le premier, le signe @ signifie que ça va bien avec des barres obliques inverses, supprimant ainsi le signe @ et l'ajout d'un backslash supplémentaire ne devrait faire aucune différence. –

+0

Salut zendar, Je vous ai essayé mais ils n'ont pas fonctionné. J'ai changé le chemin et tous les processus Excel et exécutez le programme à nouveau, mais toujours la même erreur. – Eyla

+0

Je l'ai écrit parce que je ne crois pas qu'il utilise constant sur cet endroit. Je m'attendrais à ce qu'il construise un nom de fichier et qu'il puisse avoir un bug quelque part. – zendar

Questions connexes