Usar a Interoperabilidade com C#, o Excel Salva a alteração original.Como negar isso?

StackOverflow https://stackoverflow.com/questions/29141

  •  09-06-2019
  •  | 
  •  

Pergunta

O problema:O carregamento de um modelo de planilha excel.Usando o comando Salvar com um nome diferente e, em seguida, encerrar a interoperabilidade objeto.Isso acaba salvando o arquivo de modelo original.Não é o resultado que está gostei.

public void saveAndExit(string filename)
{        
    excelApplication.Save(filename);
    excelApplication.Quit();
}

Original do arquivo aberto é c: esting emplate.xls O nome do arquivo que é passado é c: esting\7777 (data).xls

Alguém tem uma resposta?

(A resposta que eu escolhi foi a mais correta e completa, de que o wbk.Fechar() necessita de parâmetros passados para ele.Obrigado.)

Foi útil?

Solução

Excel interoperabilidade é muito doloroso.Eu desenterrei um projeto antigo que eu tinha, fiz um pouco de mexer, e eu acho que isso é o que você está procurando.Os outros comentaristas são o direito, mas, pelo menos na minha experiência, há muito mais para chamar SaveAs() do que seria de esperar se você já usou os mesmos objetos (sem o wrapper de interoperabilidade) no VBA.

Microsoft.Office.Interop.Excel.Workbook wbk = excelApplication.Workbooks[0];  //or some other way of obtaining this workbook reference, as Jason Z mentioned
wbk.SaveAs(filename, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, 
            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing);
wbk.Close();
excelApplication.Quit();

Tem que amar todas as pessoas do Tipo.Missings.Mas eu acho que eles são necessários.

Outras dicas

Em vez de usar um ExcelApplication, você pode usar o objeto de pasta de trabalho e chamar o método SaveAs ().Você pode passar o nome do ficheiro actualizado lá.

Você já tentou salvar como da Folha de cálculo?

  1. Idem no SaveAs
  2. Sempre que eu tenho que fazer Interoperabilidade eu criar um separado VB.NET biblioteca de classe e escrever com a lógica em VB.Só não vale a pena a trabalheira de fazer isso em C#
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top