Usando Interop con C#, Excel Guardar cambiando el original.¿Cómo negar esto?

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

  •  09-06-2019
  •  | 
  •  

Pregunta

El problema:Cargando una plantilla de hoja de cálculo de Excel.Usar el comando Guardar con un nombre de archivo diferente y luego salir del objeto de interoperabilidad.Esto termina guardando el archivo de plantilla original.No es el resultado que gusta.

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

El archivo original abierto es c: testing platplate.xls El nombre del archivo en el que se pasa es c: testing 7777 (fecha) .xls

¿Alguien tiene una respuesta?

(La respuesta que elegí fue la más correcta y completa, aunque wbk.Close() requiere que se le pasen parámetros.Gracias.)

¿Fue útil?

Solución

La interoperabilidad de Excel es bastante dolorosa.Desenterré un antiguo proyecto que tenía, jugueteé un poco y creo que esto es lo que estás buscando.Los otros comentaristas tienen razón, pero, al menos en mi experiencia, llamar a SaveAs() implica mucho más de lo que esperarías si has usado los mismos objetos (sin el contenedor de interoperabilidad) en 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();

Me encantan todos esos Type.Missings.Pero creo que son necesarios.

Otros consejos

En lugar de utilizar una aplicación Excel, puede utilizar el objeto Libro de trabajo y llamar al método SaveAs().Puede pasar el nombre del archivo actualizado allí.

¿Has probado Guardar como de la hoja de trabajo?

  1. Lo mismo ocurre con Guardar como
  2. Siempre que tengo que hacer Interop, creo una biblioteca de clases VB.NET separada y escribo la lógica en VB.Simplemente no vale la pena hacerlo en C#
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top