Usando Interop con C#, Excel Guardar cambiando el original.¿Cómo negar esto?
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.)
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?
- Lo mismo ocurre con Guardar como
- 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#