我们正在将我们的Web应用程序从Windows 2003迁移到Windows 2012 R2。
该应用程序具有Excel报告功能。我们使用Interop打开excel(模板文件)并写出一些数据并从服务器中的特定文件夹插入图像。
MS办公室版本是2007年。奇怪的是插入图像功能仅在图像大小小于20 kb时才有效,一旦应用程序尝试插入大于20 kb的图像,如250 kb,系统挂起就好像没有足够的内存来完成这项工作,并且excel.exe在任务管理器中挂起。
在Dcomcnfg中,excel以“启动用户”身份运行。
IIS App Pool正在使用网络服务来运行该应用程序。
插入图像的代码如下所示,但由于它在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报告,没有图像导出,他们工作正常。
我们尝试通过在模板文件中放置一个宏来插入图像并从interop调用宏来删除此插入图像功能。它适用于本地计算机,但在服务器上它再次挂起时图像大小超过20 kb。
我们坚持这一点,并且不确定与excel互操作相关的Windows Server 2012 R2的任何已知问题。任何建议将不胜感激。
答案 0 :(得分:0)
我设置了参数MsoTriState LinkToFile并且工作正常!我使用的是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"));
祝你好运!
答案 1 :(得分:0)
我们完全有同样的问题。我通过安装MS Office 2013来修复它。