所以,我有一个Microsoft Word 2007文档,其中有几种纯文本格式(我也尝试过Rich Text Format)控件,它们通过XML接受输入。
对于回车符,当我想要回车时,我将字符串传递给包含“\ r \ n”的XML,但是word文档忽略了它,并且只是将事物包装在同一行上。我也尝试用C#mapper中的System.Environment.NewLine替换\ r \ n,但是反正放入\ r \ n,但仍无效。
另请注意,在控件本身,我已将其设置为“允许回车(多个Paragrpahs)”在控件属性中。
这是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)退出忽略我的换行符?
答案 0 :(得分:2)
使用这样的函数:
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;
}
答案 1 :(得分:1)
上述答案都没有对我有任何帮助。
但是我发现InsertAfter
方法在\n
的原始XML字符串中交换\v
,当它传递到内容控件时,它会正确呈现。
contentControl.MultiLine = true
contentControl.Range.InsertAfter(your string)
答案 2 :(得分:0)
我认为它有效
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;
}
答案 3 :(得分:0)
我遇到了同样的问题,但它是在一个表格单元格中。
我有一个带回车符(多行)的字符串到一个Text对象中,该对象附加到附加到表格单元格的段落。
=&GT;回车被忽略了。
解决方案很简单: 逐行创建一个段落,并将所有这些段落添加到表格单元格中。