どのようにしてdocxシリアルレターをASP.NET MVCアプリケーションで生成できますか? コンテンツコントロールとOpenXMLライブラリを持つdocxを使用して、簡単なdocxテンプレートにDBからのデータを入力できます(例:here)。プログラムでWordのシリアルレターを作成し、それを単一の文書として保存する方法は?
しかし、これをシリアル文字に使用し、生成されたドキュメントを単一の出力docx(ヒントhere)にマージしようとすると、結果のシリアルレターには最初のエントリのデータがあります。私が10人の従業員の手紙を作成してこのデータをフィードしていたとき、結果として出力された10文字はすべて第1従業員のデータで生成されました。
編集:私は見つけることができた唯一の解決策は、SyncfusionのFileFormatsライブラリにのOpenXmlから切り替えることです
internal static Stream CreateMultiPartDocument(IList<object> data, string templatePath)
{
Stream mainDocumentStream = CreateTempDocument(data[0], templatePath);
for(int i = 1; i < data.Count; i++)
{
object childDocumentData = data[i];
Stream childDocumentStream = CreateTempDocument(childDocumentData, templatePath);
AppendChildDocument(mainDocumentStream, childDocumentStream);
}
mainDocumentStream.Flush();
mainDocumentStream.Position = 0;
return mainDocumentStream;
}
internal static Stream CreateTempDocument(object data, string templatePath)
{
string fullTemplatePath = Path.Combine(TEMPLATE_BASE_PATH, templatePath);
FileStream templateFile = File.Open(fullTemplatePath, FileMode.Open);
if(null != templateFile)
{
MemoryStream fileInMemory = new MemoryStream();
templateFile.CopyTo(fileInMemory);
string customXML = data.SerializeToXml();
ReplaceCustomXmlInMemory(fileInMemory, customXML);
fileInMemory.Flush();
fileInMemory.Position = 0;
templateFile.Close();
return fileInMemory;
}
return null;
}
private static void ReplaceCustomXmlInMemory(MemoryStream fileInMemory, string customXML)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(fileInMemory, true))
{
MainDocumentPart mainPart = wordDoc.MainDocumentPart;
mainPart.DeleteParts(mainPart.CustomXmlParts);
CustomXmlPart customXmlPart = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
using (StreamWriter streamWriter = new StreamWriter(customXmlPart.GetStream()))
{
streamWriter.Write(customXML);
}
wordDoc.Close();
}
}
これについていくつかのコードを書いていますが、動作させることができない場合は、適切な場所に来ています。質問にコード(または関連する部分)を追加するだけです。それがなければ私たちは手助けできません。 https://stackoverflow.com/help/how-to-askをご覧ください。 –