Foros del Web » Programando para Internet » ASPX (.net) »

Informes con Word a partir de Excel en ASP.NET usando el Portapapeles

Estas en el tema de Informes con Word a partir de Excel en ASP.NET usando el Portapapeles en el foro de ASPX (.net) en Foros del Web. Hola; Tengo una pagina aspx que sigue el siguiente proceso para generar un informe de Word, uso las PIAS Interop de Office: - Abro un ...
  #1 (permalink)  
Antiguo 31/03/2007, 10:50
Avatar de txarly  
Fecha de Ingreso: marzo-2003
Ubicación: Eibar (Gipuzkoa)
Mensajes: 455
Antigüedad: 21 años, 10 meses
Puntos: 2
Pregunta Informes con Word a partir de Excel en ASP.NET usando el Portapapeles

Hola;

Tengo una pagina aspx que sigue el siguiente proceso para generar un informe de Word, uso las PIAS Interop de Office:

- Abro un libro de Excel
- Abro un documento de Word a partir de una plantilla .dot
- Cojo el area de impresión de cada una de sus hojas y copio en el portapapeles con:

Código:
area.CopyPicture(oExcel.XlPictureAppearance.xlScreen, oExcel.XlCopyPictureFormat.xlBitmap);
- En el documento de Word que tengo abierto quiero copiar la imagen que esta en el Clipboard

Código:
if (Clipboard.GetDataObject() != null)
{
    IDataObject data = Clipboard.GetDataObject();

    if (data.GetDataPresent(DataFormats.Bitmap))
    {
        Draw.Image image = (Draw.Image)data.GetData(DataFormats.Bitmap, true);
        image.Save(strImagePath, System.Drawing.Imaging.ImageFormat.Bmp);
    }
    else
    {
        MessageBox.Show("The Data In Clipboard is not as image format");
    }
}
else
{
    MessageBox.Show("The Clipboard was empty");
}

// pegar el contenido del portapapeles en el documento de word
word.AddPicture(strImagePath);

// insertar linea en blanco
word.InsertLineBreak();
- Este codigo funciona perfectamente pero en el documento de Word se ven las lineas de división del documento de Excel.
Para que no se vean estas lineas, tengo que copiar el area de Excel de la siguiente forma:

Código:
area.CopyPicture(oExcel.XlPictureAppearance.xlPrinter, oExcel.XlCopyPictureFormat.xlPicture);
- El problema es que ahora no puedo recoger la imagen del portapaeles con formato Bitmap ya que me dice que el formato es MetafilePict ó EnhancedMetafile, y al hacer:

Código:
obj imagen = data.GetData(DataFormats.MetafilePict);
me dice que el objeto es null, mi idea era recojer los datos del clipboard y generar una imagen para luego insertarla en Word, pero en este caso no se como recojerla.

Alguna idea de como recogerlo? ó como se puede plantear de otra forma?
Tambien me gustaria saber como asegurarme que al concurrir varios usuarios para generar informes a la vez el Copy-Paste sea robusto.

Gracias y un saludo
__________________
¿Por qué Uri Geller doblaba cucharas?
  #2 (permalink)  
Antiguo 02/04/2007, 04:31
Avatar de txarly  
Fecha de Ingreso: marzo-2003
Ubicación: Eibar (Gipuzkoa)
Mensajes: 455
Antigüedad: 21 años, 10 meses
Puntos: 2
Re: Informes con Word a partir de Excel en ASP.NET usando el Portapapeles

Por lo que he leido en Internet, Microsoft no recomienda el uso de componentes Office en aplicaciones ASP.NET.

http://support.microsoft.com/default...;en-us;q257757

¿Como se podria abordar el problema anterior de otra forma? El objetivo es pegar un area de Excell en un documento de Word.
¿Conocen algun control comercial que permita hacer esto?
__________________
¿Por qué Uri Geller doblaba cucharas?

Última edición por txarly; 02/04/2007 a las 08:46 Razón: Ampliar información
  #3 (permalink)  
Antiguo 10/04/2007, 03:09
Avatar de txarly  
Fecha de Ingreso: marzo-2003
Ubicación: Eibar (Gipuzkoa)
Mensajes: 455
Antigüedad: 21 años, 10 meses
Puntos: 2
Pregunta Re: Informes con Word a partir de Excel en ASP.NET usando el Portapapeles

Este es el código que utilizo en mi aplicacion para pegar en un documento de Word el area de impresión de un libro Excel y que funciona bien en desarrollo, sin embargo en un sitio con IIS no funciona, da fallo al pegar y la razón será alguna de las que da Microsoft en el siguiente documento.

http://support.microsoft.com/default...;en-us;q257757

¿Tienen alguna idea de como hacer esto y que no falle cuando publico en IIS, aunque sea haciendolo de otra forma? ¿algun componente comercial?

Código:
[STAThread]
private void CreateReport()
{
    VkExcel excel = null;
    vkWord word = null;
    object oMissing = System.Reflection.Missing.Value;

    try
    {
        String strIdFile = Request["ddlFile"];

        // Variables Locales
        String strExcelFile = strIdFile + ".xls";
        String strWordFile = strIdFile + ".doc";
        String strImageFile = strIdFile + ".jpg";

        String strExcelPath = Server.MapPath("../../Templates/" + strExcelFile);
        String strWordPath = Server.MapPath("../../Templates/" + strWordFile);
        String strImagePath = Server.MapPath("../../Templates/" + strImageFile);

        String strWordTemplate = Server.MapPath("../../Templates/Geslims.dot");

        // Abrir Excel
        excel = new VkExcel();
        String strExcelStatus = excel.OpenFile(strExcelPath, null);

        // Abrir Word
        word = new vkWord();
        word.OpenTemplate(strWordTemplate);
        word.GoToTheEnd();

        if (strExcelStatus.Equals("OK"))
        {
            // recorre todas las hojas del libro
            for (int i = 1; i <= excel.Sheets.Count; i++)
            {
                // obtener area de impresión de la hoja activa
                excel.Worksheet = (oExcel.Worksheet)excel.Sheets[i];
                oExcel.Range area = excel.GetRange("Área_de_impresión");

                if (area != null)
                {
                    // (1ª parte) Convertir el area de Excel en una imagen y copiarla al portapapeles
                    area.CopyPicture(oExcel.XlPictureAppearance.xlPrinter, oExcel.XlCopyPictureFormat.xlPicture);
                   
                    // (2ª parte) Pegar el contenido del portapapeles en el documento de Word
                    object oDataType = oWord.WdPasteDataType.wdPasteMetafilePicture;
                    word.Selection.PasteSpecial(ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oDataType, ref oMissing, ref oMissing);

                    // insertar linea en blanco
                    word.InsertLineBreak();
                }
            }

            // salvar documento de Word
            word.SaveAs(strWordPath);

            // Mensaje
            this.lblMessage.Text = "Se ha generado el informe " + strWordFile;
        }
    }
    finally
    {
        // Cerrar excel
        excel.CloseFile();
        excel.stopExcel();

        // Cerrar Word
        word.Quit();
    }
}
__________________
¿Por qué Uri Geller doblaba cucharas?
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 02:16.