Windows Interop(插入图像)在Windows Server 2012 R2中

时间:2014-08-05 15:07:48

标签: excel office-interop excel-interop

我们正在将我们的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的任何已知问题。任何建议将不胜感激。

2 个答案:

答案 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来修复它。