我想为我的应用程序的用户提供下载一个 docx 文件,该文件将根据他们的请求包含动态内容。 我准备了一个带有标题的模板,否则 OpenXML 创建在某个地方会很痛苦。 现在,我在编辑它并将其作为 FileResult 返回到我的 ASP MVC 应用程序中时遇到了问题。
我的计划是将文件读取到 MemoryStream
并将其编辑为 WordprocessingDocument
,然后将 MemoryStream 作为 Byte[]
返回。
我这里有两个问题:
- 如果我直接从没有内存流的文件读取
WordprocessingDocument
,我看不到将其转换为FileResult()
想要的形状的方法。 - 如果我使用空的
MemoryStream
创建新的WordprocessingDocument
,我可以简单地创建内容并将其作为File
返回,但我缺少之前准备好的 header 想要的内容。
那么,如何编辑 .docx
模板并将其作为 FileResult()
返回?
最佳答案
这就是如何使用 MemoryStream
创建新的电子表格文档,然后将其保存到 Byte[]
Byte[] file;
using (MemoryStream mem = new MemoryStream())
{
using (SpreadsheetDocument spreadsheetDocument =
SpreadsheetDocument.Create(mem, SpreadsheetDocumentType.Workbook))
{
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.
AppendChild<Sheets>(new Sheets());
Sheet sheet = new Sheet()
{
Id = spreadsheetDocument.WorkbookPart.
GetIdOfPart(worksheetPart),
SheetId = 1,
Name = "aStupidSheet"
};
sheets.Append(sheet);
workbookpart.Workbook.Save()
spreadsheetDocument.Close();
}
file = mem.ToArray();
}
关于asp.net - 编辑 OpenXML docx 模板并将其作为 FileResult 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49380106/