Pergunta

Estou bem ciente do artigo Microsoft base de apoio afirmando que não é suportado para produtos de escritório Automatize UI menos. Parece que Windows Server 2008 x64 e Excel 2007 impor a declaração dada.

Estou executando o seguinte código em um serviço NT (conta Sistema Local) método OnStart. Tudo que faz é a automação Excel da maneira que está funcionando quando você executar o mesmo código em um aplicativo do console.

O código fornecido tem duas partes. A primeira parte inicia Excel, cria um novo livro de trabalho e salva-lo para o arquivo informado. A segunda parte inicia uma nova instância do Excel e abre o arquivo dado. As extremidades operação de abertura neste exceção:

O serviço não pode ser iniciado. System.Runtime.InteropServices.COMException (0x800A03EC): Microsoft Office Excel não pode acessar o arquivo 'c: \ temp \ test.xls'. Há várias razões possíveis:

• O nome do arquivo ou caminho não existe. • O arquivo está sendo usado por outro programa. • A pasta de trabalho que você está tentando salvar tem o mesmo nome como um livro aberto no momento.

Por que foi o excel automatizado capaz de lançar e gravar arquivos em disco, mas falha quando ele pediu “apenas“para abrir um arquivo existente?

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
// launch excel and create/save a new work book
Microsoft.Office.Interop.Excel.ApplicationClass excel = new       Microsoft.Office.Interop.Excel.ApplicationClass();
excel.UserLibraryPath, excel.Interactive));
//            
string filename = "c:\\temp\\test.xls";
if(System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
//
excel.Workbooks.Add(System.Reflection.Missing.Value);
excel.Save(filename);
excel.Quit();
excel = null;
// lauch new instance of excel and open saved file
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
try
{
    Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Open(filename,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                true,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                false,
                false,
                System.Reflection.Missing.Value,
                false,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value);
     book.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
      book = null;
  }
  finally
  {
      excel.Quit();
      excel = null;
  }
  //
  GC.Collect();
Foi útil?

Solução

A solução é muito simples. O tópico do fórum MSDN pode ser encontrada aqui

Para fazer uma longa história curta estou postando a solução aqui, o crédito vai para H Ogawa

Esta solução é ...

· Windows 2008 servidor x64

Por favor, faça esta pasta.

C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop

· Windows 2008 servidor x86

Por favor, faça esta pasta.

C: \ Windows \ System32 \ config \ systemprofile \ Desktop

... em vez de dcomcnfg.exe.

Esta operação levou problemas de automação de escritório no meu sistema.

pasta um desktop parece ser necessária na pasta systemprofile para arquivo aberto pelo Excel.

Ele desaparece da Windows2008, Windows2003 tinha a pasta, e eu acho que causa esse erro.

Outras dicas

Além disso, como afirmado na fonte, é necessário definir os direitos corretos para a pasta Desktop. Isso funcionou para mim no Windows 2008-64bits e Office 2010 32bits.

  1. Criar diretório "C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop" (para Windows de 64 bits) ou "C: \ Windows \ System32 \ config \ systemprofile \ Desktop" (para 32 bits Windows)

  2. user Assign "Serviços de Rede (Serviço Réseau)" os seguintes direitos para a pasta criada:

Ler e Executar, Listar conteúdo da pasta, ler

John.

Eu encontrei muitas vezes que chamando Quit () não é suficiente para liberar os recursos. Tente adicionar: -

System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);

entre a declaração Quit () e defini-lo como nulo.

Há muitos mais erros do que o mencionado que você vai precisar para trabalhar com a fim de obter Excel trabalhando no Windows Server 2007 64-bit. Veja os passos que funcionou depois de trabalhar sobre isso por dois dias inteiros!

Se você estiver usando Apache, que você pode também precisa seguir estes passos para obter MS Word funcionando corretamente (juntamente com tudo descrito em outras respostas):

Abaixo está uma imagem mostrando os dois diálogos que você precisa para abrir: enter descrição da imagem aqui

Para o Apache:

Serviços-> em Apache> Right Click (Propriedades) -> Log On Tab

MS Word:

Lançamento dcomcnfg.exe-> Console Root-> Componente Serviços-> Informática-> Meu computador '> DCOM config-> Encontre Microsoft Aplicativo-> clique direito (Propriedades) -> Aba Identidade

** se você não consegue encontrar o MS Word, verifique se você está lançando a correta configuração DCOM (64 bit vs 32 bit), dependendo de qual versão do Office que você instalou.

Há duas opções aqui, você pode configurar o Apache para usar Conta do sistema local e marque a caixa de seleção para permitir a interação desktop. Se você fizer isso, então você precisa definir o Identidade para o MS Word para usuário interativo .

Caso contrário, você precisa configurar tanto para o mesmo usuário (Idealmente, o usuário que está logado) como mostrado na imagem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top