Impossible d'ouvrir le fichier Excel en C #
J'ai le C# suivants en fonction de mon projet, qui est censé ouvrir et de renvoyer un classeur Excel existant objet:
Application _excelApp;
//...
private Workbook OpenXL(string path, string filename)
{
try
{
if (_excelApp == null)
{
_excelApp = new Application();
}
Workbook workBook = _excelApp.Workbooks.Open(path + filename, //Name
0, //Do not update links
true); //Open read-only
return workBook;
}
catch (Exception e)
{
_excelApp = null;
throw new ArgumentException("Error opening " + path + filename, e);
}
}
Mais quand je le lance avec "C:\" et de "scratch.xlsx" l'Open() qui déclenche le message d'erreur suivant:
Microsoft Excel cannot access the file 'C:\scratch.xlsx'. There are several possible reasons:
• The file name or path does not exist.
• The file is being used by another program.
• The workbook you are trying to save has the same name as a currently open workbook.
Le fichier et le chemin d'accès n'existe pas: je l'ai copié le chemin à partir du message d'erreur et collé dans une fenêtre de commande et le chargement du fichier dans Excel.
Le fichier n'est pas verrouillé: Excel peut ouvrir bien, mais mon programme ne peut pas, même après un redémarrage.
Je ne suis pas d'essayer de l'enregistrer, je suis en train de l'ouvrir donc la dernière option n'est pas pertinent.
Je suis à une perte de comprendre pourquoi ce simple morceau de code ne fonctionne pas. Toutes les suggestions sont grandement appréciés.
[modifier]
J'ai maintenant essayé d'ouvrir ce fichier à partir de mon lecteur réseau (M:) et à partir d'une clé USB. Ce fut en vain.
L'application est en fait un service de Windows, qui s'exécute sous le compte système local et de génération de rapports. Actuellement, il écrire des rapports au format CSV sans les problèmes d'accès que ce soit. Je suis maintenant essayer de l'obtenir pour ouvrir un fichier excel comme un modèle de rapport et de remplir les différents champs. C'est lors de l'ouverture du fichier Excel qu'il échoue. Je pense que l'administrateur de l'option de compte tout le monde est suggère, c'est un leurre, car il peut écrire des fichiers CSV wityh pas de problème.
[/edit]
--- Alistair.
source d'informationauteur user41013
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la page suivante:
http://social.msdn.microsoft.com/Forums/en-US/b81a3c4e-62db-488b-af06-44421818ef91/excel-2007-automation-on-top-of-a-windows-server-2008-x64
Où il est dit que...
L'interlocuteur, puis il décrit exactement la situation que je suis dans un Service Windows ne peut pas ouvrir un fichier Excel, bien que le même code dans un programme de ligne de commande n'a pas de problème.
La réponse conseille de créer le dossier suivant:
J'ai essayé et cela a fonctionné un régal! Quelqu'un peut-il expliquer pourquoi il est nécessaire et aucun inconvénients?
Merci,
--- Alistair.
Exécuter le programme en tant qu'administrateur, le C:/n'est pas accessible par un programme, à moins que l'utilisateur est en cours d'exécution en tant qu'administrateur.
Vous pouvez faire votre programme invite l'utilisateur, il doit être exécuté en tant qu'administrateur de l'altération de la ApplicationManifest: Comment puis-je forcer mon .NET application à exécuter en tant qu'administrateur?
J'ai été en cours d'exécution dans la même question, et
J'ai étudié les informations à propos de "piratage du registre".
Après tout, j'ai trouvé une autre solution qui change pas les valeurs de registre
et tout fonctionne correctement.
Cette solution est ...
・Windows Server 2008 x64
Veuillez vous rendre ce dossier.
・Windows Server 2008 x86
Veuillez vous rendre ce dossier.
...au lieu de dcomcnfg.exe.
Cette opération prit la bureautique problèmes dans mon système.
Un dossier sur le Bureau semble être nécessaire dans le systemprofile dossier pour ouvrir un fichier Excel.
Il disparaît de la Windows2008, Windows2003 eu le dossier,
et je pense qu'il l'origine de cette erreur.
Je pense que c'est plus sécuritaire que sur le registre "hack".
Si vous essayez cette solution, s'il vous plaît laissez-moi savoir les résultats.