在使用 ASP.NET Web Forms 开发的应用程序中,我使用 Microsoft ReportViewer 创建报告,并允许用户以 Excel 格式下载这些报告。但是,我想控制自动生成的 Excel 文件中包含的元数据(标题、作者、关键字等)。
我使用的.NET版本是.NET Framework 4.6.1。
我知道可以通过创建不同的导出按钮来解决此问题,但我希望将元数据包含在 ReportViewer 中的导出按钮创建的 Excel 文件中。
要将元数据添加到使用 ReportViewer 生成的 Excel 文件中,您需要在生成后在 Excel 本身内操作文档属性。 ReportViewer 本身不支持将元数据直接添加到 Excel 格式的导出文件(例如作者、标题或关键字)。
但是,您可以按照以下步骤添加元数据:
1。使用 ReportViewer 生成 Excel 文件
使用 ReportViewer 生成报告并将其导出为 Excel,使用以下代码:
Warning[] warnings;
string[] streamIds;
string mimeType = string.Empty;
string encoding = string.Empty;
string extension = string.Empty;
byte[] bytes = reportViewer.LocalReport.Render(
"EXCEL", null, out mimeType, out encoding, out extension,
out streamIds, out warnings);
using (FileStream fs = new FileStream(@"C:\output\report.xlsx", FileMode.Create))
{
fs.Write(bytes, 0, bytes.Length);
}
2。使用 Open XML SDK 库添加元数据
要在创建 Excel 文件后向其添加元数据,您可以使用 Microsoft 的 Open XML SDK 库。使用它,您可以打开生成的文件并添加所需的属性。
通过 NuGet 安装 Open XML SDK 库:
dotnet add package DocumentFormat.OpenXml --version 3.1.0
或:
Install-Package DocumentFormat.OpenXml
安装后,您可以使用以下代码添加元数据:
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.CustomProperties;
using System.IO;
public void AddMetadataToExcel(string filePath)
{
using (SpreadsheetDocument document = SpreadsheetDocument.Open(filePath, true))
{
var propertiesPart = document.PackageProperties;
propertiesPart.Creator = "Author name";
propertiesPart.Title = "Report Title";
propertiesPart.Subject = "Report Subject";
propertiesPart.Keywords = "keyword1, keyword2";
propertiesPart.Description = "Excel file Description";
propertiesPart.LastModifiedBy = "LastModifiedBy Name";
propertiesPart.Revision = "1";
}
}
3.生成文件后调用该方法
ReportViewer 生成 Excel 文件后,调用
AddMetadataToExcel
方法:
AddMetadataToExcel(@"C:\output\report.xlsx");
完成!