วิธีการใช้ MFC เพื่อทำให้ Excel สร้าง และการจัดรูปแบบสมุดงานใหม่

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 179706 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความนี้แสดงวิธีการที่ทำให้ Microsoft Excel ที่ใช้ไลบรารีคลาสมูลฐาน Microsoft (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) มีการปรับเปลี่ยน slight รหัสนี้สามารถถูกประยุกต์ใช้กับการทำงานอัตโนมัติไคลเอนต์ที่ใช้คลาส 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 ต่อไปนี้เพื่อสร้างตัวอย่างโครงการ interfaces 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. ใน Studio นักพัฒนา เรียกใช้โปรแกรมประยุกต์ เมื่อกล่องโต้ตอบปรากฏขึ้น (ตัวอย่างสร้างโปรแกรมประยุกต์ที่ใช้โต้ตอบ), คลิกเรียกใช้ปุ่ม

คุณสมบัติ

หมายเลขบทความ (Article ID): 179706 - รีวิวครั้งสุดท้าย: 18 กันยายน 2554 - Revision: 4.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
Keywords: 
kbnewfile kbfunctions kbprogramming kbautomation kbhowto kbinterop kbmt KB179706 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ 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