Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Population an Excel Range with an array
Message
De
06/07/2013 14:50:37
 
 
À
Tous
Information générale
Forum:
Visual FoxPro
Catégorie:
COM/DCOM et OLE Automation
Titre:
Population an Excel Range with an array
Versions des environnements
Visual FoxPro:
VFP 9 SP2
OS:
Windows Server 2012
Network:
Windows 2008 Server
Database:
MS SQL Server
Application:
Web
Divers
Thread ID:
01577886
Message ID:
01577886
Vues:
60
Populating Excel rows from a table one at a time can be very slow.
I came across something in .NET that speeds the process up a lot.. you can populate a range of cells from an array

Using the .NET code below, I get a spreadsheet with the names where the belong.
Using the VFP code below it, I get the word "John" in every cell.
Can anyone tell me how to get it to see the whole array?

Thanks in advance!!
// .NET Code
using System;
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection; 

using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Text;

namespace ExcelArray
{
  class Program
  {
    



    static void Main(string[] args)
    {
      Excel.Application oXL;
      Excel._Workbook oWB;
      Excel._Worksheet oSheet;
      Excel.Range oRng;
      try
      {
        //Start Excel and get Application object.
        oXL = new Excel.Application();
        oXL.Visible = true;

        //Get a new workbook.
        oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
        oSheet = (Excel._Worksheet)oWB.ActiveSheet;

        //Add table headers going cell by cell.
        oSheet.Cells[1, 1] = "First Name";
        oSheet.Cells[1, 2] = "Last Name";
        oSheet.Cells[1, 3] = "Full Name";
        oSheet.Cells[1, 4] = "Salary";

        //Format A1:D1 as bold, vertical alignment = center.
        oSheet.get_Range("A1", "D1").Font.Bold = true;
        oSheet.get_Range("A1", "D1").VerticalAlignment =
          Excel.XlVAlign.xlVAlignCenter;

        // Create an array to multiple values at once.
        string[,] saNames = new string[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";

        //Fill A2:B6 with an array of values (First and Last Names).
        oSheet.get_Range("A2", "B6").Value2 = saNames;

        //Fill C2:C6 with a relative formula (=A2 & " " & B2).
        oRng = oSheet.get_Range("C2", "C6");
        oRng.Formula = "=A2 & \" \" & B2";

        //Fill D2:D6 with a formula(=RAND()*100000) and apply format.
        oRng = oSheet.get_Range("D2", "D6");
        oRng.Formula = "=RAND()*100000";
        oRng.NumberFormat = "$0.00";

        //AutoFit columns A:D.
        oRng = oSheet.get_Range("A1", "D1");
        oRng.EntireColumn.AutoFit();

        //Manipulate a variable number of columns for Quarterly Sales Data.
      //  DisplayQuarterlySales(oSheet);

        //Make sure Excel is visible and give the user control
        //of Microsoft Excel's lifetime.
        oXL.Visible = true;
        oXL.UserControl = true;
      }
      catch (Exception theException)
      {
        String errorMessage;
        errorMessage = "Error: ";
        errorMessage = String.Concat(errorMessage, theException.Message);
        errorMessage = String.Concat(errorMessage, " Line: ");
        errorMessage = String.Concat(errorMessage, theException.Source);

        MessageBox.Show(errorMessage, "Error");
      }


    }
  }
}
*-- VFP Code
CLOSE ALL
CLEAR ALL
DIMENSION saNames(5,2)
saNames[1, 1] = "John"
saNames[1, 2] = "Smith"
saNames[2, 1] = "Tom"
saNames[2, 2] = "Brown"
saNames[3, 1] = "Sue"
saNames[3, 2] = "Thomas"
saNames[4, 1] = "Jane"
saNames[4, 2] = "Jones"
saNames[5, 1] = "Adam"
saNames[5, 2] = "Johnson"
oExcel = CREATEOBJECT("Excel.Application")
oExcel.Visible = .T.
oBook =  oExcel.Workbooks.Add()
oBook.Sheets[1].Name = "Summary"

WITH oExcel.ActiveSheet
  .Range["A1"].Value = "First"
  .Range["B1"].Value = "Last"
  oRange = .Range["A2:B6"]
ENDWITH
oRange.Value2 = saNames
Anyone who does not go overboard- deserves to.
Malcolm Forbes, Sr.
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform