gpt4 book ai didi

c# - 用EPPlus创建一个excel文件,但是一直是只读的

转载 作者:行者123 更新时间:2023-11-30 14:32:42 25 4
gpt4 key购买 nike

我正在使用 EPPlus 创建/发送这样的文件:

using (ExcelPackage package = new ExcelPackage())
{

ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet");
... //create file here

Response.Clear();
Response.ContentType = "application/xlsx";
Response.AddHeader("content-disposition", "attachment; filename=" + filename + ".xlsx");
Response.BinaryWrite(package.GetAsByteArray());
Response.End();
}

一切正常,除了文件总是以只读状态返回,我不明白为什么。在“包”对象中,有一个带有 IsReadOnly 字段的文件对象,但该文件对象为空。我预计我没有正确创建 xcel 文件,但这是我可以弄清楚如何很好地创建文件的唯一方法。最初我使用的是内存流,但是当 excel 文件超过 50 行时我遇到了问题。

编辑/更新:所以我通过单击按钮“下载为 Excel 文件”来启动代码块。代码运行,创建文件,并提示用户“您选择打开:thisismyexcelfile.xlsx,这是一个:来自:mywebsite 的 XLSX 文件(此处大小)。firefox 应该如何处理这个文件?”选择“使用 OpenOffice Calc 打开”后,电子表格将打开并正确显示,但为只读。

编辑/更新:我用 OpenOffice 检查了文件属性。在 Properties/Security 下有一个“Open file Read Only”复选框,但它已被取消选中和禁用。

最佳答案

我找到了这个例子,我看到了 3 个主要区别

  1. Response.ContentType 设置为 application/vnd.openxmlformats
  2. 使用
  3. Response.WriteFileResponse.BinaryWrite
  4. 在此示例中,文件被保存到服务器,作为响应发送,然后被删除

    void ExportToExcel(Event evt)
    {
    var fileInfo = new FileInfo(Path.GetTempPath() + "\\" +
    DateTime.Now.Ticks + ".xlsx");

    using (var xls = new ExcelPackage(fileInfo))
    {
    var sheet = xls.Workbook.Worksheets.Add(evt.Title);

    sheet.Cell(1, 1).Value = "First name";
    sheet.Cell(1, 2).Value = "Last name";
    sheet.Cell(1, 3).Value = "E-mail";
    sheet.Cell(1, 4).Value = "Phone";
    sheet.Cell(1, 5).Value = "Registered";
    sheet.Cell(1, 6).Value = "Live Meeting";

    var i = 1;
    foreach(var attendee in evt.Attendees)
    {
    i++;

    var profile = attendee.Profile;
    sheet.Cell(i, 1).Value = profile.FirstName;
    sheet.Cell(i, 2).Value = profile.LastName;
    sheet.Cell(i, 3).Value = profile.Email;
    sheet.Cell(i, 4).Value = profile.Phone;
    sheet.Cell(i, 5).Value = att.Created.ToString();
    sheet.Cell(i, 6).Value = att.LiveMeeting.ToString();
    }

    xls.Save();
    }

    Response.Clear();
    Response.ContentType = "application/vnd.openxmlformats";
    Response.AddHeader("Content-Disposition",
    "attachment; filename=" + fileInfo.Name);
    Response.WriteFile(fileInfo.FullName);
    Response.Flush();

    if (fileInfo.Exists)
    fileInfo.Delete();
    }

关于c# - 用EPPlus创建一个excel文件,但是一直是只读的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18059979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com