MFC ve Visual C++ 2005 veya Visual C++ .NET doldurun veya dizileri kullanarak, bir aralıktaki verileri elde etmek için Excel'den otomatikleştirme

Makale çevirileri Makale çevirileri
Makale numarası: 308407 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makalenin Microsoft C# .NET sürümü için bkz: 302096.
Bu makalenin Microsoft Visual Basic .NET sürümü için bkz: 302094.
Not Microsoft Visual C++ 2005, Visual C++ .NET 2003 ve Microsoft Visual C++ .NET 2002, Microsoft .NET Framework tarafından sağlanan bir yönetilen kod model hem de yerel Microsoft Windows kod modeli yönetilmeyen destekler. Bu makaledeki bilgiler yalnızca yönetilmeyen Visual C++ geçerli kod.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu adım adım makalede, Visual C++ 2005 veya Visual C++ .NET doldurun ve dizileri kullanılarak multi-cell aralıktaki değerleri almak için Microsoft Excel'in otomatik hale getirmek gösterilmiştir.

Excel'in bir Otomasyon istemcisi oluştur

Bir kerede bir hücre doldurma olmadan multi-cell aralığı doldurmak için <a0></a0>, bir <a0>Aralık</a0> nesnesinin Value özelliği için iki boyutlu bir dizi ayarlayabilirsiniz. Benzer şekilde, birden çok hücre değerleri için iki boyutlu bir dizi aynı anda Value özelliği kullanarak alabilirsiniz. Aşağıdaki adımlarda, ayarlama hem iki boyutlu diziler kullanarak veri almak için bu işlem gösterilmektedir.
  1. Temel bir otomasyon istemci oluşturmak için aşağıdaki Microsoft Bilgi Bankası makalesinde "Bir otomasyon istemci oluşturma" bölümündeki adımları izleyin:
    307473Visual C++ .NET'den Office Otomasyonu için bir tür kitaplığı nasıl kullanılır
    3. Adımda, forma ikinci bir düğme ve bir onay kutusu ekleyin. IDC_GETVALUES ve Değerleri almak için resim yazısı düğmesini KIMLIĞINI değiştirin. IDC_CHECK ve resim yazısı dize ile doldurmak için onay kutusunu KIMLIĞINI değiştirin.

    Makalenin 4. adımda, Excel 2002, Office XP otomatikleştirme "Microsoft Excel 10.0 Nesne Kitaplığı" seçin. Excel 2002 için varsayılan konum C:\Program Files\Microsoft Office\Office10\Excel.exe ' dir. Veya, Microsoft Office Excel 2003 otomatikleştirme "Microsoft Excel 11.0 Nesne Kitaplığı" seçin. Excel 2003 için varsayılan konum C:\Program Files\Microsoft Office\Office11\Excel.exe ' dir. Aşağıdaki Microsoft Excel arabirimleri seçin:
    • _Application
    • _Workbook
    • _Worksheet
    • Aralık
    • Çalışma kitaplarını
    • ÇalışmaSayfaları
    Adım 6'da, aşağıdaki # include Autoprojectdlg.h doğrudan bir kez # Pragma yönergesi sonra ekleyin:
    #include "CApplication.h"
    #include "CRange.h"
    #include "CWorkbook.h"
    #include "CWorkbooks.h"
    #include "CWorksheet.h"
    #include "CWorksheets.h"
    					
  2. Aşağıdaki iki ortak üye değişkeni CAutoProjectDlg sınıfına ekleyin:
    CApplication oExcel;
    CWorkbook oBook;
    					
  3. Iletişim kutusunda, IDC_CHECK ' ı sağ tıklatın ve Değişken Ekle'yi seçin. Değişken m_bFillWithStrings ad ve son ' u tıklatın.
  4. Iletişim kutusunda, Çalıştır ' ı çift tıklatın ve aşağıdaki kodu yerine
    void CAutoProjectDlg::OnBnClickedRun()
    {
    	// TODO: Add your control notification handler code here
    }
    					
    ile:
    void CAutoProjectDlg::OnBnClickedRun()
    {
    	CWorkbooks oBooks;
    	CWorksheets oSheets;
    	CWorksheet oSheet;
    	CRange oRange;
    	COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
    
    	// If you have not created Excel, create a new instance.
    	if (oExcel.m_lpDispatch == NULL) {
    		oExcel.CreateDispatch("Excel.Application");
    	}
    	// Show Excel to the user.
    	oExcel.put_Visible(TRUE);
    	oExcel.put_UserControl(TRUE);
    
    	// Add a new workbook and get the first worksheet in that book.
    	oBooks = oExcel.get_Workbooks();
    	oBook = oBooks.Add(covOptional);
    	oSheets = oBook.get_Worksheets();
    	oSheet = oSheets.get_Item(COleVariant((short)1));
    
    	// Get a range of data.
    	oRange = oSheet.get_Range(COleVariant("A1"),covOptional);
    	oRange = oRange.get_Resize(COleVariant((short)5),COleVariant((short)5));
    
    	COleSafeArray saRet;
    	DWORD numElements[2];
    	numElements[0] = 5;
    	numElements[1] = 5;
    
    	long index[2];
    	// Create a BSTR or double safe array.
    	if (m_bFillWithStrings.GetCheck())
    		saRet.Create(VT_BSTR,2,numElements);
    	else
    		saRet.Create(VT_R8,2,numElements);
    
    	// Fill the array with data.
    	for (int iRow = 1; iRow <= 5; iRow++) {
    		for (int iCol = 1; iCol <= 5; iCol++) {
    			index[0]=iRow-1;
    			index[1]=iCol-1;
    			if (m_bFillWithStrings.GetCheck()) {
    				CString szTemp;
    				szTemp.Format("%d|%d",iRow,iCol);
    				BSTR bstr = szTemp.AllocSysString();
    				saRet.PutElement(index,bstr);
    				SysFreeString(bstr);
    			} else {
    				double d = iRow * iCol;
    				saRet.PutElement(index,&d);
    			}
    		}
    	}
    	// Send the array to Excel.
    	oRange.put_Value(covOptional,COleVariant(saRet));
    }
    					
    Not Visual C++ 2005, ortak dil çalışma zamanı desteğini derleyici seçeneği eklemeniz gerekir (/ clr:oldSyntax) başarıyla önceki kod örneğini derlemek için. Ortak dil çalışma zamanı desteğini derleyici seçeneği eklemek için aşağıdaki adımları izleyin:
    1. Project ' i tıklatın ve sonra ProjectName özellikler ' i tıklatın.

      NotProjectName projenin adı için bir yer tutucudur.
    2. Yapılandırma özellikleri ' ni genişletin ve sonra Genel ' i tıklatın.
    3. Sağ bölmede, seçmek için tıklatın ortak dil çalışma zamanı modülü ve Destek, eski sözdizimi (/ clr:oldSyntax)Common Language Runtime desteği proje ayarları.
    4. ' I tıklatın (Uygula) ve sonra Tamam ' ı tıklatın.
    Ortak dil çalıştırma hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin derleyici seçenekleri destekler:
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
    Bu adımlar, tüm makaleyi için geçerlidir.
  5. Iletişim kutusuna dönmek ve Değerleri Al'ı çift tıklatın. Aşağıdaki kodu yerine
    void CAutoProjectDlg::OnBnClickedGetvalues()
    {
    	// TODO: Add your control notification handler code here
    }
    					
    ile:
    void CAutoProjectDlg::OnBnClickedGetvalues()
    {
    	CWorksheets oSheets;
    	CWorksheet oSheet;
    	CRange oRange;
    	COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
    
    	// Make sure that Excel has been started.
    	if (oExcel.m_lpDispatch == NULL) {
    		AfxMessageBox("Excel has not been started.  Press button1 to start Excel.");
    		return;
    	}
    	// Get the first worksheet.
    	oSheets = oBook.get_Worksheets();
    	oSheet = oSheets.get_Item(COleVariant((short)1));
    	// Set the range of data to retrieve
       	oRange = oSheet.get_Range(COleVariant("A1"),COleVariant("E5"));
    
    	// Get the data.
    	COleSafeArray saRet(oRange.get_Value(covOptional));
    
            long iRows;
            long iCols;
            saRet.GetUBound(1, &iRows);
            saRet.GetUBound(2, &iCols);
    
    	CString valueString = "Array Data:\r\n";
    	long index[2];
    	// Loop through the data and report the contents.
    	for (int rowCounter = 1; rowCounter <= iRows; rowCounter++) {
    		for (int colCounter = 1; colCounter <= iCols; colCounter++) {
    			index[0]=rowCounter;
    			index[1]=colCounter;		   
    			COleVariant vData;
    			saRet.GetElement(index,vData);
    			CString szdata(vData);
                valueString += szdata;
    			valueString += "\t";		
    		}
    		valueString += "\r\n";
    	}
    	AfxMessageBox(valueString,MB_SETFOREGROUND,NULL);
    }
    					

Otomasyon istemci sınayın.

  1. Oluşturmak ve örnek program çalıştırmak için F5 tuşuna basın.
  2. Çalıştır ' ı tıklatın. Program, Excel yeni bir çalışma kitabıyla başlatır ve sayısal veri dizisi ile ilk çalışma sayfasının hücrelerini A1:E5 doldurur.
  3. Değerleri Al ' ı tıklatın. Program, yeni bir dizi hücre A1:E5 verileri alır ve sonuçları bir ileti kutusu içinde görüntüler.
  4. Dolgu dizeler'With [NULL]'ı seçin ve hücre A1:E5 dize verilerle doldurmak için Çalıştır ' ı tıklatın.
  5. Dize değerlerini bir ileti kutusunda görüntülenecek Değerleri Al ' ı tıklatın.

SORUN GİDERME

Add Class Kimden TypeLib sihirbazda Dosya seçeneğini kullanarak Excel nesne kitaplığı için sınıf sar?c?lar? eklerseniz, nesne kitaplığına göz attıklarında, bir hata iletisi alabilirsiniz. Bu sorunun oluşmaması için <a0></a0>, dosya için gözatma yerine nesne kitaplığına tam yolunu ve dosya adını yazın. Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
311408Hata: MFC sınıf kitaplığı ekleme When 'Salt okunur' uyarısı
Örnek uygulama oluşturduğunuzda aşağıdaki hata iletisini alırsanız, "İletişim kutusu Variant", "Variant _DialogBox" CRange.h değiştirin:
C4003 Uyarı: <a1>Makro</a1> 'DialogBoxA' gerçek parametrelerini yeterli değil
Bu hatanın nedeni hakkında daha fazla bilgi için aşağıdaki Microsoft Knowledge Base makalesine bakın:
311407Hata: API makrolar ile'çakışma adlandırma MFC Sihirbazı çözümleme kısmı veya tamamı ingilizce olan içeriğe işaret edebilir.

Referanslar

Daha fazla bilgi için bkz:, aşağıdaki Microsoft Developer Network (MSDN) Web sitesi:
Visual Studio ile Microsoft Office geliştirme
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Diziler, ayarlamak ve almak için kullanma hakkında daha fazla bilgi için Visual Studio'nun önceki sürümleriyle verileri Excel, aşağıdaki Knowledge Base makalelerine bakın:
186120Excel'in otomatikleştirme ve bir dizi olan bir aralık dolgu MFC nasıl kullanılır
186122Excel'in otomatikleştirme ve bir aralıktan bir dizi elde MFC nasıl kullanılır
247412BILGI: verilerini Visual Basic'den Excel'e aktarma yöntemleri

Özellikler

Makale numarası: 308407 - Last Review: 17 Ocak 2007 Çarşamba - Gözden geçirme: 6.3
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbautomation kbhowtomaster KB308407 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:308407

Geri Bildirim Ver

 

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