C# OpenXMLSDK:如何使用回车/换行符插入纯文本
目前我有一个单词模板,里面有一个RTF表单字段,在这个表单字段中我想插入来自MSSQL数据库的纯文本 使用此方法,我可以设置文档中任何FormField的内容(包括我的RTF FormField) 但不幸的是,这破坏了WordDocument,我无法再打开它:-/C# OpenXMLSDK:如何使用回车/换行符插入纯文本,c#,openxml-sdk,carriage-return,linefeed,C#,Openxml Sdk,Carriage Return,Linefeed,目前我有一个单词模板,里面有一个RTF表单字段,在这个表单字段中我想插入来自MSSQL数据库的纯文本 使用此方法,我可以设置文档中任何FormField的内容(包括我的RTF FormField) 但不幸的是,这破坏了WordDocument,我无法再打开它:-/ 这里的任何人都可能有同样的问题,并且知道如何在不丢失明文格式(回车和换行)的情况下插入文本?因此,最后我自己找到了一个解决方案,您可以使用AltChunk插入明文而不丢失格式:-) 下面是代码,也许它可以帮助有同样问题的人;-) pu
这里的任何人都可能有同样的问题,并且知道如何在不丢失明文格式(回车和换行)的情况下插入文本?因此,最后我自己找到了一个解决方案,您可以使用AltChunk插入明文而不丢失格式:-) 下面是代码,也许它可以帮助有同样问题的人;-)
publicstaticvoidsetnotes(此WordprocessingDocument文档,字符串值)
{
MainDocumentPart main=doc.MainDocumentPart;
字符串altChunkId=“altChunkId”+Guid.NewGuid().ToString().Replace(“-”,”);
var chunk=main.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.TextPlain,altChunkId);
使用(var mStream=new MemoryStream())
{
使用(var writer=newstreamwriter(mStream))
{
writer.Write(值);
writer.Flush();
mStream.Position=0;
chunk.FeedData(mStream);
}
}
var altChunk=new altChunk();
altChunk.Id=altChunkId;
OpenXmlElement-afterThat=null;
foreach(main.Document.Body.subjects()中的变量para)
{
如果(第InnerText.Equals段(“注释:”))
{
之后=第段;
}
}
main.Document.Body.InsertAfter(altChunk,after);
}
最后我自己找到了一个解决方案,您可以使用AltChunk插入纯文本,而不会丢失格式:-)
下面是代码,也许它可以帮助有同样问题的人;-)
publicstaticvoidsetnotes(此WordprocessingDocument文档,字符串值)
{
MainDocumentPart main=doc.MainDocumentPart;
字符串altChunkId=“altChunkId”+Guid.NewGuid().ToString().Replace(“-”,”);
var chunk=main.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.TextPlain,altChunkId);
使用(var mStream=new MemoryStream())
{
使用(var writer=newstreamwriter(mStream))
{
writer.Write(值);
writer.Flush();
mStream.Position=0;
chunk.FeedData(mStream);
}
}
var altChunk=new altChunk();
altChunk.Id=altChunkId;
OpenXmlElement-afterThat=null;
foreach(main.Document.Body.subjects()中的变量para)
{
如果(第InnerText.Equals段(“注释:”))
{
之后=第段;
}
}
main.Document.Body.InsertAfter(altChunk,after);
}
public static void SetContentControlValue(this WordprocessingDocument doc, string name, string value)
{
var main = doc.MainDocumentPart;
var stdRuns = main.Document.Body
.Descendants<SdtRun>()
.Where(r => r.SdtProperties.GetFirstChild<Tag>().Val.Value.ToLower().Equals(name))
.ToList();
stdRuns.ForEach(c => c.Descendants<Text>().First().Text = value);
main.Document.Body
.Descendants<SdtBlock>()
.Where(r => r.SdtProperties.GetFirstChild<Tag>().Val.Value.ToLower().Equals(name))
.ToList()
.ForEach(c => c.Descendants<Text>().First().Text = value);
}
var run = new SdtRun();
string[] newLineArray = { Environment.NewLine };
string[] textArray = value.Split(newLineArray, StringSplitOptions.None);
bool first = true;
foreach (var line in textArray)
{
if (!first)
{
run.Append(new Break());
}
first = false;
Text txt = new Text();
txt.Text = line;
run.Append(txt);
}
main.Document.Body.Append(run);
public static void SetNotes(this WordprocessingDocument doc, string value)
{
MainDocumentPart main = doc.MainDocumentPart;
string altChunkId = "AltChunkId" + Guid.NewGuid().ToString().Replace("-", "");
var chunk = main.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.TextPlain, altChunkId);
using (var mStream = new MemoryStream())
{
using (var writer = new StreamWriter(mStream))
{
writer.Write(value);
writer.Flush();
mStream.Position = 0;
chunk.FeedData(mStream);
}
}
var altChunk = new AltChunk();
altChunk.Id = altChunkId;
OpenXmlElement afterThat = null;
foreach (var para in main.Document.Body.Descendants<Paragraph>())
{
if (para.InnerText.Equals("Notes:"))
{
afterThat = para;
}
}
main.Document.Body.InsertAfter(altChunk, afterThat);
}