R7-Office: added documentation for macros

This commit is contained in:
alexandervnuchkov 2019-05-08 11:56:12 +03:00
parent d433190e23
commit cee13cb908
22 changed files with 410 additions and 2 deletions

View File

@ -42,6 +42,7 @@
<ul class="dropdown-content">
<li id="navitem_apieditors"><a class="dropdown-item" href="<%=VirtualPathUtility.ToAbsolute("~/api/editors/basic.aspx")%>">Сервер документов</a></li>
<li id="navitem_plugins"><a class="dropdown-item" href="<%=VirtualPathUtility.ToAbsolute("~/api/plugins/index.aspx")%>">Плагины</a></li>
<li id="navitem_macros"><a class="dropdown-item" href="<%=VirtualPathUtility.ToAbsolute("~/api/plugins/macros.aspx")%>">Макросы</a></li>
<li id="navitem_portals"><a class="dropdown-item" href="<%=VirtualPathUtility.ToAbsolute("~/api/portals/index.aspx")%>">Сервер совместной работы</a></li>
</ul>
</div>

View File

@ -0,0 +1,68 @@
<%@ Control Language="C#" Inherits="BaseContentUserControls" %>
<%@ Register Namespace="TeamLab.Controls" Assembly="__Code" TagPrefix="cc" %>
<script runat="server">
protected override void Init()
{
PageTitle = PageCaption = "Макросы";
MetaKeyWords = "";
MetaDescription = "Статьи документации по макросам.";
}
</script>
<div class="MainHelpCenter">
<h1>Конвертация макросов MS VBA</h1>
<p class="dscr">Макросы в редакторах отличаются от макросов, используемых в программах Microsoft, поскольку в программных продуктах Microsoft используется скриптовый язык Visual Basic для приложений (VBA). Язык JavaScript является более гибким и может использоваться на любой платформе (что важно, поскольку наши редакторы доступны на разных платформах).</p>
<p>Это может быть причиной определённых неудобств в том случае, если до этого вы работали с Microsoft Office с использованием макросов, поскольку они несовместимы с макросами на JavaScript. Однако вы можете сконвертировать ваши старые макросы и использовать их с новыми редакторами.</p>
<p>Это не сложный процесс. Рассмотрим пример:</p>
<pre><code>Sub Example()
Dim myRange
Dim result
Dim Run As Long
For Run = 1 To 3
Select Case Run
Case 1
result = "=SUM(A1:A100)"
Case 2
result = "=SUM(A1:A300)"
Case 3
result = "=SUM(A1:A25)"
End Select
ActiveSheet.range("B" & Run) = result
Next Run
End Sub</code></pre>
<p>Макрос выше считает сумму значений из трёх диапазонов ячеек столбца <b>A</b> и помещает результат в три ячейки столбца <b>B</b>.</p>
<p>Всё то же самое можно выполнить с помощью макросов JavaScript, код будет выглядеть почти идентично и легко читаем, если вы знаете и Visual Basic для приложений и JavaScript:</p>
<pre><code>(function()
{
for (let run = 1; run <= 3; run++)
{
var result = "";
switch (run)
{
case 1:
result = "=SUM(A1:A100)";
break;
case 2:
result = "=SUM(A1:A300)";
break;
case 3:
result = "=SUM(A1:A25)";
break;
default:
break;
}
Api.GetActiveSheet().GetRange("B" + run).Value = result;
}
})();</code></pre>
<p>Таким же образом можно сконвертировать любой другой скрипт, написанные на Visual Basic для приложений, в код JavaScript, который будет совместим с нашими редакторами.</p>
</div>

View File

@ -0,0 +1,106 @@
<%@ Control Language="C#" Inherits="BaseContentUserControls" %>
<%@ Register Namespace="TeamLab.Controls" Assembly="__Code" TagPrefix="cc" %>
<script runat="server">
protected override void Init()
{
PageTitle = PageCaption = "Макросы";
MetaKeyWords = "";
MetaDescription = "Статьи документации по макросам.";
}
</script>
<div class="MainHelpCenter">
<h1>Полезные примеры макросов</h1>
<p class="dscr">Примеры на этой странице продемонстрируют использование макросов и дадут возможность сравнить макросы, написанные на JavaScript, с макросами, написанными на Microsoft Visual Basic для приложений, чтобы вы могли увидеть разницу и понять, как можно сконвертировать уже имеющиеся макросы.</p>
<h2>Запись данных в ячейку таблицы</h2>
<p>В этом примере мы запишем данные (фразу "Hello world") в ячейку, находящуюся в четвёртом столбце третьего ряда</p>
<pre><code>(function()
{
Api.GetActiveSheet().GetRange("C4").SetValue("Hello world");
})();</code></pre>
<p class="spoiler_heading">Соответствующий код макроса Microsoft VBA</p>
<div class="spoiler_code">
<pre><code>Sub example()
Cells(3, 4)="Hello world"
End Sub</code></pre>
</div>
<h2>Изменение цветов шрифта и фона ячейки, выделение шрифта жирным</h2>
<p>В этом примере мы установим жирный шрифт, изменим его цвет и цвет фона ячейки</p>
<pre><code>(function()
{
Api.GetActiveSheet().GetRange("A2").SetBold(true);
Api.GetActiveSheet().GetRange("B4").SetFontColor(Api.CreateColorFromRGB(255, 0, 0));
Api.GetActiveSheet().GetRange("B3").SetFillColor(Api.CreateColorFromRGB(0, 0, 250));
})();</code></pre>
<p class="spoiler_heading">Соответствующий код макроса Microsoft VBA</p>
<div class="spoiler_code">
<pre><code>Sub example()
Range("B4").Font.Color = RGB(255, 0, 0)
Range("B4").Font.Bold = True
Range("B3").Interior.Color = RGB(0, 0, 250)
End Sub</code></pre>
</div>
<h2>Объединение и отмена объединения ячеек выбранного диапазона</h2>
<p>В этом примере мы объединим ячейки одного диапазона и отменим объединение ячеек другого диапазона</p>
<pre><code>(function()
{
Api.GetActiveSheet().GetRange("A1:B3").Merge(true);
Api.GetActiveSheet().GetRange("C5:D10").UnMerge();
})();</code></pre>
<p class="spoiler_heading">Соответствующий код макроса Microsoft VBA</p>
<div class="spoiler_code">
<pre><code>Sub example()
Range("A1:B3").Merge
Range("C5:D10").UnMerge
End Sub</code></pre>
</div>
<h2>Установка ширины столбца</h2>
<p>В этом примере мы установим ширину второго столбца ("B")</p>
<pre><code>(function()
{
Api.GetActiveSheet().SetColumnWidth(1, 25);
})();</code></pre>
<p class="spoiler_heading">Соответствующий код макроса Microsoft VBA</p>
<div class="spoiler_code">
<pre><code>Sub example()
Columns("B").ColumnWidth = 25
End Sub</code></pre>
</div>
<h2>Форматирование диапазона как таблицы</h2>
<p>В этом примере мы отформатируем диапазон ячеек в таблицу</p>
<pre><code>(function()
{
Api.GetActiveSheet().FormatAsTable("A1:D10");
})();</code></pre>
<p class="spoiler_heading">Соответствующий код макроса Microsoft VBA</p>
<div class="spoiler_code">
<pre><code>Sub example()
Sheet1.ListObjects.Add(xlSrcRange, Range("A1:D10"), , xlYes).Name = "myTable1"
End Sub</code></pre>
</div>
<h2>Добавление новой диаграммы для выбранного диапазона ячеек</h2>
<p>В этом примере мы создадим диаграмму для данных из диапазона ячеек "C5:D7"</p>
<pre><code>(function()
{
Api.GetActiveSheet().AddChart("'Sheet1'!$C$5:$D$7", true, "bar", 2, 105 * 36000, 105 * 36000, 5, 2 * 36000, 1, 3 * 36000);
})();</code></pre>
<p class="spoiler_heading">Соответствующий код макроса Microsoft VBA</p>
<div class="spoiler_code">
<pre><code>Sub example()
With ActiveSheet.ChartObjects.Add(Left:=300, Width:=300, Top:=10, Height:=300)
.Chart.SetSourceData Source:=Sheets("Sheet1").Range("C5:D7")
End With
End Sub</code></pre>
</div>
</div>

View File

@ -0,0 +1,45 @@
<%@ Control Language="C#" Inherits="BaseContentUserControls" %>
<%@ Register Namespace="TeamLab.Controls" Assembly="__Code" TagPrefix="cc" %>
<script runat="server">
protected override void Init()
{
PageTitle = PageCaption = "Макросы";
MetaKeyWords = "";
MetaDescription = "Статьи документации по макросам.";
}
</script>
<div class="MainHelpCenter">
<h1>Макросы</h1>
<p class="dscr">Макросы - это небольшие скрипты, используемые для того, чтобы ускорить выполнение рутинных задач в различных типах документов. Макросы используют синтаксис языка JavaScript, поэтому методы, доступные в JavaScript, так же доступны в макросах.</p>
<p>Вы можете добавить собственные макросы в документы (поддерживаются все типы документов: текстовые, таблицы, презентации), отредактировать их, сохранить с документом, - всё, что может сделать вашу работу с документами легче и удобнее.</p>
<h2>Начало работы с макросами</h2>
<p>Макрос - это функция JavaScript, привязанная к документу. Простейшая функция, вставляющая фразу "Hello world!" в текстовый документ при запуске, будет выглядеть следующим образом:</p>
<pre><code>(function()
{
var oDocument = Api.GetDocument();
var oParagraph = Api.CreateParagraph();
oParagraph.AddText("Hello world!");
oDocument.InsertContent([oParagraph]);
})();</code></pre>
<p>В интерфейсе десктопных редакторов это будет выглядеть следующим образом:</p>
<div class="screen_block">
<img alt="Окно макросов" target="img1_eventcom_guides" class="screenphoto screen_guides" src="<%=VirtualPathUtility.ToAbsolute("~/images/Help/Guides/small/guide98/macros.png")%>" />
<img alt="Окно макросов" Step 1 id="img1_eventcom_guides" class="bigphoto_screen" src="<%=VirtualPathUtility.ToAbsolute("~/images/Help/Guides/big/guide98/macros.png")%>" />
<div target="img1_eventcom_guides" class="screenphoto magnifier"></div>
</div>
<p>Для доступа к макросу, откройте или создайте документ нужного типа, нажмите кнопку плагинов <img alt="Кнопка плагинов" src="<%=VirtualPathUtility.ToAbsolute("~/images/help/api/plugins/plugin-button.png") %>" /> и выберите <b>Макросы</b>. Откроется окно макросов. Нажмите <b>Создать</b> и введите ваш код скрипта в окно с правой стороны. Когда закончите, нажмите <b>Выполнить</b> для запуска кода в документе.</p>
<p>Вы также можете переименовать ваш макрос для того, чтобы отличать его от других в случае, если в документе несколько макросов, либо удалить ненужные.</p>
</div>

View File

@ -0,0 +1,64 @@
<%@ Control Language="C#" Inherits="BaseContentUserControls" %>
<%@ Register Namespace="TeamLab.Controls" Assembly="__Code" TagPrefix="cc" %>
<script runat="server">
protected override void Init()
{
PageTitle = PageCaption = "Макросы";
MetaKeyWords = "";
MetaDescription = "Статьи документации по макросам.";
}
</script>
<div class="MainHelpCenter">
<h1>Написание собственных макросов</h1>
<p class="dscr">Теперь, когда вы знаете, как работают макросы, давайте попробуем написать собственный макрос. К примеру, у нас есть таблица, в которой нужно раскрасить строки в разные цвета: нечётные строки в зелёный, а чётные в красный. В таблице 200 строк (если делать всё вручную, это займёт немало времени) и столбцы от <b>A</b> до <b>S</b>.</p>
<ol>
<li>Откройте десктопные редакторы и создайте новую таблицу.</li>
<li>Откройте плагины и выберите <b>Макросы</b>. Откроется окно макросов.</li>
<li>Нажмите <b>Создать</b>. Создастся базовый шаблон функции, в который можно вставить нужный код:
<pre><code>(function()
{
// ... ваш код здесь ...
})();</code></pre>
</li>
<li>Что нужно для выполнения нашей задачи:
<ul>
<li>Сначала нужно получить текущий лист с помощью метода <b>GetActiveSheet</b>:
<pre><code>var oWorksheet = Api.GetActiveSheet();</code></pre>
</li>
<li>Затем создадим цикл, который пройдёт от первого до последней строки таблицы:
<pre><code>for (var i = 1; i < 200; i += 2) {
}</code></pre>
</li>
<li>Теперь зададим две переменных: одну для нечётных строк, вторую для чётных:
<pre><code>var rowOdd = i, rowEven = i + 1;</code></pre>
</li>
<li>Теперь мы можем раскрасить нечётные и чётные строки в нужные цвета. Установим эти цвета с помощью метода <b>CreateColorFromRGB</b>. Диапазон ячеек внутри ряда можно получить с помощью метода <b>GetRange</b>, цвет для нечётных строк устанавливается так:
<pre><code>oWorksheet.GetRange("A" + rowOdd + ":S" + rowOdd).SetFillColor(Api.CreateColorFromRGB(118, 190, 39));</code></pre>
То же самое для чётных строк, но цвет будет другим:
<pre><code>oWorksheet.GetRange("A" + rowEven + ":S" + rowEven).SetFillColor(Api.CreateColorFromRGB(186, 56, 46));</code></pre>
</li>
</ul>
</li>
</ol>
<p>Давайте подведём итог и запишем весь код:</p>
<pre><code>(function()
{
var oWorksheet = Api.GetActiveSheet();
for (var i = 1; i < 200; i += 2) {
var rowOdd = i, rowEven = i + 1;
oWorksheet.GetRange("A" + rowOdd + ":S" + rowOdd).SetFillColor(Api.CreateColorFromRGB(118, 190, 39));
oWorksheet.GetRange("A" + rowEven + ":S" + rowEven).SetFillColor(Api.CreateColorFromRGB(186, 56, 46));
}
})();</code></pre>
<p>Вставьте код из примера выше в окно макросов и нажмите <b>Выполнить</b>. Строки таблицы с 1 по 200 будут раскрашены в разные цвета менее чем за секунду.</p>
</div>

View File

@ -0,0 +1,8 @@
<%@ Control Language="C#" %>
<%@ Register Namespace="TeamLab.Controls" Assembly="__Code" TagPrefix="cc" %>
<ul>
<li><a href="<%=VirtualPathUtility.ToAbsolute("~/api/plugins/macros.aspx")%>">Описание</a></li>
<li><a href="<%=VirtualPathUtility.ToAbsolute("~/api/plugins/macros/writingmacros.aspx")%>">Написание макросов</a></li>
<li><a href="<%=VirtualPathUtility.ToAbsolute("~/api/plugins/macros/convertingvbamacros.aspx")%>">Конвертация макросов</a></li>
<li><a href="<%=VirtualPathUtility.ToAbsolute("~/api/plugins/macros/macrosamples.aspx")%>">Примеры макросов</a></li>
</ul>

View File

@ -0,0 +1,7 @@
<%@ Control Language="C#" %>
<%@ Register Namespace="TeamLab.Controls" Assembly="__Code" TagPrefix="cc" %>
<ul>
<li><p>Макросы</p>
<cc:LocalizeContent runat="Server" ControlName="~/Controls/Help/SideMenu/macros/macros.ascx" />
</li>
</ul>

View File

@ -0,0 +1,3 @@
<%@ Control Language="C#" Inherits="BaseContentUserControls"%>
<%@ Register Namespace="TeamLab.Controls" Assembly="__Code" TagPrefix="cc" %>
<h5><a href="<%=VirtualPathUtility.ToAbsolute("~/api/plugins/macros.aspx")%>">Макросы</a></h5>

View File

@ -0,0 +1,17 @@
<%@ Master Language="C#" MasterPageFile="~/Masters/ArticlePage.master" %>
<%@ Register Namespace="TeamLab.Controls" Assembly="__Code" TagPrefix="cc" %>
<asp:Content ID="Content1" ContentPlaceHolderID="pagebodyidlink" runat="Server">
<asp:contentplaceholder id="pagebodyidpage" runat="server"></asp:contentplaceholder>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="breadstoplink" runat="Server">
<asp:contentplaceholder id="breadstop" runat="server"></asp:contentplaceholder>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="leftmenupagelink" runat="Server">
<asp:contentplaceholder id="leftmenupage" runat="server"></asp:contentplaceholder>
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="contentlink" runat="Server">
<cc:LocalizeContent ID="LocalizeContent8" runat="Server" ControlName="~/Controls/Help/VariousControls/HelpLinks/MacrosLinks.ascx" />
</div>
<asp:contentplaceholder id="content" runat="server"></asp:contentplaceholder>
</asp:Content>

View File

@ -0,0 +1,17 @@
<%@ Master Language="C#" MasterPageFile="~/Masters/ArticleListPage.master" %>
<%@ Register Namespace="TeamLab.Controls" Assembly="__Code" TagPrefix="cc" %>
<asp:Content ID="Content1" ContentPlaceHolderID="pagebodyidlink" runat="Server">
<asp:contentplaceholder id="pagebodyidpage" runat="server"></asp:contentplaceholder>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="breadstoplink" runat="Server">
<asp:contentplaceholder id="breadstop" runat="server"></asp:contentplaceholder>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="leftmenupagelink" runat="Server">
<asp:contentplaceholder id="leftmenupage" runat="server"></asp:contentplaceholder>
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="contentlink" runat="Server">
<cc:LocalizeContent ID="LocalizeContent8" runat="Server" ControlName="~/Controls/Help/VariousControls/HelpLinks/MacrosLinks.ascx" />
</div>
<asp:contentplaceholder id="content" runat="server"></asp:contentplaceholder>
</asp:Content>

View File

@ -0,0 +1,14 @@
<%@ Page Title="" Language="C#" MasterPageFile="~/Masters/Macros/MacrosList.master" %>
<%@ Register Namespace="TeamLab.Controls" Assembly="__Code" TagPrefix="cc" %>
<asp:Content ID="Content4" ContentPlaceHolderID="pagebodyidpage" runat="Server">
<body class="api_developers api_macros">
</asp:Content>
<asp:Content ID="content3" ContentPlaceHolderID="breadstop" runat="server">
<cc:LocalizeContent runat="Server" ControlName="~/Controls/Help/VariousControls/TopControls/MacrosTop/MacrosTop.ascx" />
</asp:Content>
<asp:Content ID="Content1" ContentPlaceHolderID="content" runat="Server">
<cc:LocalizeContent runat="Server" ControlName="~/Controls/Help/Desktop/Documents/Plugins/Macros/Macros.ascx" />
</asp:Content>
<asp:Content ID="content2" ContentPlaceHolderID="leftmenupage" runat="server">
<div class="guidespage document">
</asp:Content>

View File

@ -0,0 +1,14 @@
<%@ Page Title="" Language="C#" MasterPageFile="~/Masters/Macros/MacrosList.master" %>
<%@ Register Namespace="TeamLab.Controls" Assembly="__Code" TagPrefix="cc" %>
<asp:Content ID="Content4" ContentPlaceHolderID="pagebodyidpage" runat="Server">
<body class="api_developers api_macros">
</asp:Content>
<asp:Content ID="content3" ContentPlaceHolderID="breadstop" runat="server">
<cc:LocalizeContent runat="Server" ControlName="~/Controls/Help/VariousControls/TopControls/MacrosTop/MacrosTop.ascx" />
</asp:Content>
<asp:Content ID="Content1" ContentPlaceHolderID="content" runat="Server">
<cc:LocalizeContent runat="Server" ControlName="~/Controls/Help/Desktop/Documents/Plugins/Macros/ConvertingVBAMacros.ascx" />
</asp:Content>
<asp:Content ID="content2" ContentPlaceHolderID="leftmenupage" runat="server">
<div class="guidespage document">
</asp:Content>

View File

@ -0,0 +1,14 @@
<%@ Page Title="" Language="C#" MasterPageFile="~/Masters/Macros/MacrosList.master" %>
<%@ Register Namespace="TeamLab.Controls" Assembly="__Code" TagPrefix="cc" %>
<asp:Content ID="Content4" ContentPlaceHolderID="pagebodyidpage" runat="Server">
<body class="api_developers api_macros">
</asp:Content>
<asp:Content ID="content3" ContentPlaceHolderID="breadstop" runat="server">
<cc:LocalizeContent runat="Server" ControlName="~/Controls/Help/VariousControls/TopControls/MacrosTop/MacrosTop.ascx" />
</asp:Content>
<asp:Content ID="Content1" ContentPlaceHolderID="content" runat="Server">
<cc:LocalizeContent runat="Server" ControlName="~/Controls/Help/Desktop/Documents/Plugins/Macros/MacroSamples.ascx" />
</asp:Content>
<asp:Content ID="content2" ContentPlaceHolderID="leftmenupage" runat="server">
<div class="guidespage document">
</asp:Content>

View File

@ -0,0 +1,14 @@
<%@ Page Title="" Language="C#" MasterPageFile="~/Masters/Macros/MacrosList.master" %>
<%@ Register Namespace="TeamLab.Controls" Assembly="__Code" TagPrefix="cc" %>
<asp:Content ID="Content4" ContentPlaceHolderID="pagebodyidpage" runat="Server">
<body class="api_developers api_macros">
</asp:Content>
<asp:Content ID="content3" ContentPlaceHolderID="breadstop" runat="server">
<cc:LocalizeContent runat="Server" ControlName="~/Controls/Help/VariousControls/TopControls/MacrosTop/MacrosTop.ascx" />
</asp:Content>
<asp:Content ID="Content1" ContentPlaceHolderID="content" runat="Server">
<cc:LocalizeContent runat="Server" ControlName="~/Controls/Help/Desktop/Documents/Plugins/Macros/WritingMacros.ascx" />
</asp:Content>
<asp:Content ID="content2" ContentPlaceHolderID="leftmenupage" runat="server">
<div class="guidespage document">
</asp:Content>

View File

@ -317,7 +317,8 @@ nav ul li a.menuitem:hover {
.desktop_windows_version.desktop_editors #navitem_setup,
.common_all_os.desktop_editors #navitem_setup,
.document_editors #navitem_features,
.api_plugins #navitem_plugins {
.api_plugins #navitem_plugins,
.api_macros #navitem_macros {
background: #F7F7F7;
}
.BaseFooter {

View File

@ -3746,6 +3746,9 @@ span.param-type {
text-decoration: none;
color: @textColor;
}
p.spoiler_heading {
padding-bottom: 2px;
}
}
.InnerPage {
.main {
@ -4422,3 +4425,12 @@ h1 {
.ONLYOFFICEFeatures {
display: none;
}
.spoiler_heading {
color: #808080;
cursor: pointer;
border-bottom: 1px dotted #808080;
display: inline-block;
}
.spoiler_code {
display: none;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 B

View File

@ -15,4 +15,7 @@
fixedHeaderOffset(hashID);
}
});
$(".spoiler_heading").on("click", function () {
$(this).next(".spoiler_code").slideToggle("fast");
});
});

File diff suppressed because one or more lines are too long