Ver Mensaje Individual
  #3 (permalink)  
Antiguo 07/09/2009, 12:02
darkandres123
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Abrir y modificar un archivo de exel

Yo lo hago.. no es complicado.... código en C#

Agregas la referencia a Excel

Código asp:
Ver original
  1. using Excel = Microsoft.Office.Interop.Excel;

*La encuentras en el menú superior Project, en Add Reference, pestaña COM y seleccionas Microsoft Excel 12.0 Object Library (12.0 si usas Office 2007, si usas Office 2003 entonces buscas la 11.0, da lo mismo cualquiera que tengas).

Luego declaras las variables a utilizar, yo las tengo como globales, no se qué te sirva más

Código asp:
Ver original
  1. Excel.Application oXL;
  2. Excel._Workbook oWB;
  3. Excel._Worksheet oSheet;
  4. public OleDbConnection mconn;
  5. public OleDbDataAdapter ad;


Ahora nos toca establecer la conexión al archivo


Código asp:
Ver original
  1. public bool OpenOLEDBConnection(string path, string page) //GENERA LA CONEXIÓN CON EXCEL
  2.         {
  3.             try
  4.             {
  5.                 //string strconn = @"Provider=Microsoft.Jet.Oledb.4.0; data source=" + path + ";Extended properties=\"Excel 8.0;\""; //OFFICE 2003
  6.                 string strconn = @"Provider=Microsoft.ACE.OLEDB.12.0; data source=" + path + ";Extended properties=\"Excel 12.0;\""; //OFFICE 2007
  7.                 mconn = new OleDbConnection(strconn);
  8.                 ad = new OleDbDataAdapter("Select * from [" + page + "$]", mconn);
  9.                 mconn.Open();
  10.                 return true;
  11.             }
  12.             catch
  13.             {
  14.                 return false;
  15.             }
  16.         }


*Como parámetro le envías la dirección del archivo que quieres abrir, con todo y nombre del mismo... y en Page colocas el nombre de la hoja del archivo que quieres leer...

La función anterior la llamas desde el siguiente método


Código asp:
Ver original
  1. public DataTable LoadExcelFile(string path, string page) //TRANSFIERE DATOS DEL EXCEL A LA TABLA VIRTUAL
  2.         {
  3.             DataTable dt = new DataTable();
  4.             bool oledbconnected = OpenOLEDBConnection(path, page);
  5.             if (oledbconnected)
  6.             {
  7.                 try
  8.                 {
  9.                     ad.Fill(dt);
  10.                     mconn.Close();
  11.                     return dt;
  12.                 }
  13.                 catch (Exception e)
  14.                 {
  15.                     lblError.Text = e.Message;
  16.                     mconn.Close();
  17.                     throw;
  18.                 }
  19.             }
  20.             else
  21.                 return null;
  22.         }


Esto devuelve un DataTable con los datos... de igual forma te recuerdo los parámetros, dirección del archivo y nombre de la hoja a leer...

Luego simplemente lo llamas de la siguiente forma


Código asp:
Ver original
  1. DataTable dt = LoadExcelFile(Path, Page)

*Ahora, es posible que el nombre de la hoja del archivo que quieres abrir cambie y eso te dará problemas, por lo que el parámetro page de la sentencia anterior lo puedes obtener previamente a leer el archivo... puedes utilizar algo como lo siguiente..

Código asp:
Ver original
  1. private string GetPageName(string filepath) //OBTIENE EL NOMBRE DE LA HOJA DE DATOS
  2.         {
  3.             try
  4.             {
  5.                 Excel.Application excel = new Excel.Application();
  6.                 Excel.Sheets sheets;
  7.                 Excel.Worksheet worksheet;
  8.                 System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
  9.                 System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
  10.                 //Se abre el archivo
  11.                 excel.Workbooks.Open(filepath, Type.Missing, Type.Missing, Type.Missing,
  12.                 Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  13.                 Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  14.                 Type.Missing);
  15.                 //Obtiene las hojas del libro abierto
  16.                 sheets = excel.Worksheets;
  17.                 worksheet = (Excel.Worksheet)sheets.get_Item(1);
  18.                 //Se obtiene el nombre de la hoja
  19.                 string pageName = worksheet.Name;
  20.                 excel.Workbooks.Close();
  21.                 excel.Quit();
  22.                 System.Threading.Thread.CurrentThread.CurrentCulture = CurrentCI; // restaura el CultureInfo
  23.                 return pageName;
  24.             }
  25.             catch
  26.             {
  27.                 return null;
  28.             }
  29.         }

Al final limpias las variables, si modificas algo recuerda guardarlo con la propiedad Close.

Código asp:
Ver original
  1. oXL.ActiveWorkbook.Close(true, filePath, Type.Missing); //Guarda el archivo
  2. oXL.Quit();
  3. oXL = null;


Ahora tienes los datos en un DataTable en memoria, simplemente lo recorres para obtener cada línea y modificarla según lo vayas necesitando

Código asp:
Ver original
  1. foreach (DataRow dr in dt.Rows)
  2.                                 {
  3. string rec[] = new string(dr[0].ToString().Trim(), dr[1].ToString().Trim(), dr[2].ToString().Trim());
  4. }

***Conste es un simple ejemplo, vos lo usás a como lo necesites... prueba a ver que tal y si tienes problemas me avisas....


PD: Si alguno necesita crear el archivo de Excel lo encuentran aquí:

psicofxp.com/forums/programacion.313/880753-crear-un-archivo-excel-c-webforms.html

Última edición por darkandres123; 08/09/2009 a las 10:06 Razón: Formato