Π Π°Π±ΠΎΡ‚Π° с COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ возмоТности для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с внСшними систСмами, офисными прилоТСниями ΠΈ спСциализированным ПО. Однако ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с трудностями ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² β€” Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ значСния ячССк Excel, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Word-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ ΠΎΡ‚ сСрвСров Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ значСния ΠΈΠ· COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², избСгая Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ошибок ΠΈ оптимизируя ΠΊΠΎΠ΄.

ΠœΡ‹ рассмотрим Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ() ΠΈΠ»ΠΈ обращСния ΠΊ свойствам Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΡƒ, Π½ΠΎ ΠΈ Π½ΡŽΠ°Π½ΡΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с коллСкциями, динамичСскими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ "Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ…" свойств COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² подсказках 1Π‘, Π½ΠΎ доступны Ρ‡Π΅Ρ€Π΅Π· OLE-Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ. Π“ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ совмСстимости с популярными прилоТСниями ΡΠ΄Π΅Π»Π°ΡŽΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» максимально ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Ρ‹ΠΌ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹ Π² 1Π‘

COM (Component Object Model) β€” это тСхнология ΠΎΡ‚ Microsoft, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ‡Π΅Ρ€Π΅Π· стандартныС интСрфСйсы. Π’ контСкстС 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для:

  • πŸ“Š Автоматизации Microsoft Office (созданиС ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² Π² Excel, гСнСрация Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² Word)
  • πŸ–₯️ Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (сканСры ΡˆΡ‚Ρ€ΠΈΡ…ΠΊΠΎΠ΄ΠΎΠ², Ρ„ΠΈΡΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ рСгистраторы)
  • πŸ”— ВзаимодСйствия с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Windows-прилоТСниями (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, AutoCAD, Adobe Acrobat)
  • πŸ“‘ Π Π°Π±ΠΎΡ‚Ρ‹ с API Π²Π½Π΅ΡˆΠ½ΠΈΡ… систСм Ρ‡Π΅Ρ€Π΅Π· OLE-сСрвСры

Π“Π»Π°Π²Π½ΠΎΠ΅ прСимущСство COM β€” кросс-языковая ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ. Написанный Π½Π° C++ ΠΈΠ»ΠΈ .NET ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· 1Π‘ Ρ‡Π΅Ρ€Π΅Π· простой синтаксис. Однако здСсь кроСтся ΠΈ основная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: 1Π‘ "Π½Π΅ Π·Π½Π°Π΅Ρ‚" структуру внСшнСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π·Π°Ρ€Π°Π½Π΅Π΅, поэтому доступ ΠΊ свойствам ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ особого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°.

πŸ“Š Π‘ ΠΊΠ°ΠΊΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ Π²Ρ‹ Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² 1Π‘?
Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Excel
Для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
Для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Word
Для взаимодСйствия с внСшними систСмами
Π”Ρ€ΡƒΠ³ΠΎΠ΅

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ способы получСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π‘Π°ΠΌΡ‹ΠΉ простой способ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ свойству ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΡƒ. НапримСр, для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Excel.Application ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Ρ‚Π°ΠΊ:

Excel = Новый COMΠžΠ±ΡŠΠ΅ΠΊΡ‚("Excel.Application");

ВСрсия = Excel.Version; // ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²Π΅Ρ€ΡΠΈΡŽ Excel

Но Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли свойство Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ Π² подсказках 1Π‘? Π—Π΄Π΅ΡΡŒ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ():

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = COMΠžΠ±ΡŠΠ΅ΠΊΡ‚.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ("Π˜ΠΌΡΠ‘Π²ΠΎΠΉΡΡ‚Π²Π°");

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с коллСкциями (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, листами Excel ΠΈΠ»ΠΈ Π°Π±Π·Π°Ρ†Π°ΠΌΠΈ Word) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡŽ:

Лист = Excel.Workbooks(1).Sheets(1); // ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ лист ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ

Π―Ρ‡Π΅ΠΉΠΊΠ°A1 = Лист.Cells(1, 1).Value; // Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ячСйки A1

Для КаТдого Лист Из Excel.ActiveWorkbook.Sheets Π¦ΠΈΠΊΠ»

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Лист.Name);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

-->

Π Π°Π±ΠΎΡ‚Π° с "Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ" свойствами COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Частая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ описано свойство, Π½ΠΎ Π² 1Π‘ Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² подсказках. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹:

  • πŸ” Бвойство являСтся динамичСским (появляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… условиях)
  • πŸ“œ Бвойство скрыто Π² Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… 1Π‘ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Application.FileDialog Π² Excel)
  • πŸ”„ Бвойство доступно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· IDispatch-интСрфСйс

РСшСния:

  1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ() с Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ:
    Π”ΠΈΠ°Π»ΠΎΠ³ = Excel.Application.FileDialog(1); // msoFileDialogOpen
    

    Π”ΠΈΠ°Π»ΠΎΠ³.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ("Title").Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ("Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»");

  2. ΠŸΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° (ΠΈΠ½ΠΎΠ³Π΄Π° Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ API расхоТдСния):
    // ВмСсто Π½Π΅Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ "TextFrame"
    

    Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = ΠžΠ±ΡŠΠ΅ΠΊΡ‚.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ("TextFrame2").TextRange.Text;

  3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ OLEView (ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΈΠ· Windows SDK) для исслСдования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
Как ΡƒΠ·Π½Π°Ρ‚ΡŒ всС доступныС свойства COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ этот ΠΊΠΎΠ΄ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° свойств (Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²):

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒΠ‘Π²ΠΎΠΉΡΡ‚Π²Π°(ΠžΠ±ΡŠΠ΅ΠΊΡ‚)

Π’ΠΈΠΏ = Π’ΠΈΠΏΠ—Π½Ρ‡(ΠžΠ±ΡŠΠ΅ΠΊΡ‚);

Если Π’ΠΈΠΏ = Π’ΠΈΠΏ("COMΠžΠ±ΡŠΠ΅ΠΊΡ‚") Π’ΠΎΠ³Π΄Π°

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

Бвойства = ΠžΠ±ΡŠΠ΅ΠΊΡ‚.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ("Properties");

Для КаТдого Π‘Π² Из Бвойства Π¦ΠΈΠΊΠ»

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π‘Π².Name);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ свойства: " + ОписаниСОшибки());

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹;

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с COM

COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ часто Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ 1Π‘ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ сцСнарии:

ΠžΡˆΠΈΠ±ΠΊΠ°ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Π Π΅ΡˆΠ΅Π½ΠΈΠ΅
Ошибка OLE: 0x800A03ECНСвСрный индСкс ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ листу)ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· Count
Ошибка OLE: 0x800A10E1ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΡƒΡŽ ячСйку ExcelΠ‘Π½ΠΈΠΌΠΈΡ‚Π΅ Π·Π°Ρ‰ΠΈΡ‚Ρƒ листа ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Unprotect()
Ошибка ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΠ΅ установлСно ПО (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Excel Π½Π΅ установлСн)ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ПО Ρ‡Π΅Ρ€Π΅Π· рССстр ΠΈΠ»ΠΈ ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°...Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
Автоматизация Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π°ΠΠ°ΡΡ‚Ρ€ΠΎΠΉΠΊΠΈ бСзопасности Excel/Word Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ доступНастройтС Trust Center Settings Π² офисных прилоТСниях

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ шаблон для бСзопасного Π²Ρ‹Π·ΠΎΠ²Π° COM-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

// Код Ρ€Π°Π±ΠΎΡ‚Ρ‹ с COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = ΠžΠ±ΡŠΠ΅ΠΊΡ‚.Π‘Π²ΠΎΠΉΡΡ‚Π²ΠΎΠ˜Π»ΠΈΠœΠ΅Ρ‚ΠΎΠ΄();

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Если Π’ΠΈΠΏΠ—Π½Ρ‡(ОписаниСОшибки()) = Π’ΠΈΠΏ("ОписаниСОшибки") Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("COM-ошибка: " + ОписаниСОшибки().ОписаниС);

// Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ°

Π˜Π½Π°Ρ‡Π΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("НСоТиданная ошибка: " + ОписаниСОшибки());

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

Excel.Quit();

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ = НСопрСдСлСно; // ОсвобоТдСниС ссылки

-->

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ получСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Рассмотрим Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ кСйсы Ρ€Π°Π±ΠΎΡ‚Ρ‹ с популярными COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ:

1. Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Excel

Π—Π°Π΄Π°Ρ‡Π°: ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ячСйки B2 ΠΊΠ½ΠΈΠ³ΠΈ ΠžΡ‚Ρ‡Π΅Ρ‚.xlsx.

Excel = Новый COMΠžΠ±ΡŠΠ΅ΠΊΡ‚("Excel.Application");

Excel.Visible = Π›ΠΎΠΆΡŒ; // Π‘ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ

Книга = Excel.Workbooks.Open("C:\ΠžΡ‚Ρ‡Π΅Ρ‚Ρ‹\ΠžΡ‚Ρ‡Π΅Ρ‚.xlsx");

Лист = Книга.Sheets(1); // ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ лист

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Лист.Range("B2").Value; // ΠΈΠ»ΠΈ Лист.Cells(2, 2).Value

Книга.Close(Π›ΠΎΠΆΡŒ); // Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π±Π΅Π· сохранСния

Excel.Quit();

2. Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ тСкста ΠΈΠ· Word-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

Π—Π°Π΄Π°Ρ‡Π°: ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ вСсь тСкст ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π”ΠΎΠ³ΠΎΠ²ΠΎΡ€.docx:

Word = Новый COMΠžΠ±ΡŠΠ΅ΠΊΡ‚("Word.Application");

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ = Word.Documents.Open("C:\Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹\Π”ΠΎΠ³ΠΎΠ²ΠΎΡ€.docx");

ВСкст = Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.Content.Text;

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.Close(0); // 0 - Π½Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ измСнСния

Word.Quit();

3. Π Π°Π±ΠΎΡ‚Π° с Outlook: Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ писСм

Π—Π°Π΄Π°Ρ‡Π°: ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΌΡƒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π½Π΅ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½ΠΎΠ³ΠΎ письма:

Outlook = Новый COMΠžΠ±ΡŠΠ΅ΠΊΡ‚("Outlook.Application");

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎΠ˜ΠΌΠ΅Π½ = Outlook.GetNamespace("MAPI");

ΠŸΠ°ΠΏΠΊΠ°Π’Ρ…ΠΎΠ΄ΡΡ‰ΠΈΠ΅ = ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎΠ˜ΠΌΠ΅Π½.GetDefaultFolder(6); // 6 - ΠΏΠ°ΠΏΠΊΠ° "ВходящиС"

НСнайдСно = Π˜ΡΡ‚ΠΈΠ½Π°;

Для КаТдого Письмо Из ΠŸΠ°ΠΏΠΊΠ°Π’Ρ…ΠΎΠ΄ΡΡ‰ΠΈΠ΅.Items Π¦ΠΈΠΊΠ»

Если Письмо.UnRead = Π˜ΡΡ‚ΠΈΠ½Π° Π’ΠΎΠ³Π΄Π°

ВСма = Письмо.Subject;

НСнайдСно = Π›ΠΎΠΆΡŒ;

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

β˜‘οΈ ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ с COM Π² 1Π‘

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 5

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Π Π°Π±ΠΎΡ‚Π° с COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ "Ρ‚ΠΎΡ€ΠΌΠΎΠ·Π°":

  • 🐒 ЧастыС обращСния ΠΊ свойствам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² β€” мСТпроцСссноС взаимодСйствиС)
  • πŸ“Š Π§Ρ‚Π΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² ячССк Π² Excel построчно
  • πŸ”„ ΠœΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ созданиС/ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ†ΠΈΠΊΠ»Π΅

Бпособы ускорСния:

  1. ΠšΡΡˆΠΈΡ€ΡƒΠΉΡ‚Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ свойства:
    // ΠŸΠ»ΠΎΡ…ΠΎ (ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π°)
    

    Для i = 1 По 100 Π¦ΠΈΠΊΠ»

    Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Лист.Cells(i, 1).Value;

    ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

    // Π₯ΠΎΡ€ΠΎΡˆΠΎ (ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°)

    Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ = Лист.Range("A1:A100");

    ЗначСния = Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½.Value;

  2. ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ экрана:
    Excel.ScreenUpdating = Π›ΠΎΠΆΡŒ;
    

    // ... ΠΊΠΎΠ΄ ...

    Excel.ScreenUpdating = Π˜ΡΡ‚ΠΈΠ½Π°;

  3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ массивы для ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΉ записи/чтСния Π΄Π°Π½Π½Ρ‹Ρ…
Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ = Лист.UsedRange; // АвтоматичСски опрСдСляСт Π·Π°Π½ΡΡ‚ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ

Π”Π°Π½Π½Ρ‹Π΅ = Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½.Value; // ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ всС Π΄Π°Π½Π½Ρ‹Π΅ сразу Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив

-->

РаспространённыС ошибки ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с COM. Π’ΠΎΡ‚ Ρ‚ΠΎΠΏ-5 ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:

  1. Π£Ρ‚Π΅Ρ‡ΠΊΠΈ памяти:
    ⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: НСосвобоТдСнныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Excel.Application ΠΈΠ»ΠΈ Word.Application ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² памяти ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹. ВсСгда Π²Ρ‹Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ Quit() ΠΈ обнуляйтС ссылку:
    Excel.Quit();
    

    Excel = НСопрСдСлСно;

  2. НСкоррСктныС индСксы:

    Π’ Excel ΠΈ Word индСксация часто начинаСтся с 1, Π° Π½Π΅ с 0. Ошибка 0x800A03EC ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.

  3. Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π΅Π³ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… настроСк:
    ⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ Π² Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°Ρ… Excel зависят ΠΎΡ‚ Ρ€Π΅Π³ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… настроСк Windows. Π’ русскоязычной вСрсии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ; вмСсто ,:
    Лист.Range("A1").Formula = "=БУММ(B1:B10)"; // Для RU-вСрсии
  4. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²:

    Если Ρ„Π°ΠΉΠ» ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, COM Π½Π΅ смоТСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ доступ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°...Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… случаСв.

  5. ΠΠ΅ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ вСрсий:

    Код, написанный для Excel 2010, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Excel 2019 ΠΈΠ·-Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ВСстируйтС Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ вСрсии.

FAQ: ЧастыС вопросы ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ

Как ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ доступны Π² систСмС?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ рССстра Windows (regedit). ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Ρ€Π°Π·Π΄Π΅Π» HKEY_CLASSES_ROOT ΠΈ ΠΈΡ‰ΠΈΡ‚Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ с прСфиксом CLSID ΠΈΠ»ΠΈ просматривайтС Π²Π΅Ρ‚ΠΊΡƒ HKEY_LOCAL_MACHINE\SOFTWARE\Classes. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ OLEView ΠΈΠ· Windows SDK.

Π’ 1Π‘ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Π°ΠΊ:

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ = Новый COMΠžΠ±ΡŠΠ΅ΠΊΡ‚("ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.ΠžΠ±ΡŠΠ΅ΠΊΡ‚");

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ΠžΠ±ΡŠΠ΅ΠΊΡ‚ доступСн!");

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ΠžΠ±ΡŠΠ΅ΠΊΡ‚ НЕ доступСн: " + ОписаниСОшибки());

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ НСопрСдСлСно?

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹:

  1. Бвойство Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ сущСствуСт Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅
  2. ΠžΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠ° Π² ΠΈΠΌΠ΅Π½ΠΈ свойства (рСгистр Π²Π°ΠΆΠ΅Π½!)
  3. Бвойство доступно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… дСйствий (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, открытия Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°)
  4. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ (Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Open())

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ свойства Ρ‡Π΅Ρ€Π΅Π· OLEView ΠΈΠ»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.

Как ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ массивы Π΄Π°Π½Π½Ρ‹Ρ… Π² COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹?

Для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ массивов Π² Excel ΠΈΠ»ΠΈ Word ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ записи Π΄Π°Π½Π½Ρ‹Ρ… Π² Excel:

Π”Π°Π½Π½Ρ‹Π΅ = Новый Массив();

Π”Π°Π½Π½Ρ‹Π΅.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Новый Массив()); // Π‘Ρ‚Ρ€ΠΎΠΊΠ° 1

Π”Π°Π½Π½Ρ‹Π΅[0].Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π―Ρ‡Π΅ΠΉΠΊΠ° A1");

Π”Π°Π½Π½Ρ‹Π΅[0].Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π―Ρ‡Π΅ΠΉΠΊΠ° B1");

Лист.Range("A1:B1").Value = Π”Π°Π½Π½Ρ‹Π΅;

Для чтСния Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π² массив:

Π”Π°Π½Π½Ρ‹Π΅ = Лист.Range("A1:B10").Value; // Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив
МоТно Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΈΠ»ΠΈ мобильном ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ 1Π‘?

НСт, COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² толстом ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ 1Π‘ ΠΏΠΎΠ΄ Windows. Π’ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅, Ρ‚ΠΎΠ½ΠΊΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΈΠ»ΠΈ мобильном ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ использованиС COM Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ бСзопасности ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹:

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ HTTP-сСрвисы ΠΈΠ»ΠΈ REST API для взаимодСйствия с внСшними систСмами
  • Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ примСняйтС встроСнныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ 1Π‘ (Π§Ρ‚Π΅Π½ΠΈΠ΅JSON, Π—Π°ΠΏΠΈΡΡŒXML ΠΈ Ρ‚.Π΄.)
  • Для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ 1Π‘ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹
Как ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ с COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ?

Бпособы ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ:

  1. Π’Ρ‹Π²ΠΎΠ΄ Π² сообщСния:
    Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π’ΠΈΠΏΠ—Π½Ρ‡(COMΠžΠ±ΡŠΠ΅ΠΊΡ‚)); // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создан
    

    Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(ОписаниСОшибки()); // Диагностика ошибок

  2. Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ»:
    ВСкст = Новый Π—Π°ΠΏΠΈΡΡŒΠ’Π΅ΠΊΡΡ‚Π°("C:\log.txt");
    

    ВСкст.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ("Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: " + Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);

    ВСкст.Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ();

  3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Excel Macro Recorder: Π·Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ макрос Π² Excel, Π·Π°Ρ‚Π΅ΠΌ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄ для 1Π‘
  4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ ΠΏΡ€Π°Π²Π° доступа: запускайтС 1Π‘ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ администратора, Ссли трСбуСтся доступ ΠΊ систСмным COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ