【发布时间】:2013-08-05 13:55:08
【问题描述】:
我正在使用 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,这是一个:XLSX 文件(此处大小)来自:mywebsite。firefox 应该如何处理此文件?”选择“使用 OpenOffice Calc 打开”后,电子表格将打开并正确显示,但它是只读的。
编辑/更新:我使用 OpenOffice 检查了文件属性。在属性/安全下有一个“只读打开文件”复选框,但它已被取消选中并禁用。
【问题讨论】:
-
您说文件“以只读方式返回”是什么意思?你能更准确地描述一下这个场景吗?
-
问题更新更明确。
-
你确定不是 MS Office 做的吗?这是从网上下载的任何文件的默认设置。它使它们成为只读并发出安全警告。
-
我实际上没有 MS Office,但我确实认为是 OpenOffice 做的。有没有办法可以防止这种情况发生,还是我只需要假设用户知道如何解决这个问题?
-
其实我认为当你选择直接打开文件时,是浏览器将文件设为只读。如果您将其明确保存在某处,则不会发生。所以无论如何,问题不在于你的代码。