none
Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)) - Interop word on IIS SERVER RRS feed

  • Question

  • Hi guys !
    I'm trying to edit and save as pdf a Word document using Interop in visual studio.
    The problem is that everything works fine on my laptop, but when I try to run on the server, the application returns the following error:
    Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80080005 Falha na execução do servidor (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
    I found many fixes in the forums, tried all but unsuccessfully.
    Please, somebody help me. <3

    private void CreateTablesEConvertToPdf(string directory, string nomeArquivo, List<ItensContrato> itens, out string mensagemErro)
            {
                mensagemErro = "";
                try
                {
                    // Create a new Microsoft Word application object
                    Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
    
                    // C# doesn't have optional arguments so we'll need a dummy value
                    object oMissing = System.Reflection.Missing.Value;
    
                    // Get list of Word files in specified directory
                    DirectoryInfo dirInfo = new DirectoryInfo(directory);
                    FileInfo[] wordFiles = dirInfo.GetFiles(nomeArquivo + ".docx");
    
                    word.Visible = false;
                    word.ScreenUpdating = false;
    
                    FileInfo wordFile = wordFiles[0];
    
                    // Cast as Object for word Open method
                    Object filename = (Object)wordFile.FullName;
    
                    // Use the dummy value as a placeholder for optional arguments
                    Document wdDoc = word.Documents.Open(ref filename, ref oMissing,
                        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                        ref oMissing, ref oMissing, ref oMissing, ref oMissing);
                    wdDoc.Activate();
    
                    List<ItensContrato> docs = new List<ItensContrato>();
                    List<ItensContrato> trein = new List<ItensContrato>();
                    List<ItensContrato> laudos = new List<ItensContrato>();
                    List<ItensContrato> outros = new List<ItensContrato>();
    
                    foreach (ItensContrato item in itens)
                    {
                        if (item.Produto.CategoriaProduto.Codigo == 1)
                        {
                            trein.Add(item);
                        }
                        else if (item.Produto.CategoriaProduto.Codigo == 2)
                        {
                            docs.Add(item);
                        }
                        else if (item.Produto.CategoriaProduto.Codigo == 3)
                        {
                            laudos.Add(item);
                        }
                        else
                        {
                            outros.Add(item);
                        }
                    }
                    ItensContrato[] docsV = docs.ToArray();
                    ItensContrato[] treinV = trein.ToArray();
                    ItensContrato[] laudosV = laudos.ToArray();
                    ItensContrato[] outrosV = outros.ToArray();
                    int row = 0;
                    //DOCS                
                    if (docsV.Length > 0)
                    {
                        Word.Table table = wdDoc.Tables[2];
                        for (row = 0; row < docs.Count; row++)
                        {
                            table.Rows.Add(table.Rows[2]);
                        }
                        Word.Cell celdoc1;
                        Word.Cell celdoc2;
                        for (row = 2; row < (docsV.Length + 2); row++)
                        {
    
                            celdoc1 = table.Cell(row, 1);
                            celdoc2 = table.Cell(row, 2);
                            celdoc1.Range.Text = docsV[(row - 2)].Produto.Descricao + (docsV[(row - 2)].Vig == 0 ? "" : docsV[(row - 2)].Vig == 1 ? " 1º ano" : " 2º ano");
                            celdoc2.Range.Text = docsV[(row - 2)].Qtde.ToString();
                        }
                        table.Rows[row].Delete();
                    }
                    //TREINAMENTOS
                    if (treinV.Length > 0)
                    {
                        row = 0;
                        Word.Table table2 = wdDoc.Tables[1];
                        for (row = 0; row < trein.Count; row++)
                        {
                            table2.Rows.Add(table2.Rows[2]);
                        }
                        Word.Cell celTrein1;
                        Word.Cell celTrein2;
                        for (row = 2; row < (treinV.Length + 2); row++)
                        {
                            celTrein1 = table2.Cell(row, 1);
                            celTrein2 = table2.Cell(row, 2);
                            celTrein1.Range.Text = treinV[(row - 2)].Produto.Descricao + (treinV[(row - 2)].Vig == 0 ? "" : treinV[(row - 2)].Vig == 1 ? " 1º ano" : " 2º ano");
                            celTrein2.Range.Text = treinV[(row - 2)].Qtde.ToString();
                        }
                        table2.Rows[row].Delete();
                    }
                    if (laudosV.Length > 0)
                    {
                        row = 0;
                        //LAUDOS
                        Word.Table table3 = wdDoc.Tables[3];
                        for (row = 0; row < laudos.Count; row++)
                        {
                            table3.Rows.Add(table3.Rows[2]);
                        }
                        Word.Cell celLaudos1;
                        Word.Cell celLaudos2;
                        for (row = 2; row < (laudosV.Length + 2); row++)
                        {
    
                            celLaudos1 = table3.Cell(row, 1);
                            celLaudos2 = table3.Cell(row, 2);
                            celLaudos1.Range.Text = laudosV[(row - 2)].Produto.Descricao + (laudosV[(row - 2)].Vig == 0 ? "" : laudosV[(row - 2)].Vig == 1 ? " 1º ano" : " 2º ano");
                            celLaudos2.Range.Text = laudosV[(row - 2)].Qtde.ToString();
                        }
                        table3.Rows[row].Delete();
                    }
                    //OUTROS
                    if (outrosV.Length > 0)
                    {
                        row = 0;
                        Word.Table table4 = wdDoc.Tables[4];
                        for (row = 0; row < outros.Count; row++)
                        {
                            table4.Rows.Add(table4.Rows[2]);
                        }
                        Word.Cell celOutros1;
                        Word.Cell celOutros2;
                        for (row = 2; row < (outrosV.Length + 2); row++)
                        {
    
                            celOutros1 = table4.Cell(row, 1);
                            celOutros2 = table4.Cell(row, 2);
                            celOutros1.Range.Text = outrosV[(row - 2)].Produto.Descricao + (outrosV[(row - 2)].Vig == 0 ? "" : outrosV[(row - 2)].Vig == 1 ? " 1º ano" : " 2º ano");
                            celOutros2.Range.Text = outrosV[(row - 2)].Qtde.ToString();
                        }
                        table4.Rows[row].Delete();
                    }
    
                    //TABELA DE PREÇOS CONTRATO
                    ProdutoBLL bllProd = new ProdutoBLL();
                    List<Produto.ProdutoTela> produtos = bllProd.GetProdutosTela(out mensagemErro, true);
                    Produto.ProdutoTela[] produtosV = produtos.ToArray();
                    Word.Table table5 = wdDoc.Tables[5];
                    for (row = 0; row < produtos.Count; row++)
                    {
                        table5.Rows.Add(table5.Rows[3]);
                    }
                    Word.Cell celprodutos1;
                    Word.Cell celprodutos2;
                    for (row = 3; row < (produtosV.Length + 3); row++)
                    {
                        celprodutos1 = table5.Cell(row, 1);
                        celprodutos2 = table5.Cell(row, 2);
                        celprodutos1.Range.Text = produtosV[(row - 3)].Descricao;
                        celprodutos2.Range.Text = produtosV[(row - 3)].ValorPorPessoa != 0 ? "R$ " + produtosV[(row - 3)].ValorPorPessoa.ToString("0.00") : "R$ 0,00";
                    }
                    table5.Rows[row].Delete();
    
                    object outputFileName = wordFile.FullName.Replace(".docx", ".pdf");
                    object fileFormat = WdSaveFormat.wdFormatPDF;
                    wdDoc.Save();
                    // Save document into PDF Format
                    wdDoc.SaveAs(ref outputFileName,
                        ref fileFormat, ref oMissing, ref oMissing,
                        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                        ref oMissing, ref oMissing, ref oMissing, ref oMissing);
    
                    // Close the Word document, but leave the Word application open.
                    // doc has to be cast to type _Document so that it will find the
                    // correct Close method.                
                    object saveChanges = WdSaveOptions.wdSaveChanges;
                    ((_Document)wdDoc).Close(ref saveChanges, ref oMissing, ref oMissing);              
                    wdDoc = null;
                    ((_Application)word).Quit(ref oMissing, ref oMissing, ref oMissing);
                    word = null;
                } catch(Exception ex)
                {
                    Uteis.GravarLogErro("Erro", ex.Message);
                    mensagemErro = ex.Message;
                }
            }

    Wednesday, May 8, 2019 3:01 PM