환경 : asp.net C#을 OPENXML이YASR - 또 다른 검색 및 교체 질문
좋아, 그래서 나는 조각의 톤을 읽고 바퀴를 다시 시도하고, 그러나 나는 somone에 도움을 줄 수 바라고 있었어요 나는 더 빨리 나의 선택에 들어간다. 함께 병합해야하는 여러 문서가 있습니다 ... 확인 ... openxml SDK를 사용하여 수행 할 수 있습니다. 새들이 노래하고, 태양은 지금까지 빛난다. 이제 원하는대로 문서를 만들었으므로 텍스트 및/또는 콘텐츠 컨트롤을 검색하고 바꿔야합니다.
내 자신의 텍스트를 사용해 보았습니다. {이걸 대신합니다.}하지만 xml을 보았을 때 (docx의 이름을 바꿔서 파일을 보았을 때) {는 텍스트 근처에 없었습니다. 그래서 나는 그들이 dverge하지 않기 위해 doucment 내에서 그것을 보호하는 방법을 알아야하거나 검색하고 교체 할 다른 방법을 찾아야합니다.
xml 파일이면 검색/바꾸기가 가능하지만 쉽게 다시 결합 할 수는 없습니다.
아래 코드 ... 내가 언급 한 것처럼 ... 문서 병합이 잘 작동합니다. 그냥 물건을 교체해야합니다.
* 업데이트 *은 정규식 대신 태그를 사용하도록 교체 코드를 변경했습니다. 나는 지금 올바른 정보를 가지고 있지만, .Replace 전화는 일하고 싶지 않습니다. 마지막 네 줄은 내가 올바른 태그 내용을보고 있다는 확인을위한 것입니다. 나는 그 내용을 지금 바꾸고 싶다. 나는이 권리를 읽고 있어요 경우
protected void exeProcessTheDoc(object sender, EventArgs e)
{
string doc1 = Server.MapPath("~/Templates/doc1.docx");
string doc2 = Server.MapPath("~/Templates/doc2.docx");
string final_doc = Server.MapPath("~/Templates/extFinal.docx");
File.Delete(final_doc);
File.Copy(doc1, final_doc);
using (WordprocessingDocument myDoc = WordprocessingDocument.Open(final_doc, true))
{
string altChunkId = "AltChunkId2";
MainDocumentPart mainPart = myDoc.MainDocumentPart;
AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(
AlternativeFormatImportPartType.WordprocessingML, altChunkId);
using (FileStream fileStream = File.Open(doc2, FileMode.Open))
chunk.FeedData(fileStream);
AltChunk altChunk = new AltChunk();
altChunk.Id = altChunkId;
mainPart.Document.Body.InsertAfter(altChunk, mainPart.Document.Body.Elements<Paragraph>().Last());
mainPart.Document.Save();
}
exeSearchReplace(final_doc);
}
public static void GetPropertyFromDocument(string document, string outdoc)
{
XmlDocument xmlProperties = new XmlDocument();
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, false))
{
ExtendedFilePropertiesPart appPart = wordDoc.ExtendedFilePropertiesPart;
xmlProperties.Load(appPart.GetStream());
}
XmlNodeList chars = xmlProperties.GetElementsByTagName("Company");
chars.Item(0).InnerText.Replace("{ClientName}", "Penn Inc.");
StreamWriter sw;
sw = File.CreateText(outdoc);
sw.WriteLine(chars.Item(0).InnerText);
sw.Close();
}
}
}
바른 길에. Prooferr는 그것의 일부 defintely했다. 마크 업 Simplifier는 도움이되지 않았지만 분리 문제를 찾고 해결할 수있었습니다. 나는 여전히 필드를 찾아서 대체 할 수없는 것처럼 보입니다. 내 수색 및 코드 교체 아이디어가 있습니까? – petronius31
말하기 어렵습니다. 나는 이것에 대해 StreamReader를 사용하려고하는지 확신하지 못한다. 왜 XML로 이것을 끌어오고 RegEx 텍스트를 검색하기 위해'.Value'를 모두 얻은 다음, 결국에는 할 일을하고'. 저장 '하십시오. 다음은 PowerPoint 및 VB.NET 예제입니다. http://stackoverflow.com/questions/3903142/is-it-possible-to-update-a-powerpoint-slide-with-new-data-in-c/4504970# 4504970 XML을 Linq 사용. –
@ petronius31 : 방금 업데이트를 보았습니다. 세 가지 : ** 1) **'using' 문은'XmlNodeList chars = xmlProperties.GetElementsByTagName ("Company");를 포함해야합니다.chars.Item (0) .InnerText.Replace ("{ClientName}", "Penn Inc.");, ** 2) ** Linq을 대신 사용할 수 있습니다.) **. 저장하는 스트림을 읽는 대신'xmlProperties.Save'를 원할 것입니다. –