0
votes

Comment importer des datates dans Excel sans boucle en utilisant VB

J'essaie d'exporter un résultat de table SQL dans Excel en utilisant le prisme bleu. Actuellement, il est fait en exportant des résultats SQL à la collecte, puis de la collecte à Excel. Cela prend une période plus longue (10 minutes) pour exporter ~ 20k enregistrements. En effet, le VBO utilise pour chaque boucle.

J'essaie d'utiliser un code VB personnalisé pour charger la collection dans Excel à l'aide de la mise à jour en vrac.

Peut-on m'aider à ce sujet?

J'ai essayé le code ci-dessous mais il ne fonctionne pas xxx

erreur que je reçois est: membre non trouvé. (Exception de HRESULT: 0x80020003 (DISP_E_MemberNotfound))


1 commentaires

En ce qui concerne "j'essaie d'exporter un résultat de table SQL dans Excel", si ouvert / possible envisagez d'examiner un échantillon de code de la mine qui parcourt des étapes pour exporter une table SQL-Server pour Excel à l'aide de OpenRowset.


3 Réponses :


2
votes

Je pense que vous recherchez cette fonction de la feuille de calcul:

ws.SetRangeValues(RowIndex, ColumnIndex, Array(, ))


2 commentaires

En tant que personne qui a dû remplir beaucoup de feuilles Excel avec des données de VB.net, je peux confirmer que cette méthode est beaucoup plus rapide que de définir chaque cellule une par une. Bonne réponse.


Merci pavlinll. Les données sont situées dans une étape de collecte (datatable) dans le prisme bleu. Par conséquent, le tableau (,) ne fonctionne pas.



0
votes

La façon dont vous approchez de cela semble pas très efficace et que vous attrapez des résultats d'un endroit pour mettre dans une autre et ensuite dans une autre. Voici deux autres alternatives que vous pouvez essayer?

Automatiser la commande via cmd

SQLCMD -S. -d azuredemo50 -E -s -s, -w -q "Select * de dbo04.exceltest"> ExcelTest.csv

quelque chose comme ça plus d'informations ( https://www.excel-sql-server.com/sql-server-export-a-excel-utilisant-bcp-sqlcmd-csv.htm )

Ici, vous pouvez exécuter une commande à travers la ligne CMD avec un prisme bleu, puis poussez la valeur où vous souhaitez que cela se passe sans avoir à mettre la mémoire dans le prisme bleu.

Utilisez un objet dB comme OLEDB pour analyser une commande directement dans la DB pour appuyer sur les valeurs dans Excel.

Dans ces deux options, les données ne pénètrent jamais dans le blanchismism, vous n'avez pas l'occasion de sauvegarder, de modifier, etc. sur les données du blanchisme, mais il est beaucoup plus rapide de fonctionner.

Test: Fabriqué une base de données avec des lignes de 20k 5 Colonnes Les données exportation avec CMD ci-dessus ont pris 1,7 seconde pour exécuter une plis supplémentaire 1/2 secondes pour le blanchismismismismistique de 3 à 5 secondes avec une allocation de mémoire plus petite que votre mise en œuvre actuelle.

Est-ce quelque chose comme vous cherchiez?


2 commentaires

Merci Dexter. La première option peut-elle être viable pour l'exportation XLSX? ou seulement CSV?


hmmmm question plus difficile. Je pense ici ce que vous auriez besoin de faire, c'est utiliser la commande OpenRowset lors de l'exécution de SQLCMD. Votre requête ressemblerait à quelque chose comme cet insert dans OpenRowset ('Microsoft.ace.Onedb.12.0', 'Excel 12.0; Base de données = C: \ Utilisateurs (Ourname) (chemin de fichier à enregistrer) \ sql data.xlsx;', 'Sélectionnez * à partir de [feuille1 $]') Sélectionnez * à partir de dbo.tablename Exécutez cette requête avec SQLCMD sur la ligne CMD Vous pouvez disposer de la création de la requête où stocker les données par opposition à SQLCMD le faire. De cette façon, vous pouvez l'obtenir dans le format XLSX. aussi pourrait simplement enregistrer comme csv puis ouvrir et sauver comme avec BP



0
votes

Merci pour vos réponses. J'ai ajouté une nouvelle page appelée Erit Collection - Stade de code rapide et ajouté dans le prisme bleu MS Excel VBO. Collé le code ci-dessous xxx


0 commentaires