C sharp - Cómo actualizar un achivo de Excel

 
Vista:
sin imagen de perfil

Cómo actualizar un achivo de Excel

Publicado por Leonardo (25 intervenciones) el 24/09/2008 20:51:21
Buenas tardes, estoy desarrollando una aplicación web para poder manejar archivos de (Excel utilizando los componentes de interoperabilidad (Microsoft.office.interop.excel), para crear un achivo excel no estoy teniendo problemas, simplemente hago algo como esto:

static void CrearXLS(string ArchivoFinal)
{
Excel.Application oXL;
Excel._Workbook oWB;
Excel._Worksheet oSheet;
oXL = new Excel.Application();
oXL.Visible = false;
//Creamos un nuevo libro
oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
//Nos posicionamos en la hoja de datos activa del Libro que se creó anteriormente
oSheet = (Excel._Worksheet)oWB.ActiveSheet;
//Agregamos algunos datos
oSheet.Cells[1, 1] = "Encabezado 1";
oSheet.Cells[1, 2] = "Encabezado 2";
oSheet.Cells[1, 3] = "Encabezado 3";
//Salvamos el archivo con el nombre que le enviamos de parámetro
oWB.SaveAs(ArchivoFinal, Excel.XlFileFormat.xlWorkbookDefault, null, null, false, false, Excel.XlSaveAsAccessMode.xlShared, false, false, null, null, null);
//Cerramos los objetos y liberamos recursos
oWB.Close(null, null, null);
oXL.Workbooks.Close();
oXL.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(oXL);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oWB);
oSheet = null;
oWB = null;
oXL = null;
}

Hasta aquí no tengo ningún problema, pero ahora en lugar de crear un nuevo archivo de excel necesito abrir un achivo existente en el servidor y agregarle una nota al final del archivo. Alguien tiene una idea de como puedo hacer esto??? E intengado utilizar el método Workbooks.Open, pero no se bien qué parámetos debo colocar. De antemano muchas gracias por la ayuda y les envío un cordial saludo a todos.
Leo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Cómo actualizar un achivo de Excel

Publicado por Alfredo Barrios (9 intervenciones) el 10/10/2008 00:53:45
Hay dos caminos:

1.- Por OLEDB.

string ExcelConnString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source =c: empexcelfile.xls;Extended Properties = Excel 8.0;";
string InsertExcel = "INSERT INTO [Sheet1$] (column1, column2, column3) ('ejemplo', ' de ', 'insert en excel')";
OleDbCommand oSQLCommand = new OleDbCommand();
OleDbDataAdapter oSQLDataAdapter = new OleDbDataAdapter();
OleDbConnection con = new OleDbConnection(ExcelConnString);
try
{
//Se abre la conexión
oSQLCommand.Connection = con;
oSQLCommand.Parameters.Clear();
oSQLCommand.CommandType = CommandType.Text;
oSQLCommand.CommandText = sQuery;
oSQLCommand.ExecuteNonQuery();
}
catch (Exception objException)
{
oFunctions.RegistraLog("OleDbReadAndWrite - QueryInsertUpdateDeleteOleDb: " + objException.Message + ", Conexion: " + ConnectionString + ", Query: " + sQuery, "DAOLilly");
throw objException;
}
finally
{
oSQLCommand.Connection.Close();
oSQLCommand.Connection.Dispose();
oSQLCommand = null;
try
{
con.Close();
}
catch { }
con.Dispose();
con = null;
}
2.- Con el objeto excel:
Excel._Workbook oBook = null;
Excel.Worksheet oSheet = null;
oBook = oExcel.Workbooks.Open("c: empexcelfile.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
oBook.Activate();
oSheet = (Excel.Worksheet)oBook.Worksheets["Captura"];
rng = oSheet.get_Range("F4", "F4");
rng.Value2 = "¡¡¡ Go to hell !!!";
oBook.Close(true, missing, missing);
oBook = null;
oSheet = null;

Las dos formas funcionan pero no siempre igual en todas las circunstancias, por ejemplo, la primera opción no siempre funciona cuando tiene macros el archivo de excel, ¿por qué?, no sé, pero se desmadra el archivo o algunas veces el proceso truena.

Espero que te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar