2

我想知道如何将word文档分成两列。我之所以要这样做是因为我希望能够将所有信息都放在一页上。

非常感谢您的帮助和时间!

我的代码

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";
            }

目前,代码在一列上自上而下打印出所有内容。我想要它有两列

4

3 回答 3

1

您可以使用 SectionProperties 和 ParagraphProperties 类的 Columns 类来创建两列或多少列

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();
于 2013-01-11T12:05:17.100 回答
0

您可以使用以下代码对完整文档执行此操作:

var sectionProperty = document.Body.Descendants<SectionProperties>().First();
var paragraphColumns = new Columns {EqualWidth = true, ColumnCount = 2};
sectionProperty.Append(paragraphColumns);
于 2020-01-23T12:40:16.880 回答
-1

尝试与..

    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;
于 2013-01-03T18:32:37.000 回答