2013-01-03 62 views
1

我想知道如何將word文檔分成兩列。我想這樣做的原因是因爲我希望能夠將所有信息都放在一個頁面上。Open XML Word C# - 分成兩列

非常感謝您的幫助和時間!

我的代碼

using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(filepath, WordprocessingDocumentType.Document)) 
      { 

       MainDocumentPart mainPart = wordDoc.AddMainDocumentPart(); 
       mainPart.Document = new Document(); 

       var margin_size = 100; 

       PageMargin pargeMargins = new PageMargin(); 
       pargeMargins.Top = margin_size; 
       pargeMargins.Bottom = margin_size; 

       SectionProperties sectionProps = new SectionProperties(); 
       sectionProps.Append(pargeMargins); 

       Body body = mainPart.Document.AppendChild(new Body()); 
       body.Append(sectionProps); 
       ParagraphProperties paragraphProperties = new ParagraphProperties 
        (
         //new ParagraphStyleId() { Val = "No Spacing" }, 
         new SpacingBetweenLines() { After = "0" } 
        ); 



       Paragraph para_main = body.AppendChild(new Paragraph(paragraphProperties)); 

       // Creating the Header where the Serial Number will exist 

       // Serial Number 
       Run run_mainHeader = para_main.AppendChild(new Run()); 
       RunProperties runProp_mainHeader = new RunProperties(); // Create run properties. 
       FontSize size_mainHeader = new FontSize(); 
       size_mainHeader.Val = new StringValue("48");      
       runProp_mainHeader.Append(size_mainHeader); 
       run_mainHeader.Append(runProp_mainHeader);        // Append all of the properties 
       run_mainHeader.Append(new Text("S/N: " + sn)); 

       // Serial Barcode 
       Run run_barcode = para_main.AppendChild(new Run()); 
       RunProperties runProp_barcode = new RunProperties();     // Create run properties. 
       RunFonts runFontMain_barcode = new RunFonts();       // Create font 
       runFontMain_barcode.Ascii = "Code39AzaleaNarrow1";      // Specify font family 
       FontSize size_barcode = new FontSize(); 
       size_barcode.Val = new StringValue("48"); 

       runProp_barcode.Append(runFontMain_barcode); 
       runProp_barcode.Append(size_barcode); 

       run_barcode.PrependChild<RunProperties>(runProp_barcode); 
       sn = sn.ToUpper();              // Sets all the values to uppercase to be a barcode format 
       run_barcode.AppendChild(new Text("*" + sn + "*")); 
       run_barcode.AppendChild(new Break()); 

       // Tube Type 
       Run run_tubetype = para_main.AppendChild(new Run()); 
       RunProperties runProp_tubetype = new RunProperties();     // Create run properties. 
       FontSize size_tubetype = new FontSize(); 
       size_tubetype.Val = new StringValue("38"); 
       runProp_tubetype.Append(size_tubetype); 
       run_tubetype.Append(runProp_tubetype);         // Append all of the properties 
       run_tubetype.Append(new Text("Tube Type: " + forms[0].TubeType + " ")); 
       //run_tubetype.Append(new Break()); 

       // Tube Barcode 
       Run run_barcode_tube = para_main.AppendChild(new Run()); 
       RunProperties runProp_barcode_tube = new RunProperties();    // Create run properties. 
       RunFonts runFontMain_barcode_tube = new RunFonts();      // Create font 
       runFontMain_barcode_tube.Ascii = "Code39AzaleaNarrow1";     // Specify font family 
       FontSize size_barcode_tube = new FontSize(); 
       size_barcode_tube.Val = new StringValue("48"); 

       runProp_barcode_tube.Append(runFontMain_barcode_tube); 
       runProp_barcode_tube.Append(size_barcode_tube); 

       run_barcode_tube.PrependChild<RunProperties>(runProp_barcode_tube); 
       sn = sn.ToUpper();              // Sets all the values to uppercase to be a barcode format 
       run_barcode_tube.AppendChild(new Text("*" + forms[0].TubeType + "*")); 
       run_barcode_tube.AppendChild(new Break()); 



       // Goes through all of the forms 
       foreach (var form in forms) 
       { 

        // Set up a header per form 
        Run run_header = para_main.AppendChild(new Run()); 
        RunProperties runProp_formHeader = new RunProperties(); 
        Bold bold = new Bold(); 
        Underline ul = new Underline() { Val = DocumentFormat.OpenXml.Wordprocessing.UnderlineValues.Single }; 
        FontSize size_formHeader = new FontSize(); 
        size_formHeader.Val = new StringValue("24"); 
        runProp_formHeader.Append(size_formHeader); 
        runProp_formHeader.Append(bold); 
        runProp_formHeader.Append(ul); 
        run_header.AppendChild(new RunProperties(runProp_formHeader)); 
        //run_header.AppendChild(new RunProperties(new Bold(), new Underline())); 

        string username = form.Username; 
        string proces_header = form.HeaderTitle; 

        run_header.AppendChild(new Text(proces_header)); 
        run_header.AppendChild(new Break()); 

        // Goes through all of the fields that each form contains. 
        for (int i = 0; i < form.FieldList.Count; i++) 
        { 
         // Do not need to print out user or serial for each form. 
         if (!(form.FieldList[i].Token == "SNT")) 
         { 

          Run run_data = para_main.AppendChild(new Run()); 
          if (form.FieldList[i].Default) 
          { 
           run_data.AppendChild(new Text(form.FieldList[i].Label)); 
          } 
          else 
          { 
           run_data.AppendChild(new Text(form.FieldList[i].Label + " " + form.FieldList[i].Spec + form.FieldList[i].Value)); 
          } 
          run_data.AppendChild(new Break()); 
         } 
        } 

       } 

       mainPart.Document.Save(); 
       wordDoc.Close(); 
       return "Success"; 
      } 

目前的代碼打印了一列一切自上而下的。我希望它有兩列

回答

0

與嘗試..

Word.Application WordApp = new Word.Application(); 
    Word.Document BaseDoc = default(Word.Document); 
    Word.Document DestDoc = default(Word.Document); 
    int intNumberOfPages = 0; 
    string intNumberOfChars = null;  
    int intPage = 0; 

    //Word Constants 
    const var wdGoToPage = 1; 
    const var wdStory = 6; 
    const var wdExtend = 1; 
    const var wdCharacter = 1; 

    //Show WordApp 
    WordApp.ShowMe(); 

    //Load Base Document 
    BaseDoc = WordApp.Documents.Open(Filename); 
    BaseDoc.Repaginate(); 

    //Loop through pages 
    intNumberOfPages = BaseDoc.BuiltInDocumentProperties("Number of Pages").value; 
    intNumberOfChars = BaseDoc.BuiltInDocumentProperties("Number of Characters").value; 

    for (intPage = 1; intPage <= intNumberOfPages; intPage++) { 
     if (intPage == intNumberOfPages) { 
      WordApp.Selection.EndKey(wdStory);   } 
     else { 
      WordApp.Selection.GoTo(wdGoToPage, 2); 
      Application.DoEvents(); 

      WordApp.Selection.MoveLeft(Unit = wdCharacter, Count = 1); 
     } 

     Application.DoEvents(); 

     WordApp.Selection.HomeKey(wdStory, wdExtend); 
     Application.DoEvents(); 
       WordApp.Selection.Copy(); 
     Application.DoEvents();   
     //Create New Document 
     DestDoc = WordApp.Documents.Add; 
     DestDoc.Activate(); 
     WordApp.Selection.Paste(); 
     DestDoc.SaveAs(NewFileName + intPage.ToString + ".doc"); 
     DestDoc.Close(); 
     DestDoc = null; 

     WordApp.Selection.GoTo(wdGoToPage, 2); 
     Application.DoEvents(); 
       WordApp.Selection.HomeKey(wdStory, wdExtend); 
     Application.DoEvents(); 

     WordApp.Selection.Delete(); 
     Application.DoEvents(); 
    } 

    BaseDoc.Close(false); 
    BaseDoc = null; 

    WordApp.Quit(); 
    WordApp = null; 
+0

謝謝你的回覆,但我不太清楚發生了什麼事,對不起,我會張貼我的代碼,顯示我到目前爲止。 – AustinT

0

您可以將兩個或多少列要使用的列級爲SectionProperties和ParagraphProperties類

http://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.columns(v=office.14).aspx HTTP:/ /msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.paragraphproperties(v=office.14).aspx http://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.sectionproperties(v=office.14).aspx

這應做到:

  // Add a new main document part. 
      package.AddMainDocumentPart(); 

      // Create the Document DOM. 
      package.MainDocumentPart.Document = new Document(); 
      Body bd = package.MainDocumentPart.Document.Body = new Body(); 

      //write a first paragraph on two columns 
      var paragrap1 = new Paragraph(); 
      var paragraphSectionProperties = new ParagraphProperties(new SectionProperties()); 
      var paragraphColumns = new Columns(); 
      paragraphColumns.EqualWidth = true; 
      paragraphColumns.ColumnCount = 2; 

      paragraphSectionProperties.Append(paragraphColumns); 
      paragrap1.Append(paragraphSectionProperties); 

      paragrap1.Append(new Run(new Text(str))); 
      bd.AppendChild(paragrap1); 

      //write another paragraph without paragraph properties 
      bd.Append(new Paragraph(new Run(new Text(str)))); 

      //set the body properties default three columns 
      var sectionProperties = new SectionProperties(); 
      var columns = new Columns(); 
      columns.EqualWidth = true; 
      columns.ColumnCount = 3; 

      sectionProperties.Append(columns); 
      bd.Append(sectionProperties); 

      package.MainDocumentPart.Document.Save();