RELATÓRIO COM WORD 2016
Boa tarde,
tenho um sistema que gera relatório em Word 2010, porém ao instalar em uma maquina que usa o Word 2016 o sistema não funciona.
Me parece que o Word 2016 não esta deixando o sistema acessa-lo, alguém já teve algum problema parecido?
Parte do código:
Dim objDoc As Word.Document
Set objWord = New Word.Application
objWord.Visible = True
Set objDoc = objWord.Documents.Open(App.Path & [Ô]\bi.doc[Ô])
tenho um sistema que gera relatório em Word 2010, porém ao instalar em uma maquina que usa o Word 2016 o sistema não funciona.
Me parece que o Word 2016 não esta deixando o sistema acessa-lo, alguém já teve algum problema parecido?
Parte do código:
Dim objDoc As Word.Document
Set objWord = New Word.Application
objWord.Visible = True
Set objDoc = objWord.Documents.Open(App.Path & [Ô]\bi.doc[Ô])
FLAVIOGUILHERME,
Não sei se te ajuda, eu estou usando o Office 2016 com ASP.Net MVC desta forma:
======================
wd = new WordModels();
wd.AbrirTemplate(PastaModels.CaminhoTemplate());
Dictionary<String, String> PropriedadesDocumento = wd.ImportarDocProperties();
======================
public void AbrirTemplate(String caminho)
{
docWord = wordApp.Documents.Add(caminho);
}
======================
public static String CaminhoTemplate()
{
return PastaModels.diretorioAplicacao() + @ConfigurationManager.AppSettings.Get([Ô]Template[Ô]);
}
======================
public Dictionary<String, String> ImportarDocProperties()
{
foreach (dynamic prop in docWord.CustomDocumentProperties)
{
docProperties.Add(prop.Name().ToString(), prop.Value().ToString());
}
return docProperties;
}
======================
using System;
using Word = Microsoft.Office.Interop.Word;
using System.Collections.Generic;
public WordModels()
{
wordApp = new Word.Application();
wordApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;
//wordApp.Visible = true;
docProperties = new Dictionary<String, String>();
}
======================
private void GerarRelatorio()
{
wd = new WordModels();
wd.AbrirTemplate(PastaModels.CaminhoTemplate());
Dictionary<String, String> PropriedadesDocumento = wd.ImportarDocProperties();
foreach (KeyValuePair<String, String> item in PropriedadesDocumento)
{
if (this.dadosAtual.ContainsKey(item.Key))
{
String valor = this.dadosAtual[item.Key];
wd.AtualizarDocProperty(item.Key.ToString(), valor);
}
}
wd.AtualizarDocVariable([Ô]CaminhoImagem[Ô], PastaModels.CaminhoImagens());
wd.AtualizarCampos();
wd.SalvarRelatorio(PastaModels.CaminhoRelatorios() + this.nome);
wd = null;
}
======================
public void AtualizarDocVariable(String name, String value)
{
docWord.Variables[name].Value = value;
}
======================
public void AtualizarCampos()
{
//foreach (Word.Shape shape in this.docWord.Shapes)
// shape.TextFrame.TextRange.Fields.Update();
docWord.Fields.Update();
docWord.Fields.Update();
docWord.Fields.Update();
}
======================
public void SalvarRelatorio(String caminho)
{
docWord.SaveAs(caminho);
docWord.SaveAs2(caminho,Word.WdSaveFormat.wdFormatPDF);
docWord.Close();
wordApp.Quit();
}
======================
[][ô]s,
Tunusat.
Não sei se te ajuda, eu estou usando o Office 2016 com ASP.Net MVC desta forma:
======================
wd = new WordModels();
wd.AbrirTemplate(PastaModels.CaminhoTemplate());
Dictionary<String, String> PropriedadesDocumento = wd.ImportarDocProperties();
======================
public void AbrirTemplate(String caminho)
{
docWord = wordApp.Documents.Add(caminho);
}
======================
public static String CaminhoTemplate()
{
return PastaModels.diretorioAplicacao() + @ConfigurationManager.AppSettings.Get([Ô]Template[Ô]);
}
======================
public Dictionary<String, String> ImportarDocProperties()
{
foreach (dynamic prop in docWord.CustomDocumentProperties)
{
docProperties.Add(prop.Name().ToString(), prop.Value().ToString());
}
return docProperties;
}
======================
using System;
using Word = Microsoft.Office.Interop.Word;
using System.Collections.Generic;
public WordModels()
{
wordApp = new Word.Application();
wordApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;
//wordApp.Visible = true;
docProperties = new Dictionary<String, String>();
}
======================
private void GerarRelatorio()
{
wd = new WordModels();
wd.AbrirTemplate(PastaModels.CaminhoTemplate());
Dictionary<String, String> PropriedadesDocumento = wd.ImportarDocProperties();
foreach (KeyValuePair<String, String> item in PropriedadesDocumento)
{
if (this.dadosAtual.ContainsKey(item.Key))
{
String valor = this.dadosAtual[item.Key];
wd.AtualizarDocProperty(item.Key.ToString(), valor);
}
}
wd.AtualizarDocVariable([Ô]CaminhoImagem[Ô], PastaModels.CaminhoImagens());
wd.AtualizarCampos();
wd.SalvarRelatorio(PastaModels.CaminhoRelatorios() + this.nome);
wd = null;
}
======================
public void AtualizarDocVariable(String name, String value)
{
docWord.Variables[name].Value = value;
}
======================
public void AtualizarCampos()
{
//foreach (Word.Shape shape in this.docWord.Shapes)
// shape.TextFrame.TextRange.Fields.Update();
docWord.Fields.Update();
docWord.Fields.Update();
docWord.Fields.Update();
}
======================
public void SalvarRelatorio(String caminho)
{
docWord.SaveAs(caminho);
docWord.SaveAs2(caminho,Word.WdSaveFormat.wdFormatPDF);
docWord.Close();
wordApp.Quit();
}
======================
[][ô]s,
Tunusat.
qual a msg de erro?
Você já tentou mudar a extensão do arquivo para [Ô].docx[Ô]?
Da erro nessa linha:
Set objWord = New Word.Application
TUNUSAT, obrigado, mas não funciona dessa maneira.
LVFIOROT, Diz que não foi possÃvel criar o objeto
MARIOANDRADE, Já mudei a Extensão para DOCX e também não funcionou.
No Office 2010 funciona perfeitamente, só no 2016 que não.
Set objWord = New Word.Application
TUNUSAT, obrigado, mas não funciona dessa maneira.
LVFIOROT, Diz que não foi possÃvel criar o objeto
MARIOANDRADE, Já mudei a Extensão para DOCX e também não funcionou.
No Office 2010 funciona perfeitamente, só no 2016 que não.
acredito que a referencia esteja causando este problema, em project/references verifique qual [Ô]Microsoft Office 14.0 Object Library[Ô] está selecionado, o 14.0 é para meu caso que possuo o office 2010 instalado em minha máquina,
Para solucionar o problema o ideal seria ou instalar a ultima versão do office na maquina em que o programa será compilado ou jogar apenas a dll do office mais novo no seu pc (não sei por teoria iria funcionar)
Para solucionar o problema o ideal seria ou instalar a ultima versão do office na maquina em que o programa será compilado ou jogar apenas a dll do office mais novo no seu pc (não sei por teoria iria funcionar)
Seu Office é 64 bit? Se for pode ser isso pois a Microsof não
oferece mais suporte para controles ActiveX para essa plataforma
(caso esteja usando algum no documento em questão).
oferece mais suporte para controles ActiveX para essa plataforma
(caso esteja usando algum no documento em questão).
Colocou no inicio
Dim Word As Object
Depois
Word = CreateObject([Ô]Word.Application[Ô])
Word.Documents.Open([Ô]Documentos.docx[Ô] )
Faça seu login para responder