Проект

Общее

Профиль

Работа через COM с Excel » История » Версия 4

Всеволод Дорофеев, 23.10.2019 12:18

1 1 Всеволод Дорофеев
h1. Работа через COM с Excel
2 1 Всеволод Дорофеев
3 4 Всеволод Дорофеев
http://citforum.ru/programming/windows/excel_faq/
4 4 Всеволод Дорофеев
https://docs.microsoft.com/ru-ru/office/vba/api/excel.workbook.activesheet
5 4 Всеволод Дорофеев
6 1 Всеволод Дорофеев
h3. При передачи большого числа, например, Штрихкода документа, обрезаются символы после 16 знака.
7 1 Всеволод Дорофеев
8 1 Всеволод Дорофеев
Для корректного вывода устанавливаем текстовый формат, затем выводим
9 1 Всеволод Дорофеев
10 1 Всеволод Дорофеев
<pre>
11 1 Всеволод Дорофеев
		Если Лист.Range(ИмяОбласти).Select() Тогда
12 1 Всеволод Дорофеев
			если нрег(ИмяОбласти) = нрег("ШтрихКодДокумента") Тогда
13 1 Всеволод Дорофеев
				Лист.Range(ИмяОбласти).NumberFormat = "@"; // текстовый формат
14 1 Всеволод Дорофеев
			КонецЕсли;
15 2 Всеволод Дорофеев
			Лист.Range(ИмяОбласти).value = прЗначение;
16 1 Всеволод Дорофеев
		КонецЕсли;
17 1 Всеволод Дорофеев
</pre>
18 1 Всеволод Дорофеев
19 1 Всеволод Дорофеев
Прочие форматы:
20 1 Всеволод Дорофеев
21 1 Всеволод Дорофеев
<pre>
22 1 Всеволод Дорофеев
РабочийЛистКниги.Cells(1,1).NumberFormat = "@"; // текстовый формат
23 1 Всеволод Дорофеев
РабочийЛистКниги.Cells(1,2).NumberFormat = "0"; // числовой формат
24 1 Всеволод Дорофеев
РабочийЛистКниги.Cells(1,3).NumberFormat = ""; // Формат даты Selection.NumberFormat = "m/d/yyyy" 
25 1 Всеволод Дорофеев
</pre> 
26 3 Всеволод Дорофеев
27 3 Всеволод Дорофеев
h3. Работа с книгами, листами
28 3 Всеволод Дорофеев
29 3 Всеволод Дорофеев
https://1c.ru/rus/partners/training/edu/theses/?y=2009&s=35&t=865
30 3 Всеволод Дорофеев
<pre>
31 3 Всеволод Дорофеев
32 3 Всеволод Дорофеев
 Перем Excel, Лист;
33 3 Всеволод Дорофеев
34 3 Всеволод Дорофеев
Функция СлучайноеЧисло()
35 3 Всеволод Дорофеев
36 3 Всеволод Дорофеев
Excel.Calculate();
37 3 Всеволод Дорофеев
38 3 Всеволод Дорофеев
x=Лист.Cells(3,1).value;
39 3 Всеволод Дорофеев
40 3 Всеволод Дорофеев
Возврат x;
41 3 Всеволод Дорофеев
42 3 Всеволод Дорофеев
КонецФункции
43 3 Всеволод Дорофеев
44 3 Всеволод Дорофеев
 
45 3 Всеволод Дорофеев
46 3 Всеволод Дорофеев
Процедура СтатМоделированиеБросковМонетыНажатие(Элемент)
47 3 Всеволод Дорофеев
48 3 Всеволод Дорофеев
Excel=Новый ComОбъект(«Excel.Application»);
49 3 Всеволод Дорофеев
50 3 Всеволод Дорофеев
    Excel.Volatile(); //Сброс генератора случайных чисел
51 3 Всеволод Дорофеев
52 3 Всеволод Дорофеев
    Excel.Application.WorkBooks.Add(1);
53 3 Всеволод Дорофеев
54 3 Всеволод Дорофеев
    Лист=Excel.ActiveSheet;
55 3 Всеволод Дорофеев
56 3 Всеволод Дорофеев
    Лист.Cells(1,1).Formula=«=RAND()»;
57 3 Всеволод Дорофеев
58 3 Всеволод Дорофеев
    n=1;
59 3 Всеволод Дорофеев
60 3 Всеволод Дорофеев
    Если ВвестиЧисло(n,»Введите количество бросков») Тогда
61 3 Всеволод Дорофеев
62 3 Всеволод Дорофеев
                   Орел=0;
63 3 Всеволод Дорофеев
64 3 Всеволод Дорофеев
                   Решка=0;
65 3 Всеволод Дорофеев
66 3 Всеволод Дорофеев
                   Для i=1 По n Цикл
67 3 Всеволод Дорофеев
68 3 Всеволод Дорофеев
                                   x=СлучайноеЧисло();
69 3 Всеволод Дорофеев
70 3 Всеволод Дорофеев
                                   Если x>=0.5 Тогда
71 3 Всеволод Дорофеев
72 3 Всеволод Дорофеев
                                                   Орел=Орел+1;
73 3 Всеволод Дорофеев
74 3 Всеволод Дорофеев
                                   Иначе
75 3 Всеволод Дорофеев
76 3 Всеволод Дорофеев
                                                   Решка=Решка+1;
77 3 Всеволод Дорофеев
78 3 Всеволод Дорофеев
                                   КонецЕсли;
79 3 Всеволод Дорофеев
80 3 Всеволод Дорофеев
                   КонецЦикла;      
81 3 Всеволод Дорофеев
82 3 Всеволод Дорофеев
    КонецЕсли;
83 3 Всеволод Дорофеев
84 3 Всеволод Дорофеев
    Сообщить(Орел);
85 3 Всеволод Дорофеев
86 3 Всеволод Дорофеев
    Сообщить(Решка);
87 3 Всеволод Дорофеев
88 3 Всеволод Дорофеев
Excel.ActiveWorkBook.Close(0);
89 3 Всеволод Дорофеев
90 3 Всеволод Дорофеев
Excel.Quit();
91 3 Всеволод Дорофеев
92 3 Всеволод Дорофеев
Excel=Неопределено;
93 3 Всеволод Дорофеев
94 3 Всеволод Дорофеев
КонецПроцедуры
95 3 Всеволод Дорофеев
</pre>
96 3 Всеволод Дорофеев
97 3 Всеволод Дорофеев
 
98 3 Всеволод Дорофеев
99 3 Всеволод Дорофеев
Основным, в объектной модели Excel, является объект Application, содержащий коллекцию WorkBooks объектов типа WorkBook. Каждый объект типа WorkBook содержит коллекцию объектов WorkSheets типа WorkSheet.
100 3 Всеволод Дорофеев
101 3 Всеволод Дорофеев
Манипуляция рабочими книгами, их листами, ячейками осуществляется путем обращения к свойствам и методам этих объектов. Для создания OLE сервера MS Excel можно использовать следующий код:
102 3 Всеволод Дорофеев
103 3 Всеволод Дорофеев
Excel = Новый COMОбъект («Excel.Application «).
104 3 Всеволод Дорофеев
105 3 Всеволод Дорофеев
Создать новую рабочую книгу Excel можно c помощью метода Add коллекции WorkBooks объекта Application:
106 3 Всеволод Дорофеев
107 3 Всеволод Дорофеев
Excel.Application.WorkBooks.Add().
108 3 Всеволод Дорофеев
109 3 Всеволод Дорофеев
Свойство ActiveWorkBook объекта Excel.Application указывает на текущую активную рабочую книгу среди одной или нескольких открытых. Помимо этого к рабочей книге можно обращаться по ее порядковому номеру. Например, ко второй открытой рабочей книге можно обратиться с помощью оператора:
110 3 Всеволод Дорофеев
111 3 Всеволод Дорофеев
Excel.WorkBooks[2].
112 3 Всеволод Дорофеев
113 3 Всеволод Дорофеев
Сделать рабочую  книгу активной можно с помощью метода Activate:
114 3 Всеволод Дорофеев
115 3 Всеволод Дорофеев
Excel.WorkBooks[2]. Activate().
116 3 Всеволод Дорофеев
117 3 Всеволод Дорофеев
Закрытие документа осуществляется с помощью метода Close:
118 3 Всеволод Дорофеев
119 3 Всеволод Дорофеев
Excel.ActiveWorkBook.Close().
120 3 Всеволод Дорофеев
121 3 Всеволод Дорофеев
Метод Close имеет несколько необязательных (в случае позднего связывания) параметров, влияющих на правила сохранения рабочей книги. Первый из параметров принимает значения истина или ложь и влияет на то, сохранять ли изменения, внесенные в рабочую книгу. Второй параметр - имя файла, в котором нужно сохранить рабочую книгу (если в нее были внесены изменения). Третий параметр также принимает значения истина или Ложь и влияет на то, будет ли пересылаться документ следующему пользователю по электронной почте. Просто сохранить рабочую книгу, не закрывая ее, можно с помощью метода Save или SaveAs.
122 3 Всеволод Дорофеев
123 3 Всеволод Дорофеев
Закрыть OLE сервер MS Excel можно с помощью метода Quit объекта Excel.Application. Данный метод параметров не имеет.
124 3 Всеволод Дорофеев
125 3 Всеволод Дорофеев
Обращение к активному листу рабочей книги производится с помощью оператора:
126 3 Всеволод Дорофеев
127 3 Всеволод Дорофеев
Лист=Excel.ActiveSheet
128 3 Всеволод Дорофеев
129 3 Всеволод Дорофеев
Обращение к отдельным ячейкам листа производится с помощью коллекции Cells объекта WorkSheet, например:
130 3 Всеволод Дорофеев
131 3 Всеволод Дорофеев
Лист.Cells(1,1).Formula=«=RAND()»
132 3 Всеволод Дорофеев
133 3 Всеволод Дорофеев
Таким образом мы вводим в ячейку формулу, в данном случае функцию генерирования случайного числа в диапазоне [0;1). Здесь первая из координат ячейки указывает на номер строки, вторая - на номер столбца.
134 3 Всеволод Дорофеев
135 3 Всеволод Дорофеев
Оператор Excel.Calculate() выполняет перерасчет формул на активном листе электронной таблицы.