Foros del Web » Programación para mayores de 30 ;) » .NET »

trabajar con varias hojas en un excel

Estas en el tema de trabajar con varias hojas en un excel en el foro de .NET en Foros del Web. Lo que obtengo mas abajo solo es valido para version del office 2003 en adelante, dado que trabaja con xml que no lo sabe utilizar ...
  #1 (permalink)  
Antiguo 13/01/2009, 10:20
 
Fecha de Ingreso: septiembre-2007
Mensajes: 68
Antigüedad: 17 años, 2 meses
Puntos: 0
trabajar con varias hojas en un excel

Lo que obtengo mas abajo solo es valido para version del office 2003 en adelante, dado que trabaja con xml que no lo sabe utilizar las versiones anteriores


Buenas a todos!!

Despues de estar revisando ejemplos por google para trabajar con varias hojas no he encontrado ningun ejemplo que me pueda valer.

El caso es que no puedo usar la libreria existente en el excel para trabajar dado que no me permiten instalar el mismo en la maquina donde debo alojar mi codigo

Actualmente tengo este codigo:

Cita:
DataSet ds = _module.ExportEstadisticasbyGPDataSet(ge2, puesto2);

Response.AddHeader("Content-Disposition", "attachment;filename=" + ge2.Descripcion.Replace(' ', '_') + ".xls");
Response.ContentType = "application/vnd.ms-excel";
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.Charset = "";
this.EnableViewState = false;

for (int x = 0; x < ds.Tables.Count; x++)
{
//cargamos la tabla actual
DataGrid dg = new DataGrid();
dg.DataSource = ds.Tables[x];
dg.DataBind();

//formateamos las caratcteristicas de la hoja
dg.Font.Name = "Verdana";
dg.BorderStyle = System.Web.UI.WebControls.BorderStyle.Solid;
dg.HeaderStyle.BackColor = System.Drawing.Color.Blue;
dg.HeaderStyle.ForeColor = System.Drawing.Color.White;
dg.HeaderStyle.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;
dg.HeaderStyle.Wrap = false;
dg.HeaderStyle.Font.Bold = true;

//renderizamos los datos
System.IO.StringWriter tw = new StringWriter();
System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(tw);
dg.RenderControl(hw);

Response.Write(tw.ToString());
}

Response.End();
Necesito añadir cada ds.Tables en una hoja distinta.

Espero que me podais ayudar,
un saludo

Última edición por gerard_a; 16/01/2009 a las 06:20 Razón: resuelto
  #2 (permalink)  
Antiguo 15/01/2009, 05:32
 
Fecha de Ingreso: septiembre-2007
Mensajes: 68
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: trabajar con varias hojas en un excel

Bueno he seguido en mi busqueda de información y he llegado a una posible solucion, construir el excel con StringWriter.

Actualmente tengo esta estructura:

Código:
<WorkSheet ss:Name="Seccion1">
<Table>
<Row>
<Cell ss:StyleID="s62"><Data ss:Type="String">Empleado</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Dept</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Categoria</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">nombre 1</Data></Cell>
<Cell><Data ss:Type="String">dept 1/Data></Cell>
<Cell><Data ss:Type="String">cat. trabajador 1</Data></Cell>
</Row>
</Table>
</WorkSheet>
<WorkSheet ss:Name="Seccion2">
<Table>
<Row>
<Cell ss:StyleID="s62"><Data ss:Type="String">Empleado</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Dept</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Categoria</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">nombre 2</Data></Cell>
<Cell><Data ss:Type="String">dept 2/Data></Cell>
<Cell><Data ss:Type="String">cat. trabajador 2</Data></Cell>
</Row>
</Table>
</WorkSheet>
y le asigno esta cabecera:

Código:
StringBuilder sb = new StringBuilder(818);
            sb.AppendFormat(@"<?xml version=""1.0""?>{0}", Environment.NewLine);
            sb.AppendFormat(@"<?mso-application progid=""Excel.Sheet""?>{0}", Environment.NewLine);
            sb.AppendFormat(@"<Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet""{0}", Environment.NewLine);
            sb.AppendFormat(@" xmlns:o=""urn:schemas-microsoft-com:office:office""{0}", Environment.NewLine);
            sb.AppendFormat(@" xmlns:x=""urn:schemas-microsoft-com:office:excel""{0}", Environment.NewLine);
            sb.AppendFormat(@" xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet""{0}", Environment.NewLine);
            sb.AppendFormat(@" xmlns:html=""http://www.w3.org/TR/REC-html40"">{0}", Environment.NewLine);
            sb.AppendFormat(@" <Styles>{0}", Environment.NewLine);
            sb.AppendFormat(@"  <Style ss:ID=""Default"" ss:Name=""Normal"">{0}", Environment.NewLine);
            sb.AppendFormat(@"   <Alignment ss:Vertical=""Bottom""/>{0}", Environment.NewLine);
            sb.AppendFormat(@"   <Borders/>{0}", Environment.NewLine);
            sb.AppendFormat(@"   <Font ss:FontName=""Calibri"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000""/>{0}", Environment.NewLine);
            sb.AppendFormat(@"   <Interior/>{0}", Environment.NewLine);
            sb.AppendFormat(@"   <NumberFormat/>{0}", Environment.NewLine);
            sb.AppendFormat(@"   <Protection/>{0}", Environment.NewLine);
            sb.AppendFormat(@"  </Style>{0}", Environment.NewLine);
            sb.AppendFormat(@"  <Style ss:ID=""s62"">{0}", Environment.NewLine);
            sb.AppendFormat(@"   <Font ss:FontName=""Calibri"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000""{0}", Environment.NewLine);
            sb.AppendFormat(@"    ss:Bold=""1""/>{0}", Environment.NewLine);
            sb.AppendFormat(@"  </Style>{0}", Environment.NewLine);
            sb.AppendFormat(@"  <Style ss:ID=""s63"">{0}", Environment.NewLine);
            sb.AppendFormat(@"   <NumberFormat ss:Format=""Short Date""/>{0}", Environment.NewLine);
            sb.AppendFormat(@"  </Style>{0}", Environment.NewLine);
            sb.AppendFormat(@" </Styles>{0}", Environment.NewLine);
            sb.Append(@"{0}</Workbook>");
            return sb.ToString();
Me pone bien el nombre de la celda en la primera hoja pero no me crea la segunda hoja, ya que lo añade todo en la primera y ademas pone el contenido que figura en cada WorkSheet dentro de la primera celda de cada columna, es decir, en la celda 1-1 me pone el todo el contenido del worksheet Seccion1
y en la celda 2-1 me pone el contenido del worksheet Seccion2

Sabeis porque ocurre esto?

Un saludo
  #3 (permalink)  
Antiguo 19/01/2009, 09:47
Avatar de diegopedro  
Fecha de Ingreso: agosto-2006
Ubicación: Santiago
Mensajes: 120
Antigüedad: 18 años, 3 meses
Puntos: 0
Respuesta: trabajar con varias hojas en un excel

Ve este link
http://www.forosdelweb.com/f29/manej...-net-c-627117/
__________________
Es facil apretar tornillos, pero lo complejo es saber que tornillo apretar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:30.