La Mise À Jour De La Feuille Excel À L'Aide D'OleDb
Je suis en train de mettre à jour une seule cellule d'une feuille Excel. Remarque, dans mon exemple de code ci-dessous je suis à l'aide des variables de la colonne et de la ligne parce que cela va changer selon d'autres parties de mon programme, mais à des fins de débogage, j'ai mis à Un et 1, respectivement.
Droit maintenant, je reçois un message d'erreur indiquant "erreur de Syntaxe (opérateur absent) dans l'expression de requête '06:31 PM'.
S'il vous plaît ne pas simplement suggérer que je paramétrer parce que je sais que cela ne résoudra pas mon problème et je ne suis pas inquiet à propos de l'injection.
Merci d'avance à tout le monde.
string newColumn = "A";
string newRow = "1";
string worksheet2 = strMonth;
var cnnStr2 = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;IMEX=1;HDR=NO\"", textBox1.Text);
var cnn2 = new OleDbConnection(cnnStr2);
cnn2.Open();
string sql2 = String.Format("UPDATE [{0}$] SET {1}{2}={3}", worksheet2, newColumn, newRow, dtpTime.Text.Substring(0, 8));
OleDbCommand objCmdSelect = new OleDbCommand(sql2, cnn2);
objCmdSelect.ExecuteNonQuery();
cnn2.Close();
EDIT: Basé sur le lien Gerhard suggéré, j'ai changé le texte de la commande à la suivante:
string sql2 = String.Format("UPDATE [{0}{2}:{1}{2}] SET F1='{3}'", worksheet2, newColumn, newRow, dtpTime.Text.Substring(0, 8));
Ce produit maintenant, le message d'erreur "l'Opération doit utiliser une requête de mise à jour." Vous ne savez pas quoi faire maintenant. L'{1}{2}:{1}{2} donne l'unique plage de cellules sur la feuille de {0}$ et la F1 est la valeur par défaut de la colonne nom donné si il n'y a pas les noms de colonnes que j'ai précisé dans ma chaîne de connexion avec HDR=NO. Enfin, le {3} est le sous-chaîne dont je suis la mise à jour de la cellule et est entre guillemets simples, simplement parce que c'est ce que tout le monde semble le faire. Si j'ai supprimer les guillemets simples, il ne fait que produire une erreur différente.
- Ouais. Ensuite, la variation de l'erreur "Aucune valeur donnée pour un ou plusieurs paramètres obligatoires."
- Peut-être que ce sera vous aider: forums.asp.net/t/1214491.aspx/1
- Ou ce (Tutoriel): yoursandmyideas.wordpress.com/2011/02/05/...
- Grâce Gerhard! Ce lien a été très utile.
- Avez-vous envisagé d'utiliser Excel COM interop?
- Si vous l'avez résolu, le publier et de le marquer comme résolu. De cette façon, vous aidez d'autres gens et vous pouvez augmenter votre réputation.
- Je n'ai même pas vu ce commentaire jusqu'à ce que après que j'ai posté ma solution haha. Mais bonne idée Gerhard, les grands esprits bla bla bla.
Vous devez vous connecter pour publier un commentaire.
Mon édité chaîne de commande est correcte. Toutefois, afin de se débarrasser de la nouvelle erreur, je devais prendre "IMEX = 1" dans la chaîne de connexion. Pas sûr à 100% pourquoi ce qui fait que cela fonctionne, mais il n'.
Une chose que j'ai remarqué lors de la recherche de choses sur l'utilisation de oledb commandes est que beaucoup, comme moi, semblent être confondu avec ce que chaque partie de la commande est vraiment en train de faire. Je n'ai toujours pas pleinement comprendre certaines choses spéciales que vous pouvez ajouter à cela comme "OÙ", mais je voudrais ajouter un peu là pour vous aider toute personne qui trouve cette question et d'avoir des problèmes similaires.
Dans une instruction SELECT, si vous souhaitez sélectionner une seule cellule, vous pouvez utiliser quelque chose comme ceci:
"SELECT * from" sélectionnera tout de "worksheetName". Vous devez ensuite suivre le nom de votre feuille de calcul avec des "$". Prochaine, "{1}{2}:{1}{2}" est la plage de cellules que vous sélectionnez. Ici, en faisant de la colonne et de la ligne sur les deux côtés du côlon même, vous sélectionnez une plage d'une seule cellule. Par exemple, "E3:E3" serait de ne sélectionner que ce qui est dans la cellule E3.
Dans une instruction de mise à JOUR, si vous voulez mettre à jour une seule cellule, vous pouvez utiliser quelque chose comme:
La seule différence à noter ici est le "JEU de F1='{3}'". Ceci permettra de définir la cellule que vous avez spécifié dans votre gamme de ce qui est dans la variable de données. Notez l'utilisation de la touche "F1". C'est tout simplement une valeur par défaut qui est utilisé lors de la "HDR=NO" est spécifié dans la chaîne de connexion, en d'autres termes, il n'y a pas en-têtes de colonne ou de noms. Si vous aviez des en-têtes de colonne que vous l'utilisiez en place de la F1. Il est important de comprendre ici que la F1 ne correspond PAS à la cellule F1 en aucune façon.
Im passé un week-end avec ce problème. Enfin, j'ai pu résoudre. J'ai changé la chaîne de connexion pour:
Microsoft.Jet.OLEDB.4.0;Data Source= "chemin d'accès de fichier';Extended Properties='Excel 8.0'
AVEC la société IMEX ou HDR options.
Auparavant, j'ai vérifié et changé le cellprotection vérifier dans le fichier excel. J'espère que cela aidera d'autres.