我们正在将 Web 应用程序从 Windows 2003 迁移到 Windows 2012 R2。
该应用程序具有 Excel 报告功能。我们使用 Interop 打开 Excel(模板文件)并写出一些数据并插入服务器中特定文件夹中的图像。
MS Office版本是2007年。奇怪的是,插入图像功能仅在图像大小小于20 kb时才起作用,一旦应用程序尝试插入大于20 kb(例如250 kb)的图像,系统就会挂起,就好像没有获得足够的内存来完成工作,并且 excel.exe 在任务管理器中挂起。
在 Dcomcnfg 中,Excel 在“启动用户”身份下运行。
IIS 应用程序池正在使用网络服务来运行应用程序。
插入图像的代码如下所示,但是由于它在 Windows 2003 中运行,因此我们没有进行任何更改
public void InsertImage(string imagePath, float leftPosition, float topPosition, float imageWidth, float heightImage)
{
if (!File.Exists(imagePath))
throw new OfficeHelperException(OfficeHelperException.ExceptionType.ImageFileNotFound);
WorkingSheet.Shapes.AddPicture(
imagePath,
Microsoft.Office.Core.MsoTriState.msoFalse,
Microsoft.Office.Core.MsoTriState.msoCTrue,
leftPosition,
topPosition,
imageWidth,
heightImage);
}
新的windows 2012 r2有内存分配设置吗? Web 应用程序还有其他没有图像导出功能的 Excel 报告,但它们工作正常。
我们尝试通过在模板文件中放置一个宏来删除此插入图像功能,该宏将插入图像并从互操作中调用该宏。它在本地计算机上工作,但在服务器上,当图像大小大于 20 kb 时,它再次挂起。
我们陷入了困境,并且不确定 Windows Server 2012 R2 是否存在与 Excel 互操作相关的任何已知问题。任何建议将不胜感激。
最佳答案
我将参数 MsoTriState LinkToFile 设置为 true 并且工作正常!我使用的是 Win 2012 R2 和 Excel 2010 x64。
例如:
oHoja.Shapes.AddPicture(HttpContext.Current.Server.MapPath("~/images/logos/57/teix.png",
MsoTriState.msoCTrue, MsoTriState.msoCTrue,float.Parse(3.ToString()),
float.Parse(65.ToString()),
float.Parse("113"),
float.Parse("54"));
祝你好运!
关于Windows Server 2012 R2 中的 Excel Interop(插入图像),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25142235/