Работать с открытой книгой excel с

Михалыч

695 / 301 / 54

Регистрация: 28.02.2013

Сообщений: 879

1

Как работать с уже открытой книгой Экселя из другого приложения

20.10.2013, 17:01. Показов 5337. Ответов 8

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Доброго всем дня! Прошу подсказать, всю голову сломал. Есть открытая книга Эксель БД_объектов.xls, при обращении к ней из другого приложения возникает ошибка с кодом 9. Вопрос как обратиться к уже открытой книге эксель, так чтобы наверняка? Ошибка в строке If Excel.Application.ActiveCell.Row <> 3 Then Exit Sub

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub CommandButton6_Click() 'чтение результата
 
If Excel.Application.ActiveCell.Row <> 3 Then Exit Sub
Dim y
y = ActiveCell.Column
cbo_1.Text = CStr(Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(3, y).Value)
txt_1.Text = CStr(Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(4, y).Value)
txt_2.Text = CStr(Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(5, y).Value)
lbl_2.Caption = CStr(Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(6, y).Value)
lbl_3.Caption = CStr(Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(7, y).Value)
lbl_4.Caption = CStr(Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(8, y).Value)
lbl_10.Caption = CStr(Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(9, y).Value)
lbl_5.Caption = CStr(Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(10, y).Value)
lbl_6.Caption = CStr(Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(11, y).Value)
lbl_7.Caption = CStr(Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(12, y).Value)
lbl_8.Caption = CStr(Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(13, y).Value)
lbl_9.Caption = CStr(Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(14, y).Value)
Label62.Caption = CStr(Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(15, y).Value)
Label61.Caption = CStr(Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(16, y).Value)
TextBox1.Text = CStr(Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(17, y).Value)
If y - 1 < 2 Then Exit Sub
Excel.Application.Workbooks("БД_объектов.xls").ActiveSheet.Cells(3, y - 1).Select
End Sub



0



4377 / 661 / 36

Регистрация: 17.01.2010

Сообщений: 2,134

20.10.2013, 17:31

2

А уточнить разве не нужно
Excel.Application.ActiveCell.Row как Excel.Application.sheets(«…»).ActiveCell.Row ?



1



Михалыч

695 / 301 / 54

Регистрация: 28.02.2013

Сообщений: 879

20.10.2013, 17:32

 [ТС]

3

Visual Basic
1
2
3
Set objExcel = GetObject(, "Excel.Application")
objExcel.Workbooks("БД_объектов.xls").Activate
If objExcel.ActiveCell.Row <> 3 Then Exit Sub



0



4377 / 661 / 36

Регистрация: 17.01.2010

Сообщений: 2,134

20.10.2013, 17:38

4

Не понял. Заработало? A зачем Activate? У меня всегда получается просто через GetObject().



0



695 / 301 / 54

Регистрация: 28.02.2013

Сообщений: 879

20.10.2013, 17:50

 [ТС]

5

Заработало ))) Благодаря Вашей подсказке.

Добавлено через 42 секунды
PS
Я пока сам не понимаю как, но главное работает )))



0



4377 / 661 / 36

Регистрация: 17.01.2010

Сообщений: 2,134

20.10.2013, 18:02

6

И слава Богу! Но я просто всегда указываю Getobject()…c прикруткой полного пути, потом указываю каким-то образом лист (по обстоятельствам), а дальше With…, и все, гонки МонтеКарло. Откроется в «скрытом режиме», зато быстро и надежно. И без всяких Activate.



0



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

20.10.2013, 18:41

7

Я вообще не понимаю, зачем ActiveCell.Row?
Т.е. если юзер оставил файл с курсором в третьей строке — то работаем, а если в четвёртой — то молча выходим? Глупо как-то…

А с Экселем из другого приложения можно так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim objExcel
 
ActivateExcel
 
objExcel.Workbooks.Add '# открываем новую книгу Excel
 
Private Function ActivateExcel()
On Error resume next 
Set objExcel = GetObject(, "Excel.Application")
If objExcel Is Nothing Then
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = True
End If
End Function

т.к. не факт, что этот Эксель вообще открыт.



1



695 / 301 / 54

Регистрация: 28.02.2013

Сообщений: 879

21.10.2013, 05:54

 [ТС]

8

Цитата
Сообщение от Hugo121
Посмотреть сообщение

Т.е. если юзер оставил файл с курсором в третьей строке — то работаем, а если в четвёртой — то молча выходим? Глупо как-то…

мне главное доделать что-бы работало, потом потихоньку буду пилить



0



695 / 236 / 18

Регистрация: 17.01.2011

Сообщений: 583

Записей в блоге: 1

21.10.2013, 17:37

9

Вот тема на эту тему, извините за каламбур:

Обработка активной книги Excel



0



Все привет, в этой статье опишу исчерпывающие примеры работы с excel на языке C#.

Для начала работы нам необходимо подключить библиотеку COM как на рисунке ниже:

Для этого добавляем ссылку в проект, надеюсь вы знаете как это делается) Выбираем пункт COM ищем библиотеку Microsoft Excel 16.0 Object Library ставим галочку и жмем Ок.

Далее нам не обходимо для сокращения записи и удобства создать алиас.

using Excel = Microsoft.Office.Interop.Excel;

Теперь нам нужно объявить объект Excel задать параметры и приступать к работе.

//Объявляем приложение

            Excel.Application app = new Excel.Application

            {

                //Отобразить Excel

                Visible = true,

                //Количество листов в рабочей книге

                SheetsInNewWorkbook = 2

            };

            //Добавить рабочую книгу

            Excel.Workbook workBook = app.Workbooks.Add(Type.Missing);

            //Отключить отображение окон с сообщениями

            app.DisplayAlerts = false;

            //Получаем первый лист документа (счет начинается с 1)

            Excel.Worksheet sheet = (Excel.Worksheet)app.Worksheets.get_Item(1);

            //Название листа (вкладки снизу)

            sheet.Name = «Имя должно быть не больше 32сим»;

Пример заполнения ячейки:

           //Пример заполнения ячеек №1

            for (int i = 1; i <= 9; i++)

            {

                for (int j = 1; j < 9; j++)

                    sheet.Cells[i, j] = String.Format(«nookery {0} {1}», i, j);

            }

            //Пример №2

            sheet.Range[«A1»].Value = «Пример №2»;

            //Пример №3

            sheet.get_Range(«A2»).Value2 = «Пример №3»;

Захват диапазона ячеек:

            //Захватываем диапазон ячеек Вариант №1

            Excel.Range r1 = sheet.Cells[1, 1];

            Excel.Range r2 = sheet.Cells[9, 9];

            Excel.Range range1 = sheet.get_Range(r1, r2);

            //Захватываем диапазон ячеек Вариант №2

            Excel.Range range2 = sheet.get_Range(«A1»,«H9» );

Оформление, шрифт, размер, цвет, толщина.

            //Шрифт для диапазона

              range.Cells.Font.Name = «Tahoma»;

              range2.Cells.Font.Name = «Times New Roman»;

            //Размер шрифта для диапазона

              range.Cells.Font.Size = 10;

            //Жирный текст

              range.Font.Bold = true;

            //Цвет текста

              range.Font.Color = ColorTranslator.ToOle(Color.Blue);

Объединение ячеек в одну

  //Объединение ячеек с F2 по K2

    Excel.Range range3 = sheet.get_Range(«F2», «K2»);

    range3.Merge(Type.Missing);

Изменяем размеры ячеек по ширине и высоте

//увеличиваем размер по ширине диапазон ячеек

   Excel.Range range2 = sheet.get_Range(«D1», «S1»);

   range2.EntireColumn.ColumnWidth = 10;

//увеличиваем размер по высоте диапазон ячеек

   Excel.Range rowHeight = sheet.get_Range(«A4», «S4»);

   rowHeight.EntireRow.RowHeight = 50;range.EntireColumn.AutoFit();range.EntireColumn.AutoFit(); //авторазмер

Создаем обводку диапазона ячеек

Excel.Range r1 = sheet.Cells[countRow, 2];

Excel.Range r2 = sheet.Cells[countRow, 19];

Excel.Range rangeColor = sheet.get_Range(r1, r2);

rangeColor.Borders.Color = ColorTranslator.ToOle(Color.Black);

Производим выравнивания содержимого диапазона ячеек.

  Excel.Range r = sheet.get_Range(«A1», «S40»);

  //Оформления

  r.Font.Name = «Calibri»;

  r.Cells.Font.Size = 10;

  r.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;

  r.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;

Примеры вычисления формул, все вставки формул были скопированы из самой Excel без изменений. Позиция ячейки взята из счетчика переменно и подставлен к букве ячейки

sheet.Cells[countRow, countColumn] = $«=G{countRow}-F{countRow}»;

sheet.Cells[countRow, countColumn].FormulaLocal = $«=ЕСЛИ((H{countRow}*O{countRow})+(I{countRow}*P{countRow})/100<=0;J{countRow}*O{countRow}/100;((H{countRow}*O{countRow})+(I{countRow}*P{countRow}))/100)»;

sheet.Cells[countRow, countColumn] = $«=K{countRow}+N{countRow}-R{countRow}»;

sheet.Cells[33, 22].FormulaLocal = «=СУММ(V3:V32)»;

Добавляем разрыв страницы.

//Ячейка, с которой будет разрыв

Excel.Range razr = sheet.Cells&#91;n, m] as Excel.Range;

//Добавить горизонтальный разрыв (sheet — текущий лист)

sheet.HPageBreaks.Add(razr);

//VPageBreaks — Добавить вертикальный разрыв

Как открыть фаил Excel

app.Workbooks.Open(@»C:UsersUserDocumentsExcel.xlsx»,

  Type.Missing, Type.Missing, Type.Missing, Type.Missing,

  Type.Missing, Type.Missing, Type.Missing, Type.Missing,

  Type.Missing, Type.Missing, Type.Missing, Type.Missing,

  Type.Missing, Type.Missing);

Сохраняем документ Excel

app.Application.ActiveWorkbook.SaveAs(«MyFile.xlsx», Type.Missing,

  Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange,

  Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

Завершение работы с объектом Excel.Application

app.Quit();

System.Runtime.InteropServices.Marshal.ReleaseComObject(app);

Пример как выбрать фаил и загрузив его и узнать количество заполненных строк и колонок в одном конкретном листе по имени.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

//поиск файла Excel

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Multiselect =false;

            ofd.DefaultExt = «*.xls;*.xlsx»;

            ofd.Filter = «Microsoft Excel (*.xls*)|*.xls*»;

            ofd.Title = «Выберите документ Excel»;

            if (ofd.ShowDialog() != DialogResult.OK)

            {

                MessageBox.Show(«Вы не выбрали файл для открытия», «Внимание», MessageBoxButtons.OK, MessageBoxIcon.Information);

                return;

            }

            string xlFileName = ofd.FileName; //имя нашего Excel файла

            //рабоата с Excel

            Excel.Range Rng;            

            Excel.Workbook xlWB;

            Excel.Worksheet xlSht;

            int iLastRow, iLastCol;

            Excel.Application xlApp = new Excel.Application(); //создаём приложение Excel

            xlWB = xlApp.Workbooks.Open(xlFileName); //открываем наш файл          

            xlSht = xlWB.Worksheets[«Лист1»]; //или так xlSht = xlWB.ActiveSheet //активный лист

            iLastRow = xlSht.Cells[xlSht.Rows.Count, «A»].End[Excel.XlDirection.xlUp].Row; //последняя заполненная строка в столбце А

            iLastCol = xlSht.Cells[1, xlSht.Columns.Count].End[Excel.XlDirection.xlToLeft].Column; //последний заполненный столбец в 1-й строке

Получаем список всех загруженных книг «листов» из файла

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

  //поиск файла Excel

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Multiselect = false;

            ofd.DefaultExt = «*.xls;*.xlsx»;

            ofd.Filter = «Microsoft Excel (*.xls*)|*.xls*»;

            ofd.Title = «Выберите документ Excel»;

            if (ofd.ShowDialog() != DialogResult.OK)

            {

                MessageBox.Show(«Вы не выбрали файл для открытия», «Внимание», MessageBoxButtons.OK, MessageBoxIcon.Information);

                return;

            }

            string xlFileName = ofd.FileName; //имя нашего Excel файла

Excel.Workbook xlWB = ex.Workbooks.Open(xlFileName);

///загружаем список всех книг

            foreach (object item in xlWB.Sheets)

            {

                Excel.Worksheet sheet = (Excel.Worksheet)item;

            }

Совместный доступ в Microsoft Excel дает возможность работать с одним файлом сразу нескольким пользователям. Десять-двадцать человек на разных компьютерах одновременно вносят какие-то данные в один документ. Где находится определенная информация, работают определенные формулы.

«Главный пользователь» имеет возможность отслеживать действия рабочей группы, добавлять/удалять участников, редактировать противоречивые изменения. Как настроить совместную работу в Excel.

Особенности работы с общим файлом

В книге Excel со совместным доступом не все задачи можно выполнять.

Нельзя:

  • Создавать таблицы Excel.
  • Создавать, менять или просматривать сценарии.
  • Удалять листы.
  • Объединять либо разделять ячейки.
  • Работать с XML-данными (импортировать, добавлять, обновлять, удалять и т.д.).

Выход: отключить общий доступ – выполнить запрещенную задачу – снова включить доступ.

Совместное пользование ограничивает для участников еще ряд задач:

Недопустимо Реально
Вставлять либо удалять группу ячеек Добавлять строку или столбец
Добавлять либо изменять условные форматы Работать с существующими форматами
Включать или изменять инструмент «Проверка данных» Работать с существующими настройками проверки
Создавать или редактировать диаграммы, сводные отчеты Работать с имеющимися диаграммами и сводными таблицами
Вставлять или редактировать рисунки и графические объекты Просматривать имеющиеся рисунки и графические объекты
Вставлять или менять гиперссылки Переходить по имеющимся гиперссылкам
Назначать, редактировать либо удалять пароли Существующие пароли функционируют
Ставить либо снимать защиту листов и книг Существующая защита работает
Группировать, структурировать данные; вставлять подуровни Работать с имеющимися группами, структурами и подуровнями
Записывать, изменять или просматривать макросы Запускать имеющиеся макросы, которые не связаны с недоступными задачами
Изменять или удалять формулы массива Пользоваться существующими формулами
Добавлять в форму данных новую информацию Искать информацию в форме данных



Как сделать совместный доступ к файлу Excel?

Сначала определяемся, какую книгу мы «откроем» для редактирования сразу несколькими участниками. Создаем новый файл и наполняем его информацией. Либо открываем существующий.

  1. Переходим на вкладку «Рецензирование». Диалоговое окно «Доступ к книге».
  2. Рецензирование-Доступ к книге.

  3. Управление доступом к файлу – правка. Ставим галочку напротив «Разрешить изменять файл нескольким пользователям одновременно».
  4. Управление доступом к файлу.

  5. Переходим к инструменту «Подробнее», чтобы настроить параметры многопользовательского редактирования.
  6. Настройки в Подробнее.

  7. Нажимаем ОК. Если мы открываем общий доступ к новой книге, то выбираем ей название. Если совместное пользование предполагается для существующего файла – жмем ОК.
  8. Открываем меню Microsoft Office. Выбираем команду «Сохранить как». Выбираем тот формат файла сохранения, который «пойдет» на всех пользовательских компьютерах.
  9. Местом сохранения выбираем сетевой ресурс / сетевую папку, которую откроют предполагаемые участники. Нажимаем «Сохранить».

Внимание! Нельзя использовать для сохранения общего файла веб-сервер.

Теперь проверим и обновим ссылки:

  1. Вкладка «Данные». «Подключения».
  2. Данные-Подключения.

  3. Изменить ссылки / изменить связи. Если такая кнопка отсутствует, в листе нет связанных файлов.
  4. Переходим на вкладку «Состояние», чтобы проверить имеющиеся связи. На работоспособность связей указывает кнопка ОК.

Открытие книги с совместным доступом

  1. Открываем меню Microsoft Office.
  2. Нажимаем «Открыть».
  3. Выбираем общую книгу.
  4. Когда книга открыта, нажимаем на кнопку Microsoft Office. Переходим на вкладку «Параметры Excel» (в нижней части меню).
  5. «Общие» — «Личная настройка» — «Имя пользователя». Вводим опознавательную информацию (имя, ник-нейм).
  6. Имя пользователя.

Все. Можно редактировать информацию, вводить новую. После работы – сохранить.

Случается, что при открытии книги Excel с совместным доступом к файлу появляется запись «Файл заблокирован». Сохранить не получается. При последующем открытии оказывается, что общий доступ отключен. Возможные причины проблемы:

  1. Одну и ту же часть документа редактируют несколько пользователей. К примеру, вбивают разные данные в одну ячейку. Возникает блокировка.
  2. Во время пользования совместным файлом ведется журнал изменений (кто входил, когда, что делал). Книга увеличивается. Начинает «глючить».
  3. Удалили кого-то из пользователей, но пока ему не сказали об этом. Тогда блокировка может появиться только на его компьютере.
  4. Большая нагрузка на сетевой ресурс.

Что можно сделать, если совместный доступ к файлу файл заблокирован:

  1. Почистить либо удалить журнал изменений.
  2. Почистить содержимое файла.
  3. Отменить, а потом снова активировать совместный доступ.
  4. Открыть книгу xls в OpenOffice. И снова сохранить ее в xls.

Замечено, что запись «Файл заблокирован» реже появляется в новейших версиях Excel.

Как удалить пользователя

  1. На вкладке «Рецензирование» открываем меню «Доступ к книге».
  2. Доступ к книге.

  3. В разделе «Правка» мы видим перечень пользователей.
  4. Список пользователей.

  5. Выбираем имя – нажимаем «Удалить».

Перед удалением проверьте, что пользователи закончили работу с файлом.

Как отключить режим совместного доступа в Excel

Все пользователи должны сохранить информацию и закрыть общий файл. Если необходимо оставить журнал, соблюдаем инструкцию:

  1. Вкладка «Рецензирование» — «Исправления» — «Выделить исправления».
  2. Выделить исправления.

  3. Устанавливаем параметры «Исправлений». По времени – «все». Галочки напротив «Пользователем» и «В диапазоне» сняты. Напротив «вносить изменения на отдельный лист» — стоит. Жмем ОК.
  4. Вносить изменения на отдельный лист.

  5. Откроется Журнал изменений. Его можно сохранить либо распечатать.

Чтобы отключить совместный доступ к файлу Excel, на вкладке «Рецензирование» нажать «Доступ к книге» и снять галочку напротив «Разрешить изменять файл нескольким пользователям».

Разрешить изменять файл нескольким пользователям.

В списке должен остаться один пользователь – Вы.

Открытие книги Excel из кода VBA. Проверка существования книги. Создание новой книги, обращение к открытой книге и ее закрытие. Методы Open, Add и Close.

Открытие существующей книги

Существующая книга открывается из кода VBA Excel с помощью метода Open:

Workbooks.Open Filename:=«D:test1.xls»

или

Workbooks.Open («D:test1.xls»)

В кавычках указывается полный путь к открываемому файлу Excel. Если такой файл не существует, произойдет ошибка.

Проверка существования файла

Проверить существование файла можно с помощью функции Dir. Проверка существования книги Excel:

If Dir(«D:test1.xls») = «» Then

    MsgBox «Файл не существует»

Else

    MsgBox «Файл существует»

End If

Или, если файл (книга Excel) существует, можно сразу его открыть:

If Dir(«D:test1.xls») = «» Then

    MsgBox «Файл не существует»

Else

    Workbooks.Open Filename:=«D:test1.xls»

End If

Создание новой книги

Новая рабочая книга Excel создается в VBA с помощью метода Add:

Созданную книгу, если она не будет использоваться как временная, лучше сразу сохранить:

Workbooks.Add

ActiveWorkbook.SaveAs Filename:=«D:test2.xls»

В кавычках указывается полный путь сохраняемого файла Excel, включая присваиваемое имя, в примере — это «test2.xls».

Обращение к открытой книге

Обращение к активной книге:

Обращение к книге с выполняемым кодом:

Обращение к книге по имени:

Workbooks(«test1.xls»)

Workbooks(«test2.xls»)

Обратиться по имени можно только к уже открытой книге, а чтобы из кода VBA Excel книгу открыть, необходимо указать полный путь к файлу.

Открытая рабочая книга закрывается из кода VBA Excel с помощью метода Close:

Workbooks(«test1.xlsx»).Close

Если закрываемая книга редактировалась, а внесенные изменения не были сохранены, тогда при ее закрытии Excel отобразит диалоговое окно с вопросом: Вы хотите сохранить изменения в файле test1.xlsx? Чтобы файл был закрыт без сохранения изменений и вывода диалогового окна, можно воспользоваться параметром метода Close — SaveChanges:

Workbooks(«test1.xlsx»).Close  SaveChanges:=False

или

Workbooks(«test1.xlsx»).Close  (False)

Закрыть книгу Excel из кода VBA с сохранением внесенных изменений можно также с помощью параметра SaveChanges:

Workbooks(«test1.xlsx»).Close  SaveChanges:=True

или

Workbooks(«test1.xlsx»).Close (True)


Фразы для контекстного поиска: открыть книгу, открытие книги, создать книгу, создание книги, закрыть книгу, закрытие книги, открыть файл Excel, открытие файла Excel, существование книги, обратиться к открытой книге.


 0 

   

Распечатать

1С 8.x : Активация открытой книги Excel для корректировки

Нужно было получить для изменения уже открытую книгу Excel, а если она закрыта, то открыть и изменять.
Ниже код, который данную задачу решает.

Код 1C v 8.х

 
Попытка
Эксель = Неопределено;
Книга = Неопределено;
Лист = Неопределено;

Состояние("Выполняется подключение к Excel");
Попытка
Книга = ПолучитьCOMОбъект(Файл, "Excel.Application");
Эксель = Книга.Application;
Исключение
Эксель = Новый COMОбъект("Excel.Application");
Книга = Эксель.WorkBooks.Open(Файл);
КонецПопытки;
Лист = Книга.WorkSheets(1);
Эксель.Visible = Истина;

Исключение
Сообщить("Не удалось подключить Excel." + Символы.ПС + ОписаниеОшибки());
Возврат;
КонецПопытки;

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Работать в word онлайн без скачивания
  • Работать в excel время
  • Работать бесплатно в word в интернете
  • Работайте с электронными таблицами excel
  • Работает ли word на linux

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии