Avis de non-responsabilité: Je sais que c'est une mauvaise façon de faire les choses. C'est la seule option que nous avons avec notre client.Lire à partir d'Excel en utilisant OleDb dans un service Windows?
Problème:
Nous avons besoin de lire les données à partir d'un fichier Excel chaque quantité x de temps. Les données changent constamment via un plug-in Excel tiers. L'environnement de l'application est Windows XP, SP1 et .Net 2.0. Aucune mise à niveau du système d'exploitation vers SP2/3 ou mise à niveau du .Net Framework. Encore une fois, tout cela est par les paramètres du client.
Voici le code actuel, nous avons:
String sConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Settings.ReutersFilePath + ";Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\""; using (OleDbConnection objConn = new OleDbConnection(sConnectionString)) { try { objConn.Open(); _dataSet = new DataSet(); OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + ConfigurationManager.AppSettings["Excel.WorksheetName"] + "$]", objConn); OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(); objAdapter1.SelectCommand = objCmdSelect; objAdapter1.Fill(_dataSet); _dataTable = _dataSet.Tables[0]; objConn.Close(); // Persists new data to a database. UpdateSQL(); } catch (Exception ex) { } finally { _isCurrentlyProcessing = false; if (objConn != null && (objConn.State != ConnectionState.Broken || objConn.State != ConnectionState.Closed)) { objConn.Close(); } } }
Ce code fonctionne lors de l'exécution de la console ou une forme Windows, mais quand nous courons d'un service Windows, il ne peut pas accéder au fichier Excel. Existe-t-il une limite dans XP w/SP1 qui ne permet pas l'interaction avec les applications de bureau comme dans Vista? Cela peut-il être fait à partir d'un service? La fiabilité de l'exécution à partir d'un service est très nécessaire du client.
Edit:
Le service est en cours d'exécution en tant que LocalSystem.
Edit # 2:
L'erreur que je reçois lors de l'exécution d'un service est: Le moteur de base de données Microsoft Jet ne peut pas ouvrir le fichier « ». Il est déjà ouvert exclusivement par un autre utilisateur, ou vous avez besoin d'une autorisation pour afficher ses données.
Le fichier Excel est ouvert sur le bureau, mais il doit être ouvert pour recevoir des mises à jour de l'application tierce.
Je n'ai jamais dérangé avec aucun des trucs de macro Excel. être la meilleure option Je suppose que la macro d'Excel peut détecter des changements aux cellules et ensuite déclencher la logique? – Gromer
Oui, certainement .Les événements sont déclenchés à plusieurs niveaux, les événements de cellules seraient manipulés au niveau de la feuille (d'autres niveaux sont Application , Workbook et Chart) et vous obtenez les cellules qui ont changé passé au gestionnaire en tant que plage –
Un exemple de code ici http://support.microsoft.com/kb/302815 –