Jump to content

Import/Export d\'attributs avec Excel


Recommended Posts

Salut,

 

 

Un petit programme qui permet d'extraire des attributs et de ré-importer les valeurs modifiées un peu comme les commandes ATTIN et ATTOUT des Express Tools à ceci près qu'il utilise directement Excel plutôt qu'un fichier .txt et que les attributs des blocs dynamiques apparaissent sous le nom du bloc d'origine.

 

 

La classe Commands définit les commandes : EATT pour l'extraction et IATT pour l'importation. D'après mes tests elles fonctionnent sans encombres avec Excel 2003 et 2010.

 

 

Ces commandes utilisent trois classes qui peuvent être utilisées par ailleurs. ExcelReader et ExcelWriter définissent des méthodes pour lire et écrire dans une feuille Excel un peu à la manière des StreamReader et StreamWriter avec les fichiers texte. Par ailleurs des propriétés sont aussi définies dans ces classes pour accéder au fichier.

 

Pour assurer une compatibilité avec toutes les versions d'Excel, ces classes utilisent la "liaison tardive" (late binding).

 

Une autre classe : LateBindings définit des méthodes pour rendre la syntaxe des expressions de liaison tardive plus concises et explicites.

 

 

Les codes source.

 

 

Nouvelle version 2010-2012 ExcelAttribute.zip

Version 2013-? ExcelAttribute_19.zip

Extraire les deux DLLs correspondant à la version d'AutoCAD ciblée dans le même répertoire.

Charger dans AutoCAD avec NETLOAD ExcelAttribute.dll ou ExcelAttribute_19.dll suivant la version d'autoCAD (ExcelLateBinding.dll ou ExcelDynamic.dll sont des DLLs de ressources).

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Link to post
Share on other sites
  • Replies 79
  • Created
  • Last Reply

Top Posters In This Topic

Bonjour,

 

un petit souci. J'ai un message d'erreur lors de l'import

 

eUnknownHandle

à Autodesk.AutoCAD.DatabaseServices.Database.GetObjectId(Boolean

createIfNotFound, Handle objHandle, Int32 identifier)

à ExcelAttribute.Commands.ImportAttributes()

 

L'erreur semble provenir de certains Handle mal interprété : par ex j'ai un Handle valant 8E7 qui une fois mis sous Excel est considéré comme 8.00000E+07 soit 80000000

 

Je pense qu'il faudrait forcer les cellules des Handle au format Texte ou les faire précéder de l'apostrophe comme avec ATTOUT

 

Olivier

Support Technique Covadis

Link to post
Share on other sites

Merci pour le retour SuperCova.

 

J'ai corrigé le code en forçant toutes les colonnes utilisée au format Texte comme ça les attributs du style "002" sont conservés aussi.

 

 

Fabcad,

 

Si tu n'arrives pas à te connecter à AcadLabs, j'ai ajouté les codes source en téléchargement dans le premier message.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Link to post
Share on other sites
Re,

 

Après quelques autres tests sur Excel 2007, plantage systématique du logiciel Excel, Mais les modifs sont bien prisent en compte,... :exclam:

 

Peux tu préciser :

Avec EATT ou IATT ?

Comment se manifeste ce "plantage systématique du logiciel Excel" ?

Excel est-il ouvert avant le lancement de la commande ?

Si oui, le fichier .xls(x) ouvert est-il celui lié au dessin ?

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Link to post
Share on other sites

Nouvelle version : le forçage des cellules au format Texte est directement effectué dans ExcelWriter.Write() et ExcelWriter.WriteLine() quand la donnée en entrée est une chaîne (String).

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Link to post
Share on other sites

D'après ce que tu décris, le problème viendrait plutôt d'Excel.

Au moment où on propose d'ouvrir/afficher le fichier Excel l'extraction a été faite et enregistrée et d'après ce que tu dis, c'est au moment d'enregistrer des modifications que ça plante à ce moment là la commande EATT est terminée.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Link to post
Share on other sites

Salut,

j'ai testé rapidement, ça m'a l'air OK.

ça n'a pas l'air de prendre les attributs invisibles ou sur calques gelés, non ?

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Link to post
Share on other sites

ça n'a pas l'air de prendre les attributs invisibles ou sur calques gelés, non ?

 

Chez moi les attributs invisibles ou sur des calques gelés sont traités comme les autres.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Link to post
Share on other sites

... ah ouaip, désolé !

En fait je pense plutôt que c'est les attributs fixes que ça ne prends pas, non ?

(j'ai des blocs avec attributs, et il ne les sélectionne pas).

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Link to post
Share on other sites
  • 4 months later...

Salut à tous.

 

Je viens de charger le programme, je souhaite l'essayer sur un fichier pour extraire les attributs de blocs mais lorsque je lance la commande EATT, en retour j'ai: Pas encore d'association d'attributs et je ne peux rien sélectionner.

J'ai 94 blocs avec attributs à extraire

Je ne comprends pas bien, là :blink:

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour la maison; Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Link to post
Share on other sites

Salut à tous.

 

Je viens de charger le programme, je souhaite l'essayer sur un fichier pour extraire les attributs de blocs mais lorsque je lance la commande EATT, en retour j'ai: Pas encore d'association d'attributs et je ne peux rien sélectionner.

J'ai 94 blocs avec attributs à extraire

Je ne comprends pas bien, là :blink:

 

Bonjour à toutes et tous,

 

!!!!!!!!!!

 

Même sur un nouveau fichier (vierge, donc,), je peux appeler la commande,...:unsure: Et toi ?

 

Commande: eatt

 

Choix des objets: Spécifiez le coin opposé: 0 trouvé(s)

Choix des objets:

 

Au chargement d'un nouveau fichier , as-tu bien ces lignes ?

 

_netload Nom du fichier d'assemblage:

ExcelAttribute.dll

 

(Si tu possèdes un fichier "accad.lsp" seulement,... => syntaxe :

(command "_netload" "ExcelAttribute.dll ")

)

Edited by lili2006

Civil 3D 2021 - COVADIS_17.1d

https://www.linkedin...3%ABt-95313341/

Link to post
Share on other sites

Re,

 

Tiens, en testant sur mon MAP 2012, voici le message d'erreur ??!!

 

Impossible de charger l'assemblage. Détails de l'erreur:

System.IO.FileLoadException: Impossible de charger le fichier ou l'assembly

'file:///D:\AUTOCAD -PERSONNALISATION\PROG PERSOS\ExcelAttribute.dll' ou une de

ses dépendances. L'opération n'est pas prise en charge. (Exception de HRESULT :

0x80131515)

Nom de fichier : 'file:///D:\AUTOCAD -PERSONNALISATION\PROG

PERSOS\ExcelAttribute.dll' ---> System.NotSupportedException: Tentative de

chargement d'un assembly à partir d'un emplacement réseau qui aurait entraîné

l'utilisation de l'assembly en mode Bac à sable (sandbox) dans les versions

antérieures du .NET Framework. Cette version du .NET Framework n'activant pas

la stratégie CAS par défaut, ce chargement peut être dangereux. Si ce

chargement n'est pas destiné à utiliser l'assembly en mode Bac à sable

(sandbox), activez le commutateur loadFromRemoteSources. Pour plus

d'informations, consultez http://go.microsoft.com/fwlink/?LinkId=155569.

à System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String

codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint,

StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean

forIntrospection, Boolean suppressSecurityChecks)

à System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String

codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint,

StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean

forIntrospection, Boolean suppressSecurityChecks)

à System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName

assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean

forIntrospection, Boolean suppressSecurityChecks)

à System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile,

Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm

hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks,

StackCrawlMark& stackMark)

à System.Reflection.Assembly.LoadFrom(String assemblyFile)

à Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)

à loadmgd()

 

 

Commande:

Commande:

Commande: EATT

Le fichier eatt(.lsp/.exe/.arx) n'a pas été trouvé dans les dossiers du chemin

de recherche.

Vérifiez l'installation des fichiers de support et réessayez.nil

 

Commande:

Commande:

Commande:

Commande: IATT

Le fichier Iatt(.lsp/.exe/.arx) n'a pas été trouvé dans les dossiers du chemin

de recherche.

Vérifiez l'installation des fichiers de support et réessayez.nil

 

Commande:

Civil 3D 2021 - COVADIS_17.1d

https://www.linkedin...3%ABt-95313341/

Link to post
Share on other sites

Salut à tous.

 

Je viens de charger le programme, je souhaite l'essayer sur un fichier pour extraire les attributs de blocs mais lorsque je lance la commande EATT, en retour j'ai: Pas encore d'association d'attributs et je ne peux rien sélectionner.

J'ai 94 blocs avec attributs à extraire

Je ne comprends pas bien, là :blink:

 

Je pense qu'il s'agit d'un conflit avec une autre commande EATT (un LISP de Patrick_35 ?).

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Link to post
Share on other sites

Salut Lili.

 

Quand je charge le fichier .dll, j'ai ceci ans la ligne de commande:

 

Commande: NETLOAD
Impossible de charger l'assemblage. Détails de l'erreur: 
System.IO.FileLoadException: Impossible de charger le fichier ou l'assembly 
'file:///G:\MOE\01_Interne\8 Atelier d'Architecture\Dossiers 
personnels\Steven\Lisps\ATTIN - ATTOUT vers Excel\ExcelAttribute.dll' ou une de 
ses dépendances. L'opération n'est pas prise en charge. (Exception de HRESULT : 
0x80131515)
Nom de fichier : 'file:///G:\MOE\01_Interne\8 Atelier d'Architecture\Dossiers 
personnels\Steven\Lisps\ATTIN - ATTOUT vers Excel\ExcelAttribute.dll' ---> 
System.NotSupportedException: Tentative de chargement d'un assembly à partir 
d'un emplacement réseau qui aurait entraîné l'utilisation de l'assembly en mode 
Bac à sable (sandbox) dans les versions antérieures du .NET Framework. Cette 
version du .NET Framework n'activant pas la stratégie CAS par défaut, ce 
chargement peut être dangereux. Si ce chargement n'est pas destiné à utiliser 
l'assembly en mode Bac à sable (sandbox), activez le commutateur 
loadFromRemoteSources. Pour plus d'informations, consultez 
http://go.microsoft.com/fwlink/?LinkId=155569.
  à System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String 
codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, 
StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean 
forIntrospection, Boolean suppressSecurityChecks)
  à System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String 
codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, 
StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean 
forIntrospection, Boolean suppressSecurityChecks)
  à System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName 
assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean 
forIntrospection, Boolean suppressSecurityChecks)
  à System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, 
Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm 
hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, 
StackCrawlMark& stackMark)
  à System.Reflection.Assembly.LoadFrom(String assemblyFile)
  à Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)
  à loadmgd()

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour la maison; Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Link to post
Share on other sites

Arf, comme j'ai fais autre chose au moment de poster ma réponse, Vous avez répondu avant que je ne clique sur Répondre.:P

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour la maison; Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Link to post
Share on other sites

Je pense qu'il s'agit d'un conflit avec une autre commande EATT (un LISP de Patrick_35 ?).

 

Salut Gile,

 

J'ai décharger tous mes lisps mais ça ne change rien.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour la maison; Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...