Τρόπος χρήσης της MFC για να αυτοματοποιήσετε το Excel και να δημιουργήσετε και να διαμορφώσετε ένα νέο βιβλίο εργασίας

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 179706 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

Αυτό το άρθρο παρουσιάζει τον τρόπο για να αυτοματοποιήσετε το Microsoft Excel χρησιμοποιεί τη βιβλιοθήκη Microsoft Foundation κλάσης (MFC), έκδοση 4.2 (που εγκαθίστανται με το Microsoft Visual C++ εκδόσεις 5.0 και 6.0).

Αυτό το άρθρο περιγράφει μια τεχνική για χρήση αυτοματισμού OLE για τη δημιουργία/μορφή βιβλίου εργασίας Microsoft Excel, εισάγει τις διάφορες μεθόδους/Ιδιότητες (από τη βιβλιοθήκη τύπων του Microsoft Excel) για την προσθήκη δεδομένων στο φύλλο εργασίας και τη μορφοποίηση του φύλλου εργασίας.

Σημειώσεις για την αυτοματοποίηση του Microsoft Excel 2000 και 2002

Το δείγμα κώδικα σε αυτό το άρθρο χρησιμοποιεί wrappers κλάσης που δημιουργείται από τη βιβλιοθήκη αντικειμένων του Excel 97 (Excel 8.olb). Με μικρή τροποποίηση, αυτός ο κωδικός μπορεί να εφαρμοστεί σε έναν υπολογιστή-πελάτη αυτοματισμού που χρησιμοποιεί wrappers κλάσης για το Excel 2000 (Excel9.olb) ή στο Excel 2002 (Excel.olb). Για πρόσθετες πληροφορίες σχετικά με τη χρήση του δείγματος κώδικα που περιγράφεται σε αυτό το άρθρο με το Microsoft Excel 2000 ή 2002 τύπο βιβλιοθήκης, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να το προβάλετε στη Γνωσιακή Βάση της Microsoft:
224925ΠΛΗΡΟΦΟΡΙΕΣ: Βιβλιοθήκες τύπων για το Office ενδέχεται να αλλάξει με νέα έκδοση

Περισσότερες πληροφορίες

Μπορείτε να αντιγράψετε τον κωδικό σε αυτό το άρθρο για τη λειτουργία χειρισμού μηνυμάτων ενός συμβάντος που ορίζεται στο αρχείο .cpp MFC. Ωστόσο, είναι ο σκοπός του κώδικα για να απεικονίσει τη διαδικασία χρησιμοποιώντας τις διασυνδέσεις IDispatch και μέλος συναρτήσεις που ορίζονται στη βιβλιοθήκη τύπων Excel8.olb. Η πρωτεύουσα έχουν το πλεονέκτημα αυτού του άρθρου, ωστόσο, προέρχεται από την ανάγνωση και την κατανόηση ο κώδικας του παραδείγματος, έτσι ώστε να μπορείτε να τροποποιήσετε το παράδειγμα ή να γράψετε το δικό σας κώδικα για την αυτοματοποίηση του Microsoft Excel 97 χρησιμοποιώντας MFC.

Βήματα για τη δημιουργία του έργου

  1. Ακολουθήστε τα βήματα 1 έως 12 στο ακόλουθο άρθρο της Γνωσιακής Βάσης της Microsoft για να δημιουργήσετε ένα δείγμα έργο που χρησιμοποιεί το IDispatch διασυνδέσεις και μέλος συναρτήσεις που ορίζονται στη βιβλιοθήκη τύπων Excel8.olb:
    178749Τρόπος δημιουργίας αυτοματισμού του έργου χρησιμοποιώντας το MFC και μια βιβλιοθήκη τύπων
  2. Στο επάνω μέρος του αρχείου AutoProjectDlg.cpp, προσθέστε την ακόλουθη γραμμή:
          #include "excel8.h"
    					
  3. Προσθέστε τον ακόλουθο κώδικα CAutoProjectDlg::OnRun() στο αρχείο AutoProjectDLG.cpp:

    Δείγμα κώδικα

          // Commonly used OLE variants.
          COleVariant
                     covTrue((short)TRUE),
                     covFalse((short)FALSE),
                     covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    
    
          _Application app;
          Workbooks books;
          _Workbook book;
    
          Worksheets sheets;
          _Worksheet sheet;
          Range range;
          Font font;
          Range cols;
    
          // Start Excel and get Application object.
    
          if(!app.CreateDispatch("Excel.Application"))
          {
           AfxMessageBox("Couldn't start Excel and get Application object.");
           return;
          }
    
    
          //Get a new workbook.
          books = app.GetWorkbooks();
          book = books.Add (covOptional);
    
          //Get the first sheet.
          sheets =book.GetSheets();
          sheet = sheets.GetItem(COleVariant((short)1));
    
          //Fill cells A1, B1, C1, and D1 one cell at a time with "headers".
          range = sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
          range.SetValue(COleVariant("First Name"));
          range = sheet.GetRange(COleVariant("B1"),COleVariant("B1"));
          range.SetValue(COleVariant("Last Name"));
          range = sheet.GetRange(COleVariant("C1"),COleVariant("C1"));
          range.SetValue(COleVariant("Full Name"));
          range = sheet.GetRange(COleVariant("D1"),COleVariant("D1"));
          range.SetValue(COleVariant("Salary"));
    
    
          //Format A1:D1 as bold, vertical alignment = center.
          range = sheet.GetRange(COleVariant("A1"), COleVariant("D1"));
          font = range.GetFont();
          font.SetBold(covTrue);
          range.SetVerticalAlignment(
                   COleVariant((short)-4108));   //xlVAlignCenter = -4108
    
          //Fill A2:B6 with an array of values (First & Last Names).
          {
             COleSafeArray saRet;
             DWORD numElements[]={5,2};   //5x2 element array
             saRet.Create(VT_BSTR, 2, numElements);
    
    
             //Fill the 5x2 SafeArray with the following data:
             //   John      Smith
             //   Tom       Brown
             //   Sue       Thomas
             //   Jane      Jones
             //   Adam      Johnson
    
             FillSafeArray(L"John", 0, 0, &saRet);
             FillSafeArray(L"Smith", 0, 1, &saRet);
             FillSafeArray(L"Tom", 1, 0, &saRet);
             FillSafeArray(L"Brown", 1, 1, &saRet);
             FillSafeArray(L"Sue", 2, 0, &saRet);
             FillSafeArray(L"Thomas", 2, 1, &saRet);
    
             FillSafeArray(L"Jane", 3, 0, &saRet);
             FillSafeArray(L"Jones", 3, 1, &saRet);
             FillSafeArray(L"Adam", 4, 0, &saRet);
             FillSafeArray(L"Johnson", 4, 1, &saRet);
    
             range = sheet.GetRange(COleVariant("A2"), COleVariant("B6"));
             range.SetValue(COleVariant(saRet));
    
             saRet.Detach();
          }
    
          //Fill C2:C6 with a relative formula (=A2 & " " & B2).
          range = sheet.GetRange(COleVariant("C2"), COleVariant("C6"));
          range.SetFormula(COleVariant("=A2 & \" \" & B2"));
    
          //Fill D2:D6 with a formula(=RAND()*100000) and apply a number
          //format.
          range = sheet.GetRange(COleVariant("D2"), COleVariant("D6"));
          range.SetFormula(COleVariant("=RAND()*100000"));
          range.SetNumberFormat(COleVariant("$0.00"));
    
          //AutoFit columns A:D.
          range = sheet.GetRange(COleVariant("A1"), COleVariant("D1"));
          cols = range.GetEntireColumn();
          cols.AutoFit();
    
          //Manipulate a variable number of columns for Quarterly Sales Data.
          {
             short NumQtrs;
             CString msg;
             Range resizedrange;
             Interior interior;
             Borders borders;
    
             //Determine how many quarters to display data for.
             for(NumQtrs=1;NumQtrs<=3;NumQtrs++)
             {
                msg.Format("Enter sales data for %d quarter(s)?", NumQtrs);
                if(AfxMessageBox(msg,MB_YESNO)==IDYES)
                {
                   break;
                }
             }
             msg.Format("Displaying data for %d quarters.", NumQtrs);
             AfxMessageBox(msg);
    
             //Starting at E1, fill headers for the number of columns selected.
             range = sheet.GetRange(COleVariant("E1"), COleVariant("E1"));
             resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));
             resizedrange.SetFormula(
                    COleVariant("=\"Q\" & COLUMN()-4 & CHAR(10) & \"Sales\""));
             //Change the Orientation and WrapText properties for the headers.
             resizedrange.SetOrientation(COleVariant((short)38));
             resizedrange.SetWrapText(covTrue);
             //Fill the interior color of the headers.
             interior = resizedrange.GetInterior();
             interior.SetColorIndex(COleVariant((short)36));
    
             //Fill the columns with a formula and apply a number format.
             range = sheet.GetRange(COleVariant("E2"), COleVariant("E6"));
             resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));
             resizedrange.SetFormula(COleVariant("=RAND()*100"));
             resizedrange.SetNumberFormat(COleVariant("$0.00"));
    
             //Apply borders to the Sales data and headers.
             range = sheet.GetRange(COleVariant("E1"), COleVariant("E6"));
             resizedrange= range.GetResize(covOptional, COleVariant(NumQtrs));
             borders = resizedrange.GetBorders();
             borders.SetWeight(COleVariant((short)2));   //xlThin = 2
    
             //Add a Totals formula for the Quarterly sales data and apply a
             //border.
             range = sheet.GetRange(COleVariant("E8"), COleVariant("E8"));
             resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));
             resizedrange.SetFormula(COleVariant("=SUM(E2:E6)"));
             borders = resizedrange.GetBorders();
             {
                Border bottomborder;
                bottomborder = borders.GetItem((long)9);
                bottomborder.SetLineStyle(
                               COleVariant((short)-4119));   //xlDouble = -4119
                bottomborder.SetWeight(
                               COleVariant((short)4));       //xlThick = 4
    
             }
          }
    
          //Make the application visible and give the user control of
          //Microsoft Excel.
          app.SetVisible(TRUE);
          app.SetUserControl(TRUE);
    					
  4. Προσθέστε την ακόλουθη συνάρτηση AutoProjectDLG.cpp, εντοπισμός σε ένα σημείο πριν από την CAutoProjectDlg::OnRun():

    Δείγμα κώδικα

          void FillSafeArray(OLECHAR FAR* sz, int iRow, int iCol,
                             COleSafeArray* sa)
          {
    
             VARIANT v;
             long index[2];
    
             index[0] = iRow;
             index[1] = iCol;
    
             VariantInit(&v);
             v.vt = VT_BSTR;
             v.bstrVal = SysAllocString(sz);
             sa->PutElement(index, v.bstrVal);
             SysFreeString(v.bstrVal);
             VariantClear(&v);
    
          }
    					
  5. Στο Developer Studio, εκτελέστε την εφαρμογή. Όταν εμφανιστεί το παράθυρο διαλόγου (το παράδειγμα δημιουργεί μια εφαρμογή που βασίζεται στο παράθυρο διαλόγου), κάντε κλικ στην επιλογή εκτέλεση του κουμπιού.

Ιδιότητες

Αναγν. άρθρου: 179706 - Τελευταία αναθεώρηση: Κυριακή, 18 Σεπτεμβρίου 2011 - Αναθεώρηση: 5.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Foundation Class Library 4.2
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
Λέξεις-κλειδιά: 
kbnewfile kbfunctions kbprogramming kbautomation kbhowto kbinterop kbmt KB179706 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:179706

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com