Ver Mensaje Individual
  #3 (permalink)  
Antiguo 10/04/2007, 03:09
Avatar de txarly
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?