Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1686
  • Last Modified:

Office.Interop Word 2010 FormFields Iteration

Using these directions...

http://office.microsoft.com/en-us/word-help/create-forms-that-users-complete-in-word-HA010030746.aspx

I have a Word 2010 docx form I created using the developer tab in Word. I added a textbox, buildingblock control, DropDown List Control. I saved the document.


using Word = Microsoft.Office.Interop.Word;
            var wordApp = new Word.Application();
            wordApp.Visible = true;
            Word.Documents docs = wordApp.Documents;
            Word.Document doc = docs.Open(@"c:\temp\test3.docx", Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            Word.Range range = doc.Range(0, 0);


            Word.FormFields fields = doc.FormFields;
            foreach (Word.FormField field in fields)
                MessageBox.Show(field.Name + " " + field.Result + "\n");


            doc.Close(Type.Missing, Type.Missing, Type.Missing);
            wordApp.Quit(Type.Missing, Type.Missing, Type.Missing);


The issue is that the C# loop doesn't hit any fields. I don't understand why not. I have tried
references:
Microsoft.Office.Interop.Word Version 12.0.0.0
Microsoft.Office.Interop.Word Version 14.0.0.0

Can you see my mistake?

I am using Windows 7 Ultimate x64.

Thanks,

Geoff
test3.docx
0
gswitz
Asked:
gswitz
  • 4
  • 3
  • 2
2 Solutions
 
Subrat (C++ windows/Linux)Software EngineerCommented:
Try it.......

object fname = @"c:\temp\test3.docx";
Word.Document doc = docs.Open(ref fname, Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

follow:
http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_26629764.html
0
 
Subrat (C++ windows/Linux)Software EngineerCommented:
object fname = @"c:\temp\test3.docx";
            object missing = System.Reflection.Missing.Value;
            object ReadOnly = true;

            Word.Document doc = docs.Open(ref fname, ref missing,
                                          ref ReadOnly, ref missing, ref missing,
                                          ref missing, ref missing, ref missing,
                                          ref missing, ref missing, ref missing,
                                          ref missing, ref missing, ref missing,
                                          ref missing, ref missing);
0
 
gswitzAuthor Commented:
I copied this in verbatim and my
foreach (Word.FormField field in fields)
loop still didn't find any fields.
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
Subrat (C++ windows/Linux)Software EngineerCommented:
See the code. This may help you to proceed.
var wordApp = new Word.Application();
            wordApp.Visible = true;
            Word.Documents docs = wordApp.Documents;
            object fname = @"c:\temp\test3.docx";
            object missing = System.Reflection.Missing.Value;
            object ReadOnly = true;
           // object isVisible = true;
            Word.Document doc = null;
            try
            {
                
     
           
                doc = docs.Open(ref fname, ref missing,
                                              ref ReadOnly, ref missing, ref missing,
                                              ref missing, ref missing, ref missing,
                                              ref missing, ref missing, ref missing,
                                              ref missing, ref missing, ref missing,
                                              ref missing, ref missing);          


                //doc.Activate();

                Console.WriteLine("No Of tables=" + doc.Tables.Count);
                Word.Range rng;
                foreach (Word.Table tbl in doc.Tables)
                {
                    int cl = tbl.Columns.Count;
                    int rows = tbl.Rows.Count;
                    Console.WriteLine("No of cols = " + cl + " Rows = " + rows);
                    for (int i = 1; i <= rows; ++i)
                    {
                        for (int c = 1; c <= cl; c++)
                        {

                            rng = tbl.Cell(1, 1).Range;
                            rng.SetRange(tbl.Rows[i].Cells[c].Range.Start,
                                tbl.Rows[i].Cells[c].Range.End - 1);
                            Console.Write(rng.Text); Console.Write(" ");
                        }
                        Console.WriteLine();

                    }

                }

         
                

            }
            catch (Exception ee)
            {
                Console.WriteLine("Error!" + ee.Message);
            }

            finally
            {
                if(doc != null)
                    doc.Close(ref missing, ref missing, ref missing);
                if (wordApp != null)
                wordApp.Quit(ref missing, ref missing, ref missing);
            }

Open in new window

0
 
GrahamSkanCommented:
There are no form fields in your document. There is only a two-column, four-row table with text in each cell.
0
 
GrahamSkanCommented:
Oops. I missed the fact that there are Content controls. This is how to list them in VB. Sorry I don't have C#.


Dim cc As ContentControl
For Each cc In ActiveDocument.ContentControls
    MsgBox cc.Range.Text
Next cc

Open in new window

0
 
gswitzAuthor Commented:
Great, Graham! This gets me  very close. Could you show me how to change the value in the Gender control to Female?

Thanks!
0

Featured Post

How to Use the Help Bell

Need to boost the visibility of your question for solutions? Use the Experts Exchange Help Bell to confirm priority levels and contact subject-matter experts for question attention.  Check out this how-to article for more information.

  • 4
  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now