使用 ExcelPackage 从 Excel 模板读取并写入 Excel

本文关键字:Excel 读取 ExcelPackage 使用 | 更新日期: 2023-09-27 18:34:50

我正在使用以下代码:

var assembly =          Assembly.GetExecutingAssembly();
        Stream streamToTemplete=assembly.GetManifestResourceStream("DailyAuction.xltx");
        Stream streamToOutput = assembly.GetManifestResourceStream("dailyAuctionEmail.xls");

        //using (ExcelPackage excelPackage = new ExcelPackage(newFile, templateFile))
        using(streamToTemplete)
        using (streamToOutput)
        {
            using (ExcelPackage excelPackage = new ExcelPackage(streamToOutput, streamToTemplete))
            {
                ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets["Daily Auction"];
                int startRow = 4;
                int row = startRow;
                foreach (DailyEmail dailyEmail in listDailyEmail)                                                                                                                           //iterate through all the rows in the list
                {
                    worksheet.Cells[row, 1].Value = dailyEmail.As_At.ToString("dd-MMM-yy HH:mm");
                    worksheet.Cells[row, 2].Value = dailyEmail.Auction_Date.ToString("dd-MMM-yy");
                }
                excelPackage.Save();
            }
        }
        var attachment = new Attachment(streamToOutput, new ContentType("application/vnd.ms-excel"));

但是,我收到一个错误,说streamToTemplate和streamToOutput为空。似乎有什么问题?另外,其余代码会起作用吗?

使用 ExcelPackage 从 Excel 模板读取并写入 Excel

检查两个 Excel 文件的属性。生成操作应为"嵌入资源"。

此外,您提供给 GetManifestResource 流的字符串看起来太简单了。字符串应为:

<defaultNamespace>.<folderName>.<fileName> MSDN 文章

此答案建议调用 GetManifestResourceNames,然后使用调试器查看资源名称。当你找到自己的路时,这似乎是一个很好的方法。