Recherche de texte dans un document word et de le remplacer par un tableau
Je suis en train de rechercher un document word de texte, puis de le remplacer par un tableau personnalisé. Je semble presque avoir de travail, mais il semble pour ajouter la table à mi-chemin à travers le mot précédent, plutôt que de droit où il a trouvé le texte.
C'est ma fonction
public void AddTableAtCursor(string tabledata,
string find,
Boolean flh = true,
string name = "Table")
{
object replaceAll = Word.WdReplace.wdReplaceAll;
Word.Range srng = Application.ActiveDocument.Content;
srng.WholeStory();
srng.Find.ClearFormatting();
srng.Find.Text = find;
srng.Find.Replacement.ClearFormatting();
srng.Find.Replacement.Text = "";
int FirstChr = srng.Text.IndexOf(find);
if (FirstChr != -1)
{
Word.Range ts =
Application.ActiveDocument.Range(FirstChr, FirstChr);
this.Application.Selection.TypeParagraph();
srng.Find.Execute(
ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref replaceAll, ref missing,
ref missing, ref missing, ref missing);
string[] rows = tabledata.Split('|');
string[] c = rows[0].Split('^');
rows[0] = null;
object styleName = "Light List - Accent 1";
Word.Table tbl = null;
Word.Range currentSelection = srng;
int hclen = c.Length;
if (TomData.IndPrices != "on") { hclen = hclen - 2; }
tbl = Application.ActiveDocument.Content.Tables.Add(
ts, rows.Length + 1, hclen);
tbl.set_Style(ref styleName);
tbl.PreferredWidth = 90;
tbl.PreferredWidthType =
Word.WdPreferredWidthType.wdPreferredWidthPercent;
//First Row, Put the name into the first cell
for (int i = 1; i <= hclen; i++)
{
if (i == 1)
{
tbl.Cell(1, i).Range.InsertBefore(name);
}
else
{
tbl.Cell(1, i).Range.InsertBefore("");
}
}
//2nd row, put the headers in
for (int i = 1; i <= hclen; i++)
{
int t = i - 1;
tbl.Cell(2, i).Range.InsertBefore(c[t]);
}
int tblrow = 3;
//after that just put the data
for (int rc = 0; rc < rows.Length; rc++)
{
if (rows[rc] != null)
{
string[] coldata = rows[rc].Split('^');
int tblcol = 1;
int clen = coldata.Length;
if (TomData.IndPrices != "on") { clen = clen - 2; }
for (int nc = 0; nc < clen; nc++)
{
tbl.Cell(tblrow, tblcol).Range.InsertBefore(
coldata[nc]);
tblcol++;
}
tblrow++;
}
}
}
}
Ce que je fais mal?
Vous devez vous connecter pour publier un commentaire.
Vous avez beaucoup de problèmes ici, donc, je vous recommande de travailler à travers 1 étape à la fois.
1) vous avez réussi à TROUVER le texte à remplacer. Puisque vous êtes de la remplacer avec une table, vous ne pouvez pas vraiment utiliser le REPLACEALL option de l'objet, afin de se débarrasser de tout cela. Obtenir le CONTENU de portée du document dans une variable de Portée, le TROUVER à partir de ça, et puis exécutez votre trouver. La gamme que vous avez obtenu le TROUVER à partir de sera remis à point à la spécificité de ce texte (le cas échéant) et PUIS vous pouvez le manipuler gamme.
Par exemple
2) Ensuite, vous êtes à la confusion des Décalages au sein d'une chaîne, avec des décalages au sein d'un document, comme dans ce code
Qui parfois, mais rarement, de travail. Il dépend de beaucoup de choses dans Word. Mieux trouver ce que vous avez besoin de l'aide de la recherche et de manipuler le texte uniquement avec les gammes.
Il y a un très bon article ici sur RECHERCHER et REMPLACER dans word.
http://msdn.microsoft.com/en-us/library/aa211953%28office.11%29.aspx
Je voudrais écrire un programme pour TROUVER et SÉLECTIONNER le texte que vous êtes après la première. Assurez-vous que fonctionne dans tous les cas, ENSUITE, à l'aide de la gamme de ce texte, le travail avec le remplaçant par un tableau.
une fois que vous avez trouvé le texte que vous êtes après