[C#] Word - programowe wypełnienie pól formularzy

0

Witam!
Mam pewien problem z wypełnieniem programowo pola tekstowego formularza.
Mam stworzony dokument Word-a w którym jest pole tekstowe formularza o nazwie "Tekst1" i CheckBox o nazwie "Wybór1".
Chciałbym aby po otwarciu istniejącego dokumentu móc programowo odczytać-zapisać pole tekstowe i zaznaczyć CheckBox-a.
Dokument jest w trybie ograniczonego edytowania, dozwolone jest tylko wypełnianie formularzy.
Mogę odczytać pole tekstowe i zaznaczyć CheckBox, ale gdy chcę wypełnić pole tekstowe to wyrzuca mi wyjątek: "Nie możesz edytować tego zaznaczenia, ponieważ jest objęte ochroną."
Zaznaczam, że jak otworzę plik z poziomu Worda to mogę normalnie wypełnić to pole.
W załączniku plik Worda.

Proszę o pomoc

using Word = Microsoft.Office.Interop.Word;

           private void button3_Click(object sender, EventArgs e)
            {
            Word._Application WordApp;
            Word._Document WordDoc;
            WordApp = new Word.Application();
            WordApp.Visible = true;
            WordDoc = WordApp.Documents.Open(@"E:\Programowanie_Word\kontrolki.docx");
 
            foreach (Word.FormField field in WordDoc.FormFields)
            {
                switch (field.Name)
                {
                    case "Tekst1":
                        textBox1.Text = field.Range.Text; //to działa tzn poprawnie sczytuje pole tekstowe
                        field.Range.Text = "texcik"; //tu wywala wyjątek, że pole objęte jest ochroną
                        break;
                    case "Wybór1":
                        field.CheckBox.Value = true; //to działa
                        break;
                    default:
                        break;
                }
            }
        }

1

A nie masz zabezpieczonego dokumentu? Dlatego Ci błąd wywala że jest pod ochroną

0

Tak. Dokument jest zabezpieczony. Włączone jest tylko wypełnianie pól formularzy. To pole jest bez problemu dostępne z poziomu Worda-a.
Ciekawe jest, że CheckBox można normalnie odhaczyć.

0

Odblokowanie dokumentu wprowadza spory zamęt, ponieważ wprowadzenie tekstu do pola powoduje skasowanie tego pola i całkowicie rozwala formatowanie dokumentu.
Ideą formularza jest to aby wprowadzać dane tylko tam gdzie trzeba a resztę pozostawić w spokoju.
W tym przypadku mimo odblokowania wypełniania pól formularza do edycji, nic poza CheckBox-em nie można edytować.

0

Właśnie o to chodzi, że mogę robić coś źle :( Niestety nie mam pomysłu jak inaczej to ugryźć.

0

Pisanie programu zacząłem od sprawdzenia czy uda mi się wypełnić pola formularza, więc to jest jak na razie cały kod.

1

Jednak źle się do tego zabrałem :)

Aby wypełnić pole tekstowe formularza należy po prostu użyć:
dla kontrolek formularzy starego typu:

WordDoc.FormFields["Tekst1"].Result = "texcik";  // gdzie "Tekst1" jest nazwą zakładki pola

dla kontrolek formularzy nowego typu:

//wskazanie po tagu
WordDoc.SelectContentControlsByTag("tag nowego pola")[1].Range.Text = "texcik"; 
// lub

//wskazanie po tytule
WordDoc.SelectContentControlsByTitle("tytuł nowego pola")[1].Range.Text = "texcik";

jako lekturę polecam: link

W ten sposób można wypełniać pola w zabezpieczonym dokumencie.
Dzięki za zainteresowanie, może komuś się przyda.

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