Bỏ qua để tới nội dung chính
Đăng nhập với Microsoft
Đăng nhập hoặc tạo một tài khoản.
Xin chào,
Chọn một tài khoản khác.
Bạn có nhiều tài khoản
Chọn tài khoản bạn muốn đăng nhập.

Tóm tắt

Bài viết này trả lời câu hỏi thường gặp về tự động cho Microsoft Office từ Visual C++.

Thông tin Bổ sung

Mục lục

  1. Tự động hoá là gì?

  2. Tôi mới tự động, trong đó có thể tìm thấy các nguồn lực tốt để tìm hiểu thêm?

  3. Có cách khác để có thể sử dụng tự động?

  4. COM là gì?

  5. Làm thế nào để đính kèm đang chạy phiên bản ứng dụng Office?

  6. Làm thế nào để vượt qua tham số tùy chọn?

  7. Làm thế nào để bắt sự kiện thể hiện bởi các ứng dụng Office?

  8. Mã tự động của tôi là quá chậm. Làm thế nào có thể tăng tốc việc?

  9. Các giá trị lỗi lớn, như-2147352573 hoặc 0x80030002, có nghĩa là gì?

  10. Một là gì?

  11. Mã tự động của tôi làm việc với Microsoft Excel 95, nhưng không thành công với Microsoft Excel 97. Tại sao?

  12. Tại sao không ứng dụng để tự động hoá ở trong bộ nhớ sau khi kết thúc chương trình của tôi?

  13. Tôi biết những gì tôi muốn làm như một người sử dụng ứng dụng Microsoft Office, nhưng làm thế nào để làm điều này lập sử dụng tự động?

  14. Tôi có thể tự động hoá ứng dụng Microsoft Office được nhúng

  15. Làm thế nào để truy cập các thuộc tính tài liệu của tôi trong tài liệu Microsoft Office?

Câu hỏi và câu trả lời

  1. Tự động hoá là gì? Tự động (trước đây OLE tự động) là công nghệ cho phép bạn tận dụng các chức năng của một chương trình hiện có và đưa vào ứng dụng của riêng bạn. Ví dụ, bạn có thể sử dụng Microsoft Word chính tả và ngữ pháp kiểm tra khả năng vào ứng dụng của bạn không hiển thị cho người dùng Microsoft Word. Bạn có thể dùng tất cả Microsoft Excel biểu đồ, in và dữ liệu phân tích công cụ. Công nghệ này có thể rất đơn giản hóa và tăng tốc độ phát triển của bạn.

  2. Tôi mới tự động, trong đó có thể tìm thấy các nguồn lực tốt để tìm hiểu thêm? Chương 24 David Kruglinski "trong Visual c++" (ISBN:1-57231-565 - 2) cung cấp tổng quan cũng như một số ví dụ tuyệt vời. Ngoài ra, cơ sở kiến thức Microsoft là một nguồn thông tin. Bài viết này chính là một khởi đầu tốt, và bạn có thể tìm thấy cụ thể tham khảo bài viết sau trong cơ sở kiến thức Microsoft:

    tìm các tài nguyên học OLE tự độngNếu bạn muốn học ví dụ, hãy xem bài viết sau trong cơ sở kiến thức Microsoft:

    về cách thức sử dụng MFC để tự động hóa Excel tạo/định dạng bảng tính mới

  3. Có cách khác để có thể sử dụng tự động? Có ba cách cơ bản, bạn có thể sử dụng tự động hóa: MFC, #import và C/C++:

    • Với MFC, sử dụng Visual C++ ClassWizard tạo "bao bọc lớp" từ thư viện loại Microsoft Office. Các lớp, như lớp MFC khác, chẳng hạn như COleVariant, COleSafeArray, COleException, đơn giản hóa tác vụ tự động. Phương pháp này thường được khuyến cáo hơn những người khác và hầu hết các mô hình cơ sở kiến thức Microsoft sử dụng MFC.

    • #import, một chỉ thị mới xuất hiện với Visual C++ 5.0, tạo VC ++ "gợi ý thông minh" từ thư viện loại được chỉ định. Đó là rất mạnh mẽ, nhưng thường không được khuyến nghị vì tham chiếu - đếm sự cố thường xảy ra khi sử dụng với các ứng dụng Microsoft Office.

    • Tự động hóa C/C++ là nhiều khó khăn hơn, nhưng đôi khi cần thiết để tránh chi phí với MFC, hoặc các vấn đề với #import. Về cơ bản, bạn làm việc với các API là CoCreateInstance() và COM giao diện như IDispatch và IUnknown.

    Điều quan trọng cần lưu ý rằng có một số sự khác biệt giữa tự động từ C++ so với đồng bằng C, do COM được thiết kế lớp C++ là. Để biết thêm thông tin, hãy xem bài viết sau trong cơ sở kiến thức Microsoft ví dụ: C:

    HOWTO: sử dụng OLE tự động từ một ứng dụng C

  4. COM là gì? Tự động dựa trên mô hình đối tượng thành phần (COM). COM là một tiêu chuẩn phần mềm kiến trúc dựa trên giao diện và thiết kế để có mã chia thành khép đối tượng. Nghĩ rằng đó là một phần mở rộng mô hình đối tượng hướng lập trình (tượng), nhưng phù hợp để tách các ứng dụng. Mỗi đối tượng đưa ra một tập các giao diện và tất cả các giao tiếp với một đối tượng, chẳng hạn như cài đặt, thông báo và truyền dữ liệu, sẽ xảy ra thông qua các giao diện. COM là một tập hợp các dịch vụ cung cấp thư viện liên kết động (DLL) được cài đặt hệ điều hành. Tự động sử dụng nhiều dịch vụ. Một ví dụ là dịch vụ "Marshalling" gói ứng dụng khách gọi chức năng thành viên của giao diện ứng dụng máy chủ và đi các tham số của mình, ứng dụng máy chủ. Nó làm cho nó xuất hiện giao diện của máy chủ được thể hiện trong không gian bộ nhớ máy khách không xảy ra khi khách hàng là một .exe chạy trong không gian xử lý riêng của mình. Công cũng được trả lại giá trị máy chủ phương pháp lại qua quá trình ranh giới và an toàn vào tay cuộc gọi của khách hàng. Có rất nhiều các dịch vụ cần thiết để tự động được cung cấp bởi các thư viện COM. Nguồn thông tin về những bao gồm "Trong Ole - Second Edition" Kraig Brockschmidt, ISBN 1-55615-843-2, "Trong COM" Dale Rogerson - ISBN 1-57231-349-8, và "Tham chiếu lập trình tự động," ISBN 1-57231-584-9.

  5. Làm thế nào để đính kèm đang chạy phiên bản ứng dụng Office? Sử dụng GetActiveObject() API. Máy chủ tự động đăng ký tự THỐI (chạy đối tượng bảng), thông qua RegisterActiveObject() API. Khách hàng tự động có thể nhận được phiên bản chạy với mã như:

          // Translate server ProgID into a CLSID. ClsidFromProgID      // gets this information from the registry.      CLSID clsid;      CLSIDFromProgID(L"Excel.Application", &clsid);        // Get an interface to the running instance, if any..      IUnknown *pUnk;      HRESULT hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);      ASSERT(!FAILED(hr));      // Get IDispatch interface for Automation...      IDispatch *pDisp;      hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pDisp);      ASSERT(!FAILED(hr));      // Release the no-longer-needed IUnknown...      pUnk->Release();

    Chú ý: nếu có nhiều phiên bản chạy ứng dụng Office bạn muốn đính kèm, bạn sẽ chỉ có thể đính kèm với phiên bản đầu tiên được đưa ra bằng cách sử dụng GetActiveObject() API. Theo lý thuyết, bạn có thể lặp ROT cho từng trường hợp riêng lẻ, nhưng các ứng dụng Office không đăng ký tự, nếu một phiên bản đã THỐI do biệt danh cho chính nó là luôn (nó không thể phân biệt nào). Điều này có nghĩa là bạn không thể đính kèm vào bất kỳ trường hợp ngoại trừ đầu tiên. Tuy nhiên, vì các ứng dụng Office cũng đăng ký tài liệu của ROT, bạn có thể đã đính kèm vào các phiên bản bằng iterating ROT tìm kiếm tài liệu cụ thể, gắn vào, sau đó nhận được các đối tượng ứng dụng từ. Có một số mã trong bài viết cơ sở kiến thức Microsoft sau iterating ROT và tìm kiếm tên tài liệu:

    HOWTO: nhận IDispatch của tài liệu Word hoặc Excel từ một OCXBạn không cần phải thực hiện việc này đối với PowerPoint, bởi vì nó là một phiên bản một ứng dụng; bạn có thể chỉ có một phiên bản của nó chạy.

  6. Làm thế nào để vượt qua tham số tùy chọn? Một số phương pháp có tham số "tuỳ chọn". Trong Visual Basic, bạn có thể tình cờ bỏ chúng khi gọi phương pháp. Tuy nhiên, khi gọi Visual C++ phải vượt qua một phiên bản đặc biệt với .vt là VT_ERROR và .scode là DISP_E_PARAMNOTFOUND. Đó là:

          // VARIANT used in place of optional-parameters.      VARIANT varOpt;      varOpt.vt = VT_ERROR;      varOpt.scode = DISP_E_PARAMNOTFOUND;

    Đây thực sự là Visual Basic gì đằng.

  7. Làm thế nào để bắt sự kiện thể hiện bởi các ứng dụng Office? Về cơ bản bạn thực hiện giao diện sự kiện bạn muốn bắt ("chìm"), và thiết lập kết nối tư vấn với các ứng dụng ("nguồn"). Bài viết sau đây cung cấp cho bạn ví dụ từng bước cho Microsoft Word:

    HOWTO: bắt sự kiện ứng dụng Microsoft Word97 bằng VC ++Nói chung, để thiết lập kết nối tư vấn, bạn có máy chủ IConnectionPointContainer và gọi FindConnectionPoint() IID giao diện sự kiện. Này cung cấp cho bạn một giao diện IConnectionPoint và tất cả những gì còn lại gọi Advise() với một phiên bản của giao diện sự kiện. Máy chủ sẽ sau đó gọi lại thông qua giao diện này khi các sự kiện xảy ra.

  8. Mã tự động của tôi là quá chậm. Làm thế nào có thể tăng tốc việc? Một nguyên nhân phổ biến của sự cố tự động tốc độ là lặp đi lặp lại đọc và ghi dữ liệu. Đây là đặc trưng cho khách hàng tự động hóa Excel. Tuy nhiên, hầu hết mọi người không biết rằng dữ liệu này có thể thường được ghi hoặc đọc cùng một lúc bằng cách sử dụng SAFEARRAY. Xem các bài viết cơ sở kiến thức Microsoft sau đây để biết thêm thông tin và thông tin mẫu:

    HOWTO: sử dụng MFC để tự động hóa Excel và điền dải với một mảng

    HOWTO: sử dụng MFC để tự động hóa Excel có một loạt các từ

    HOWTO: sử dụng MFC để tự động hóa Excel và tạo/định dạng bảng tính mớiNó cũng quan trọng để chỉ ra rằng bằng cách sử dụng bảng tạm đôi khi có thể cải thiện hiệu suất. Ví dụ, bạn có thể sao chép dữ liệu vào clipboard, sau đó sử dụng tự động cho máy chủ để dán. Hoặc ngược lại; cho máy chủ để sao chép vào clipboard và dán vào ứng dụng của bạn.

  9. Các giá trị lỗi lớn, chẳng hạn như-2147352573 hoặc 0x80030002 có nghĩa là gì? Các giá trị này được gọi là HRESULTs và được xác định trong winerror.h. Số là rất lớn vì bit đầu tiên hay không là một kết quả lỗi. Bạn có thể sử dụng tiện ích ErrLook.Exe đi kèm với Visual C++ để dịch các số có ý nghĩa mô tả. Nếu bạn muốn lập trình được mô tả các lỗi, bạn có thể sử dụng FormatMessage() API. Hãy xem bài viết cơ sở kiến thức Microsoft sau đây để biết thêm thông tin và ví dụ về sử dụng FormatMessage():

    Thông tin : dịch tự động lỗi cho VB/VBA

    mẫu: Decode32 và Decode16 OLE lỗi mã giải mã công cụChú ý: nếu bạn đang sử dụng Visual C++ 6.0 và có một biến có giá trị này trong cửa sổ xem gỡ lỗi, thêm ", giờ" (không có dấu ngoặc kép) để nó có Visual C++ dịch nó cho bạn!

  10. Một là gì? Một là tương tự như một tập tin tiêu đề C/C++. Nó có giao diện, phương pháp và thuộc tính máy chủ xuất bản. Bạn có thể xem thư viện loại với các trình xem đối tượng OLE/COM (Oleview.exe) đi kèm với Visual C++. Đây là danh sách các tập tin thư viện loại đối với Microsoft Office 95, 97 và 2000: Office Application | Type library ------------------------+---------------- Word 95 and prior | wb70en32.tlb Excel 95 and prior | xl5en32.olb Powerpoint 95 and prior | Powerpoint.tlb Access 95 and prior | msaccess.tlb Binder 95 | binder.tlb Schedule+ | sp7en32.olb Project | pj4en32.olb Team Manager | mstmgr1.olb Word 97 | msword8.olb Excel 97 | excel8.olb Powerpoint 97 | msppt8.olb Access 97 | msacc8.olb Binder 97 | msbdr8.olb Graph 97 | graph8.olb Outlook 97 | msoutl8.olb Outlook 98 | msoutl85.olb Word 2000 | msword9.olb Excel 2000 | excel9.olb Powerpoint 2000 | msppt9.olb Access 2000 | msacc9.olb Outlook 2000 | msoutl9.olb Word 2002 | msword.olb Excel 2002 | excel.exe Powerpoint 2002 | msppt.olb Access 2002 | msacc.olb Outlook 2002 | msoutl.olb

  1. Mã tự động của tôi làm việc với Excel 95, nhưng không thành công với Excel 97. Điều gì đang xảy ra vậy? Mô hình đối tượng Excel thực hiện thay đổi đáng kể từ phiên bản 95-97. Excel 95 áp dụng tất cả các phương pháp và các thuộc tính thực hiện một số IDispatch. Điều này có nghĩa là bạn có thể thường gọi phương pháp này dành cho đối tượng X từ đối tượng Y. Này không phải là một thiết kế tốt, nên Office 97, mỗi đối tượng mình tách Idispatch thực hiện. Điều này có nghĩa là nếu bạn yêu cầu một phương pháp hoặc các thuộc tính từ đối tượng X từ một đối tượng riêng Y, bạn nhận được lỗi 0x80020003,-2147352573, "viên không tìm thấy." Để tránh lỗi này, bạn phải đảm bảo rằng giao diện IDispatch cơ bản bạn thực hiện cuộc gọi từ ngữ đúng. Xem các bài viết cơ sở kiến thức Microsoft sau đây để biết thêm thông tin:

    HOWTO: khắc phục sự cố "Thành viên không tìm thấy", 0x80020003 lỗi

  2. Ứng dụng để tự động hoá ở bộ nhớ sau khi kết thúc chương trình của tôi. Điều gì đang xảy ra vậy? Rất có thể, điều này là do bạn đã quên phát hành giao diện mua và bạn phải theo dõi nó. Đây là một số gợi ý chung và những điều cần tìm kiếm:

    • Nếu bạn đang sử dụng #import, đó là rất có thể bạn có thể chạy một tham chiếu tính lỗi liên quan. Thông thường các lỗi có thể làm việc xung quanh, nhưng thường nó ưa thích để sử dụng một trong các phương pháp tự động. #import không hoạt động tốt với các ứng dụng Office, vì các loại thư viện và sử dụng khá phức tạp. Ngoài ra, các vấn đề kể tham chiếu rất khó để theo dõi rất nhiều giao diện cấp COM gọi là cảnh khi sử dụng #import.

    • Kiểm tra xem nếu bạn đang đề cập đến bất kỳ phương pháp như mở mới, trả lại một IDispatch * (LPDISPATCH), và bỏ qua giá trị trả lại. Nếu bạn, sau đó bạn bỏ giao diện này trở lại và cần phải thay đổi mã để bạn phát hành khi không cần.

    • Nhận xét từng bước trong phần mã cho đến khi vấn đề biến mất, sau đó thêm một trở lại theo dõi khi sự cố khởi động.

    • Lưu ý rằng một số ứng dụng sẽ ở chạy nếu người dùng đã "chạm" ứng dụng. Nếu điều này xảy ra khi bạn tự động hoá, sau đó ứng dụng sẽ có thể được chạy sau. Các ứng dụng Office có thuộc tính "UserControl" đối tượng ứng dụng mà bạn có thể đọc/ghi để thay đổi hành vi này.

    • Ngoài ra, một số ứng dụng sẽ quyết định giữ chạy đủ-giao diện người dùng "hành động" đã xảy ra. Nếu bạn đang có ý định ứng dụng để thoát, sau đó gọi phương pháp Quit() đối tượng ứng dụng. Word sẽ tắt bất kể số tham chiếu của mình khi thoát được gọi là. Đây không phải là COM hành động mong muốn. Excel, Tuy nhiên, sẽ được chỉ trốn nhưng liên tục chạy cho tới khi tất cả các giao diện xuất sắc được phát hành. Nói chung, bạn sẽ phát hành tất cả các tài liệu tham khảo nổi bật và chỉ gọi Quit() nếu bạn định ứng dụng để thoát.

  3. Tôi biết những gì tôi muốn làm như một người sử dụng ứng dụng Office, nhưng làm thế nào để làm điều này lập thông qua tự động? Những gì bạn quan tâm là đối tượng, phương pháp, và thuộc tính bạn muốn sử dụng. Cách tốt nhất để tìm hiểu cách di chuyển các mô hình đối tượng của Word, Excel và Powerpoint, dựa trên những gì bạn muốn làm như một người dùng là sử dụng Macro Recorder. Chỉ cần chọn Macro\ 'Hồ sơ mới Macro' từ menu công cụ, thực hiện tác vụ bạn muốn, sau đó chọn Macro\ 'Dừng ghi.' Khi bạn đã hoàn tất ghi, chọn Macro\Macros từ menu công cụ, chọn macro bạn đã ghi lại, sau đó bấm Sửa. Điều này sẽ đưa bạn tạo mã VBA sẽ thực hiện tác vụ mà bạn đã ghi lại. Lưu ý các macro ghi sẽ mã tốt nhất trong hầu hết các trường hợp, nhưng nó không tốt cho một ví dụ nhanh.

  4. Tôi có thể tự động hoá ứng dụng Office được nhúng Hoàn toàn. Đúng rồi trỏ chuột IDispatch: này được đưa ra trong các Visual C++ kỹ thuật lưu ý 39 (TN039). Xem bài viết cơ sở kiến thức Microsoft sau ví dụ từng bước:

    HOWTO: nhúng và tự động hoá một bảng tính Microsoft Excel với MFC

  5. Làm thế nào để truy cập các thuộc tính tài liệu của tôi trong tài liệu Office? Thuộc tính tài liệu có thể truy cập thông qua tự động, hoặc trực tiếp IPropertyStorage. Bài viết cơ sở kiến thức Microsoft sau mô từng phương pháp:

    HOWTO: sử dụng tự động nhận các thuộc tính được xây dựng trong tài liệu

    HOWTO: đọc thuộc tính chất tài liệu trực tiếp với VC ++

Bạn cần thêm trợ giúp?

Bạn muốn xem các tùy chọn khác?

Khám phá các lợi ích của gói đăng ký, xem qua các khóa đào tạo, tìm hiểu cách bảo mật thiết bị của bạn và hơn thế nữa.

Cộng đồng giúp bạn đặt và trả lời các câu hỏi, cung cấp phản hồi và lắng nghe ý kiến từ các chuyên gia có kiến thức phong phú.

Thông tin này có hữu ích không?

Bạn hài lòng đến đâu với chất lượng dịch thuật?
Điều gì ảnh hưởng đến trải nghiệm của bạn?
Khi nhấn gửi, phản hồi của bạn sẽ được sử dụng để cải thiện các sản phẩm và dịch vụ của Microsoft. Người quản trị CNTT của bạn sẽ có thể thu thập dữ liệu này. Điều khoản về quyền riêng tư.

Cảm ơn phản hồi của bạn!

×