Zmiana czcionki jednej litery w pliku word

0

Część, piszę program edytujący plik word i dokonujący w nim pewne zmiany. Wiecie może czy jest to możliwe i ewentualnie jak zmienić czcionkę pojedynczego wyrazu bądź litery?

Np.
Mam tekst : "Plik do edycji w C#", czcionka: Arial i chciałbym zeby czcionka "P" -> Times New Roman a "C" -> Courier New. Da się tak?

0

Przy działaniach na plikach Worda polecam bibliotekę DocX.

0

Napisałem tyle ale nic to nie zmienia w pliku, czcionki zostają niezamienione
,gdzie:
litery[i]- tablica kolejnych wielkich liter w zmienainym pliku

 
 private void bHide_Click(object sender, EventArgs e)
        {
            if (rtb1.Text.Length <= liczba / 3)
            {
                object path = @sciezka;
                object read = "ReadWrite";
                object readOnly = false;
                object o = System.Reflection.Missing.Value;
                Microsoft.Office.Interop.Word._Document oDoc = w.Documents.Open(ref path, ref o, ref readOnly, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o);
                try
                {
                    string kod = rtb1.Text;
                    w.Selection.Start = 0;
                    int iter = 0;
                    int indexZ = 0;
                    int j = 0;
                    for (int i = 0; i < rtb1.Text.Length; i++)
                    {
                        object findStr = litery[i];
                        while (!znaki[j, 0].Equals(kod[i].ToString()))
                        {
                            j++;
                        }
                        indexZ = j;
                        while (iter != 3)
                        {


                            while (w.Selection.Find.Execute(ref findStr))
                            {
                                w.Selection.Font.Name = czcionki[indexC, Int32.Parse(znaki[indexZ, iter])];
                                MessageBox.Show(czcionki[indexC, Int32.Parse(znaki[j, iter])]);
                            }
                            iter++;
                        }
                        iter = 0;
                        j = 0;

                    }
                    oDoc.Save();
                    oDoc.Close();
                }
                catch (Exception ex)
                {
                    oDoc.Close(ref o, ref o, ref o);
                    MessageBox.Show(ex.Message);
                }
            }
            else 
            {
                MessageBox.Show("Liczba znakow do ukrycia jest za długa");
            }
        }
0

IMO używanie Office Interop na prawdę nie ma sensu. Głównie to jest wrapper COM'a, którego używanie jeżeli na prawdę się tego nie potrzebuje mija się z celem.
Więc powtarzam: masz darmową bibliotekę DocX, w której zrobisz to wszystko przyjemniej.

0

przebudowa całego projektu na nową bibliotękę + czas na zapoznanie się z nią jest chyba za dlugim okresem by to było warte.
Uprościłem problem do tej pętli:

 while (iter != 4)
                        {
                            w.Selection.Start = 0;
                            object findStr = litery[lit].ToString();
                            while (w.Selection.Find.Execute(ref findStr,
                                    ref o, ref o, ref o, ref o, ref o, ref o,
                                    ref o, ref o, ref o, ref o, ref o, ref o,
                                    ref o, ref o))
                            {
                                w.Selection.Font.Name = czcionki[indexC, Int32.Parse(znaki[indexZ, iter])].ToString();
                                MessageBox.Show(czcionki[indexC, Int32.Parse(znaki[indexZ, iter])]);
                            }
                            iter++;
                            lit++;
                        }
 

Mam tekst w którym oczywiście występują wielkie litery. Chciałbym kolejnym wielkim literom zmieniać czcionki na inne ale tylko im. Pętla jak wyżej powoduje zmianę tylko pierwszej litery i dalej nie. indexC- indeks czcionki w tablicy czcionek, drugi parametr to czcionka podobna na którą dokonywana jest zamiana. w kolejnych krokach pętli to fiindStr przypisywane są znaki odpowiadające kolejnym wielkim literom w tekście.

1

Nie rozważałeś zmiany .NET na 4.0 ? Od wersji C# 4.0 w której jest typ dynamic pisanie pod Office jest dużo przyjemniejsze, nie ma tych wszystkich ref itp.

1 użytkowników online, w tym zalogowanych: 0, gości: 1