Usar a Interoperabilidade com C#, o Excel Salva a alteração original.Como negar isso?
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.)
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?
- Idem no SaveAs
- 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#