动态创建openxml文档
Create openxml document dynamically
我正在尝试动态构建一个 openxml 文档,基本上我有一些 classes 负责创建我的文档的部分(表格,段落...)然后我需要另一个 class 构建我的文档,在我的例子中我称之为 doc,我的其他 classes 是 docTable、docRun ...
所以现在我有这个:
DocRun projectNameTitle = new DocRun();
Run projectNameTxt = disclaimerDescription.createParagraph(document.projectName, SUBTITLECOLOR, FONTSIZESUBTITLE,FONTTYPE);
DocRun dateParagraph = new DocRun();
Run dateTxt = disclaimerDescription.createParagraph(date, PARAGRAPHTITLECOLOR, DATEFONTSIZE, DEFAULTFONT);
Doc simpleDoc = new Doc();
simpleDoc.CreateDoc(dateParagraph, projectNameTitle);
段落构建正确我现在只需要将它设置为文档的正文,文档class进入的地方,传递的参数应该负责按顺序构建文档他们通过了。
这里是我class负责构建文档的:
using System.Web.Hosting;
namespace openXml
{
public class Doc
{
public const String DOCUMENTSLOCATION = "~/Files"; // default documents location
public void CreateDoc(params object[] document)
{
var stream = new MemoryStream();
using (WordprocessingDocument doc = WordprocessingDocument.Create(stream, WordprocessingDocumentType.Document, true))
{
MainDocumentPart mainPart = doc.AddMainDocumentPart();
new Document(new Body()).Save(mainPart);
Body body = mainPart.Document.Body;
foreach (var docSections in document)
{
body.Append(new Paragraph(new ParagraphProperties(),
new Run((Run)docSections)));
}
}
stream.Seek(0, SeekOrigin.Begin);
Directory.CreateDirectory(HostingEnvironment.MapPath(DOCUMENTSLOCATION));
System.IO.File.WriteAllBytes(HostingEnvironment.MapPath("~/Files/test5.docx"), stream.ToArray());
}
}
}
我在这里遇到了一些麻烦,因为我不知道我是否正在传递 运行 或其他东西,在这种情况下我如何遍历传递的项目列表并将其附加到文档,我不知道我在这里做错了什么,没有创建文档 :S
尝试在 using
末尾添加这行
doc.MainDocumentPart.Document.Save();
doc.Close();
fileBytes = stream.ToArray();
然后像这样保存文件:
File.WriteAllBytes(string path, fileBytes)
我正在尝试动态构建一个 openxml 文档,基本上我有一些 classes 负责创建我的文档的部分(表格,段落...)然后我需要另一个 class 构建我的文档,在我的例子中我称之为 doc,我的其他 classes 是 docTable、docRun ...
所以现在我有这个:
DocRun projectNameTitle = new DocRun();
Run projectNameTxt = disclaimerDescription.createParagraph(document.projectName, SUBTITLECOLOR, FONTSIZESUBTITLE,FONTTYPE);
DocRun dateParagraph = new DocRun();
Run dateTxt = disclaimerDescription.createParagraph(date, PARAGRAPHTITLECOLOR, DATEFONTSIZE, DEFAULTFONT);
Doc simpleDoc = new Doc();
simpleDoc.CreateDoc(dateParagraph, projectNameTitle);
段落构建正确我现在只需要将它设置为文档的正文,文档class进入的地方,传递的参数应该负责按顺序构建文档他们通过了。
这里是我class负责构建文档的:
using System.Web.Hosting;
namespace openXml
{
public class Doc
{
public const String DOCUMENTSLOCATION = "~/Files"; // default documents location
public void CreateDoc(params object[] document)
{
var stream = new MemoryStream();
using (WordprocessingDocument doc = WordprocessingDocument.Create(stream, WordprocessingDocumentType.Document, true))
{
MainDocumentPart mainPart = doc.AddMainDocumentPart();
new Document(new Body()).Save(mainPart);
Body body = mainPart.Document.Body;
foreach (var docSections in document)
{
body.Append(new Paragraph(new ParagraphProperties(),
new Run((Run)docSections)));
}
}
stream.Seek(0, SeekOrigin.Begin);
Directory.CreateDirectory(HostingEnvironment.MapPath(DOCUMENTSLOCATION));
System.IO.File.WriteAllBytes(HostingEnvironment.MapPath("~/Files/test5.docx"), stream.ToArray());
}
}
}
我在这里遇到了一些麻烦,因为我不知道我是否正在传递 运行 或其他东西,在这种情况下我如何遍历传递的项目列表并将其附加到文档,我不知道我在这里做错了什么,没有创建文档 :S
尝试在 using
doc.MainDocumentPart.Document.Save();
doc.Close();
fileBytes = stream.ToArray();
然后像这样保存文件:
File.WriteAllBytes(string path, fileBytes)