【发布时间】:2015-02-04 10:51:25
【问题描述】:
我有一个 MVC 应用程序,它使用 NPOI 版本:2.1.3.0 来读取和写入 excel 文件,用户可以在本地机器上下载该 excel 文件。文件格式:xlsx。
public ActionResult NPOI()
{
FileStream fs = new FileStream(Server.MapPath(@"\Content\SampleExcel.xlsx"), FileMode.Open, FileAccess.Read);
XSSFWorkbook templateWorkbook = new XSSFWorkbook(fs);
ISheet sheet = (ISheet)templateWorkbook.GetSheet("Sheet1");
IRow dataRow = (IRow)sheet.GetRow(1);
dataRow.GetCell(0).SetCellValue(77);
sheet.ForceFormulaRecalculation = true;
MemoryStream ms = new MemoryStream();
templateWorkbook.Write(ms);
return File(ms.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "SampleExcel.xlsx");
}
在 excel 文件中写入工作正常。但是当浏览器是IE和用户机器上的excel 2013时。
如果下载完成后用户使用 IE 打开(预览文件)选项被选中:
然后在 excel 2013 中观察到此错误:
接着是:
虽然服务器端的模板文件(SampleExcel.xlsx)已打开并使用 excel 2013 保存。但我也不知道为什么它显示文件已损坏。并且用户机器上有足够的内存,它永远不会触及它在任务管理器中的峰值。 任何帮助将不胜感激。
【问题讨论】:
-
正在使用什么版本的 Windows/IE?它是否以降低的权限运行?如果您将在excel中创建的excel文件保存到服务器并使用机器打开它会怎样。那样有用吗?从根本上说,文件的生成/提供方式或机器下载/打开文件的方式存在问题。我们需要缩小范围。哦,在加载失败后检查机器上的事件日志(系统/应用程序)。看看有没有相关条目
-
Windows:Windows 7 Enterprise Service Pack 1(64 位); IE: 11. 管理员权限。如果我保存 excel 文件并在 excel 2013 中打开它,那么它的工作正常。并且在事件查看器中:“找不到来自源 MSIODSVC.EXE 的事件 ID 0 的描述。引发此事件的组件未安装在您的本地计算机上,或者安装已损坏。您可以在本地计算机。如果事件源自另一台计算机,则显示信息必须与事件一起保存。"
-
您可以探索这种技术,无需使用任何组件即可通过代码生成 Excel 工作表 - mvark.blogspot.in/2010/04/export-to-excel-without-using.html
-
谢谢。只是为了澄清一下,您可以尝试在 IE 中打开不是来自您的生成器的 excel 文件,而不是在 IE 之外下载和打开吗?例如,链接到由 Excel/类似文件创建的链接。如果是 IE 无法打开任何 excel 文件,或者您生成的文件除了 IE 之外都没有问题,我正在尝试缩小范围。
-
谢谢基本,如果我用 IE 打开 excel 文件,它工作正常。根据系统/应用程序事件日志,我刚刚修复了 excel 2013,问题仍然存在。
标签: asp.net-mvc internet-explorer excel-2013 npoi