asp.net - 编辑 OpenXML docx 模板并将其作为 FileResult 返回

标签 asp.net asp.net-mvc openxml

我想为我的应用程序的用户提供下载一个 docx 文件,该文件将根据他们的请求包含动态内容。 我准备了一个带有标题的模板,否则 OpenXML 创建在某个地方会很痛苦。 现在,我在编辑它并将其作为 FileResult 返回到我的 ASP MVC 应用程序中时遇到了问题。

我的计划是将文件读取到 MemoryStream 并将其编辑为 WordprocessingDocument,然后将 MemoryStream 作为 Byte[] 返回。

我这里有两个问题:

  1. 如果我直接从没有内存流的文件读取 WordprocessingDocument,我看不到将其转换为 FileResult() 想要的形状的方法。
  2. 如果我使用空的 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/

相关文章:

asp.net - 如何在 ASP.NET 应用程序中唯一标识客户端计算机?

javascript - C# ASP.MVC 使用 Html.EditorFor 和 JavaScript 获取复选框值

asp.net - StyleCop vs ReSharper 和一般编码风格问题

asp.net-mvc - 如何在 nopCommerce v2.20 插件中创建 EditorTemplate

c# - 合并文件

javascript - 如何在客户端禁用 asp.net 验证器?

asp.net-mvc - 与其他表单数据结合使用时,文件未使用 dropzone.js 发布

c# - 委托(delegate)不起作用

ms-word - 如何通过保留格式使用 MS Word Web 加载项替换文本?

c# - 使用 OpenXML 从 Excel 文件中读取日期