Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1421 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [c#/vsto] remplacer et conserver la mise en forme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c#/vsto] remplacer et conserver la mise en forme

n°1357782
pop-pan
yay!
Posté le 02-05-2006 à 14:00:35  profilanswer
 

bon allez une question que le mvp .net et COM trouverons facile.
j'ai des documents words (plein!!) et ceux ci sont assez sales.
je cherche a degager les doubles espaces ou a rajouter des insécables apres certains mots
pour l'instant je fait ca en regexp sur un doc.Content.Text
evidemment le probleme c'est que la propriete Range.Text sort du texte brut, donc je perds toutes les mise en forme (style, ital, bold, exposant...)
 
donc c'est quoi la methode pour lancer des regexp et conserver la mise en forme?
parce que le Range.Find() il est gentil mais c'est juste un str_replace() d'apres ce que je vois.
 
actuellement :  
- j'ouvre un doc word  
- j'extrait le Texte
- je lance un Regexp.Replace(String, Pattern, String).

mood
Publicité
Posté le 02-05-2006 à 14:00:35  profilanswer
 

n°1357938
Arjuna
Aircraft Ident.: F-MBSD
Posté le 02-05-2006 à 17:08:18  profilanswer
 

tu peux t'inspirer de cette macro VBA à deux balles qui fait ce que tu veux sans les problèmes que tu évoques (Word 2003)
 

Code :
  1. Option Explicit
  2. Public Sub Test()
  3.     Dim str As String
  4.    
  5.     Dim i
  6.     On Error GoTo Fin
  7.    
  8.     For i = 1 To Selection.Characters.Count
  9.         If Selection.Characters(i) = Chr(11) Then Selection.Characters(i) = Chr(13)
  10.            
  11. Test:
  12.         If isBlank(Selection.Characters(i), False) And isBlank(Selection.Characters(i + 1), True) Then
  13.             Selection.Characters(i) = ""
  14.             GoTo Test
  15.         End If
  16.     Next
  17. Fin:
  18.     MsgBox ("Fini" )
  19. End Sub
  20. Public Function isBlank(str As String, withJump As Boolean) As Boolean
  21.     If str = " " Or str = Chr(9) Or (withJump And str = Chr(13)) Then
  22.         isBlank = True
  23.     Else
  24.         isBlank = False
  25.     End If
  26. End Function


 
Seul truc : faut faire CTRL+A avant de lancer la macro, je sais pas comment sélectionner tout le document depuis une macro :ange:

n°1357939
Arjuna
Aircraft Ident.: F-MBSD
Posté le 02-05-2006 à 17:09:30  profilanswer
 

A priori, faut simplement jouer avec la collection de Characters de la Selection, et non le Content. La collection permet de déplacer les tags de mise en forme automatiquement.

n°1359002
pop-pan
yay!
Posté le 03-05-2006 à 18:52:24  profilanswer
 

je fait une console app. a priori c'est la meme chose donc ca serait quelque chose comme :
(en c#)

Code :
  1. Word.Document doc = new Word.Document();
  2. doc.ActiveWindow.Selection.WholeStory();


et la t'as tout le doc en selection.
col de Characters? cool :), j'ai passé la journée d'hier a essayer de trouver et je suis passé a autre chose.
je vais essayer ca de ce pas, on va voir ce que ca va donner avec les regexp tiens.


Message édité par pop-pan le 03-05-2006 à 18:53:34
n°1359025
Arjuna
Aircraft Ident.: F-MBSD
Posté le 03-05-2006 à 20:27:06  profilanswer
 

Ben essaie de voir si tu peux retrouver les mêmes objets en C# qu'en VBA, y'a pas de raisons qu'ils soient pas les mêmes :)
 
Par contre, je veux bien que tu me dises comment t'arrive à jouer avec Word (donc par extension, Excel) à partir de C#. C'est avec VS 2005 ou VS 2003 ? J'ai essayé avec le 2005, et je me suis résigné à lancer un VBS qui bidouille dans Excel, faute de trouver comment le faire depuis C# :spamafote:

n°1359042
pop-pan
yay!
Posté le 03-05-2006 à 21:27:55  profilanswer
 

fw .net 2.0
sous VS2005
office 2003 + extensions support .net
t'installe vsto.
 
dans tes references tu rajoutes les lib COM office 11
 
dans ton code.
using Microsoft.Office;
using Office = Microsoft.Office.Core;
using Word = Microsoft.Office.Interop.Word;
 
et voila

n°1359413
Arjuna
Aircraft Ident.: F-MBSD
Posté le 04-05-2006 à 12:09:01  profilanswer
 

Hmmm. Ok.
Faudra à l'occasion que tu détailles un peu plus (vsto, le nom des objets COM, un petit exemple de code).
 
Parceque c'est ce que j'avais fait. Bon, faut dire que j'utilisais la Béta de VS 2005, et c'est peut-être pour ça que ça marchait pas. Je devrais avoir dès demain le DVD de la vrai version (chez M$, ils encaissent vite les abonnements MSDN, mais ils sont pas rapides pour envoyer les valises de DVD, on les a reçu avant-hier -au bout de 3 mois-, je les aurai ce soir :o)
 
Dans tous les cas, je crois que je vais rester avec mon VBS, car mon souci, c'est qu'il faut que ça marche aussi avec Excel 2000, et si possible 97.
 
D'ailleurs, personne n'a Office 97 sous la main pour me dire si ce script donne un résultat ?
 
Créer un fichier "excel.vbs" contenant le code ci-dessous, puis double-cliquer dessus :

Code :
  1. Option Explicit
  2. Sub test()
  3.     Dim xls
  4.     Dim wkb
  5.     Dim sht
  6.    
  7.     Set xls = CreateObject("Excel.Application" )
  8.     Set wkb = xls.Workbooks.Add()
  9.     Set sht = wkb.Sheets.Add()
  10.    
  11.     sht.Cells(1, 1).Value = "test"
  12.     sht.Cells(1, 2).Value = "1"
  13.     sht.Cells(1, 3).Value = "2"
  14.     sht.Cells(1, 4).Value = "=R1C2+R1C3"
  15.    
  16.     xls.Visible = True
  17. End Sub
  18. Call test()


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [c#/vsto] remplacer et conserver la mise en forme

 

Sujets relatifs
[Excel] Remplacer un texte dans une cellule exel[XSL-T] Affichage d'une liste XML sous forme de tableau HTML
Mise en forme / Alignement de boutonsRemplacer 2'500 en 2500
Personnalisation de la forme d'une zone de texteMise a jour feuille excel
[résolu] Problème fonction remplacer les accents[divers] Mettre en forme son code sur word
besoin aide pour remplacer fichier php par table sql? 
Plus de sujets relatifs à : [c#/vsto] remplacer et conserver la mise en forme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR