Automatización de Excel desde una página web HTML mediante JScript

Resumen

En este artículo se muestra cómo crear y manipular un libro de Microsoft Office Excel desde una página HTML.

Más información

En este artículo se muestra el código JScript que automatiza Excel. JScript no tiene ningún medio interno para crear SAFEARRAYs. Cuando se usa la automatización, si se llama a una función que requiere safearray, puede usar VBScript para crear SAFEARRAY. En el código siguiente se muestra esta combinación de código JScript y VBScript.

Creación del ejemplo de automatización

  1. Inicie el Bloc de notas.

  2. Pegue el código siguiente en el Bloc de notas.

    <HTML>
    <BODY>
    Press the button to start Excel and display quarterly data.
    <SCRIPT LANGUAGE="VBScript">
    Function CreateNamesArray()
    ' Create an array to set multiple values at once.
      Dim saNames(5, 2)
      saNames(0, 0) = "John"
    
    saNames(0, 1) = "Smith"
      saNames(1, 0) = "Tom"
      saNames(1, 1) = "Brown"
      saNames(2, 0) = "Sue"
      saNames(2, 1) = "Thomas"
      saNames(3, 0) = "Jane"
      saNames(3, 1) = "Jones"
      saNames(4, 0) = "Adam"
      saNames(4, 1) = "Johnson"
      CreateNamesArray = saNames
    End Function
    </SCRIPT>
    
    <SCRIPT LANGUAGE="JScript"> 
    function AutomateExcel()
    {
    
    // Start Excel and get Application object.
          var oXL = new ActiveXObject("Excel.Application");
    
    oXL.Visible = true;
    
    // Get a new workbook.
          var oWB = oXL.Workbooks.Add();
          var oSheet = oWB.ActiveSheet;
    
    // Add table headers going cell by cell.
          oSheet.Cells(1, 1).Value = "First Name";
          oSheet.Cells(1, 2).Value = "Last Name";
          oSheet.Cells(1, 3).Value = "Full Name";
          oSheet.Cells(1, 4).Value = "Salary";
    
    // Format A1:D1 as bold, vertical alignment = center.
          oSheet.Range("A1", "D1").Font.Bold = true;
          oSheet.Range("A1", "D1").VerticalAlignment =  -4108; //xlVAlignCenter
    
    // Create an array to set multiple values at once.
    
    // Fill A2:B6 with an array of values (from VBScript).
          oSheet.Range("A2", "B6").Value = CreateNamesArray();
    
    // Fill C2:C6 with a relative formula (=A2 & " " & B2).
          var oRng = oSheet.Range("C2", "C6");
          oRng.Formula = "=A2 & \" \" & B2";
    
    // Fill D2:D6 with a formula(=RAND()*100000) and apply format.
          oRng = oSheet.Range("D2", "D6");
          oRng.Formula = "=RAND()*100000";
          oRng.NumberFormat = "$0.00";
    
    // AutoFit columns A:D.
          oRng = oSheet.Range("A1", "D1");
          oRng.EntireColumn.AutoFit();
    
    // Manipulate a variable number of columns for Quarterly Sales Data.
          DispalyQuarterlySales(oSheet);
    
    // Make sure Excel is visible and give the user control
       // of Excel's lifetime.
          oXL.Visible = true;
          oXL.UserControl = true;
    }
    
    function DispalyQuarterlySales(oWS)
    {
          var iNumQtrs, sMsg, iRet;
    
    // Number of quarters to display data for.
          iNumQtrs = 4;
    
    // Starting at E1, fill headers for the number of columns selected.
          var oResizeRange = oWS.Range("E1", "E1").Resize(1,iNumQtrs);
          oResizeRange.Formula = "=\"Q\" & COLUMN()-4 & CHAR(10) & \"Sales\"";
    
    // Change the Orientation and WrapText properties for the headers.
          oResizeRange.Orientation = 38;
          oResizeRange.WrapText = true;
    
    // Fill the interior color of the headers.
          oResizeRange.Interior.ColorIndex = 36;
    
    // Fill the columns with a formula and apply a number format.
          oResizeRange = oWS.Range("E2", "E6").Resize(5,iNumQtrs);
          oResizeRange.Formula = "=RAND()*100";
          oResizeRange.NumberFormat = "$0.00";
    
    // Apply borders to the Sales data and headers.
          oResizeRange = oWS.Range("E1", "E6").Resize(6,iNumQtrs);
          oResizeRange.Borders.Weight = 2;  // xlThin
    
    // Add a Totals formula for the sales data and apply a border.
          oResizeRange = oWS.Range("E8", "E8").Resize(1,iNumQtrs);
          oResizeRange.Formula = "=SUM(E2:E6)";
        // 9 = xlEdgeBottom      
          oResizeRange.Borders(9).LineStyle = -4119; //xlDouble
          oResizeRange.Borders(9).Weight = 4; //xlThick
    
    // Add a Chart for the selected data.
    
    oResizeRange = oWS.Range("E2:E6").Resize(5,iNumQtrs);
          var oChart = oWS.Parent.Charts.Add();
          oChart.ChartWizard(oResizeRange, -4100, null, 2);  // -4100 = xl3dColumn
          oChart.SeriesCollection(1).XValues = oWS.Range("A2", "A6");
          for (iRet = 1; iRet <= iNumQtrs; iRet++) {
             oChart.SeriesCollection(iRet).Name = "=\"Q" + iRet + "\"";
          }
          oChart.Location(2, oWS.Name); // 2 = xlLocationAsObject
    
    // Move the chart so as not to cover your data.
          oWS.Shapes("Chart 1").Top = oWS.Rows(10).Top;
          oWS.Shapes("Chart 1").Left = oWS.Columns(2).Left;
    }
    </SCRIPT>
    <P><INPUT id=button1 type=button value="Start Excel" 
              onclick="AutomateExcel"></P>
    </BODY>
    </HTML>
    
  3. Guarde el archivo en un directorio de su elección con el nombre de archivo Excelaut.htm.

  4. Cierre el Bloc de notas e inicie Internet Explorer.

  5. En la barra de direcciones, escriba C:*path*\excelaut.htm, donde path es el directorio en el que guardó el archivo.

  6. Cuando Internet Explorer cargue el archivo, verá una oración con un botón. Al presionar el botón, Excel se iniciará en el equipo del cliente y se rellenará con datos.

Referencias

Este artículo es paralelo a otros artículos que describen el mismo proceso mediante diferentes lenguajes. Para obtener más información, haga clic en los números de artículo siguientes para ver los artículos de Microsoft Knowledge Base:

219151 Automatización de Microsoft Excel desde Visual Basic

179706 Uso de MFC para automatizar Excel y crear y dar formato a un nuevo libro

Para obtener más información sobre cómo automatizar Excel desde una página HTML, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

198703 Automatización de Excel desde un VBScript del lado cliente

Para obtener más información sobre Office Automation, visite el siguiente sitio web de soporte técnico de Desarrollo de Microsoft Office: Soporte técnico de Microsoft