【问题标题】:Microsoft Word Document Controls not accepting carriage returnsMicrosoft Word 文档控件不接受回车
【发布时间】:2009-08-28 20:10:53
【问题描述】:

所以,我有一个 Microsoft Word 2007 文档,其中包含几个纯文本格式(我也尝试过富文本格式)控件,这些控件通过 XML 接受输入。

对于回车,当我想要回车时,我通过包含“\r\n”的 XML 传递了字符串,但 word 文档忽略了这一点,只是将内容包装在同一行。我还尝试在我的 C# 映射器中将 \r\n 替换为 System.Environment.NewLine,但无论如何都只是放入了 \r\n,这仍然不起作用。

还要注意,在控件本身上,我已在控件属性中将其设置为“允许回车(多个段落)”。

这是 listMapper 的 XML

<Field id="32"  name="32" fieldType="SimpleText">
    <DataSelector path="/Data/DB/DebtProduct">
        <InputField fieldType=""  
                    path="/Data/DB/Client/strClientFirm" 
                    link="" type=""/>
        <InputField fieldType=""  
                    path="strClientRefDebt" 
                    link="" type=""/>
    </DataSelector>
    <DataMapper formatString="{0} Account Number: {1}" 
                name="SimpleListMapper" type="">
        <MapperData></MapperData>
    </DataMapper>
</Field>

请注意,这是我实际映射列表的 listMapper C#(请注意我尝试附加 system.environment.newline 的位置)

namespace DocEngine.Core.DataMappers
{
    public class CSimpleListMapper:CBaseDataMapper
    {
        public override void Fill(DocEngine.Core.Interfaces.Document.IControl control, CDataSelector dataSelector)
        {
            if (control != null && dataSelector != null)
            {
                ISimpleTextControl textControl = (ISimpleTextControl)control;
                IContent content = textControl.CreateContent();
                CInputFieldCollection fileds = dataSelector.Read(Context);
                StringBuilder builder = new StringBuilder();

                if (fileds != null)
                {
                    foreach (List<string> lst in fileds)
                    {
                        if (CanMap(lst) == false) continue;
                        if (builder.Length > 0 && lst[0].Length > 0)
                            builder.Append(Environment.NewLine);
                        if (string.IsNullOrEmpty(FormatString))
                            builder.Append(lst[0]);
                        else
                            builder.Append(string.Format(FormatString, lst.ToArray()));
                    }

                    content.Value = builder.ToString();

                    textControl.Content = content;
                    applyRules(control, null);
                }
            }
        }
    }
}

有没有人知道如何让 MS Word 2007 (docx) 退出忽略我的换行符??

【问题讨论】:

    标签: c# xml formatting ms-word openxml


    【解决方案1】:

    使用这样的函数:

    private static Run InsertFormatRun(Run run, string[] formatText)
    {
        foreach (string text in formatText)
        {
            run.AppendChild(new Text(text));
            RunProperties runProps = run.AppendChild(new RunProperties());
            Break linebreak = new Break();
            runProps.AppendChild(linebreak);
        }
        return run;          
    }
    

    【讨论】:

      【解决方案2】:

      以上答案对我没有任何帮助。

      但是我发现InsertAfter 方法将原始XML 字符串中的\n 交换为\v,当它被传递到内容控件时,它会正确呈现。

      contentControl.MultiLine = true    
      contentControl.Range.InsertAfter(your string)
      

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题,但它在表格单元格中。

        我有一个带回车符的字符串(多行)到一个文本对象中,该对象附加到附加到表格单元格的段落中。

        => 回车被单词忽略了。

        解决方案很简单: 逐行创建一个段落并将所有这些段落添加到表格单元格中。

        【讨论】:

          【解决方案4】:

          我认为它有效

          WordprocessingDocument _docx = WordprocessingDocument.Create("c:\\Test.docx", WordprocessingDocumentType.Document);
          MainDocumentPart _part = _docx.MainDocumentPart; 
          string _str = "abc\ndef\ngeh";  
          string _strArr[] = _str.Split('\n');  
          
          foreach (string _line in _strArr)  
          {  
              Body _body = new Body();  
              _body.Append(NewText(_text));  
              _part.Append(_body);  
          }  
          _part.Document.Save();  
          _docx.Close();  
          

          .

          static Paragraph NewText(string _text)  
          {  
              Paragraph _head = new Paragraph();  
              Run _run = new Run();  
              Text _line = new Text(_text);  
              _run.Append(_line);  
              _head.Append(_run);  
              return _head;  
          }
          

          【讨论】:

            猜你喜欢
            • 2012-05-16
            • 2013-07-04
            • 1970-01-01
            • 2012-03-07
            • 1970-01-01
            • 2010-11-08
            • 1970-01-01
            • 1970-01-01
            • 2012-08-31
            相关资源
            最近更新 更多