Михалыч 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
0 |
4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
|
20.10.2013, 17:31 |
2 |
А уточнить разве не нужно
1 |
Михалыч 695 / 301 / 54 Регистрация: 28.02.2013 Сообщений: 879 |
||||
20.10.2013, 17:32 [ТС] |
3 |
|||
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 секунды
0 |
4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
|
20.10.2013, 18:02 |
6 |
0 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||
20.10.2013, 18:41 |
7 |
|||
Я вообще не понимаю, зачем ActiveCell.Row? А с Экселем из другого приложения можно так:
т.к. не факт, что этот Эксель вообще открыт.
1 |
695 / 301 / 54 Регистрация: 28.02.2013 Сообщений: 879 |
|
21.10.2013, 05:54 [ТС] |
8 |
Т.е. если юзер оставил файл с курсором в третьей строке — то работаем, а если в четвёртой — то молча выходим? Глупо как-то… мне главное доделать что-бы работало, потом потихоньку буду пилить
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[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?
Сначала определяемся, какую книгу мы «откроем» для редактирования сразу несколькими участниками. Создаем новый файл и наполняем его информацией. Либо открываем существующий.
- Переходим на вкладку «Рецензирование». Диалоговое окно «Доступ к книге».
- Управление доступом к файлу – правка. Ставим галочку напротив «Разрешить изменять файл нескольким пользователям одновременно».
- Переходим к инструменту «Подробнее», чтобы настроить параметры многопользовательского редактирования.
- Нажимаем ОК. Если мы открываем общий доступ к новой книге, то выбираем ей название. Если совместное пользование предполагается для существующего файла – жмем ОК.
- Открываем меню Microsoft Office. Выбираем команду «Сохранить как». Выбираем тот формат файла сохранения, который «пойдет» на всех пользовательских компьютерах.
- Местом сохранения выбираем сетевой ресурс / сетевую папку, которую откроют предполагаемые участники. Нажимаем «Сохранить».
Внимание! Нельзя использовать для сохранения общего файла веб-сервер.
Теперь проверим и обновим ссылки:
- Вкладка «Данные». «Подключения».
- Изменить ссылки / изменить связи. Если такая кнопка отсутствует, в листе нет связанных файлов.
- Переходим на вкладку «Состояние», чтобы проверить имеющиеся связи. На работоспособность связей указывает кнопка ОК.
Открытие книги с совместным доступом
- Открываем меню Microsoft Office.
- Нажимаем «Открыть».
- Выбираем общую книгу.
- Когда книга открыта, нажимаем на кнопку Microsoft Office. Переходим на вкладку «Параметры Excel» (в нижней части меню).
- «Общие» — «Личная настройка» — «Имя пользователя». Вводим опознавательную информацию (имя, ник-нейм).
Все. Можно редактировать информацию, вводить новую. После работы – сохранить.
Случается, что при открытии книги Excel с совместным доступом к файлу появляется запись «Файл заблокирован». Сохранить не получается. При последующем открытии оказывается, что общий доступ отключен. Возможные причины проблемы:
- Одну и ту же часть документа редактируют несколько пользователей. К примеру, вбивают разные данные в одну ячейку. Возникает блокировка.
- Во время пользования совместным файлом ведется журнал изменений (кто входил, когда, что делал). Книга увеличивается. Начинает «глючить».
- Удалили кого-то из пользователей, но пока ему не сказали об этом. Тогда блокировка может появиться только на его компьютере.
- Большая нагрузка на сетевой ресурс.
Что можно сделать, если совместный доступ к файлу файл заблокирован:
- Почистить либо удалить журнал изменений.
- Почистить содержимое файла.
- Отменить, а потом снова активировать совместный доступ.
- Открыть книгу xls в OpenOffice. И снова сохранить ее в xls.
Замечено, что запись «Файл заблокирован» реже появляется в новейших версиях Excel.
Как удалить пользователя
- На вкладке «Рецензирование» открываем меню «Доступ к книге».
- В разделе «Правка» мы видим перечень пользователей.
- Выбираем имя – нажимаем «Удалить».
Перед удалением проверьте, что пользователи закончили работу с файлом.
Как отключить режим совместного доступа в Excel
Все пользователи должны сохранить информацию и закрыть общий файл. Если необходимо оставить журнал, соблюдаем инструкцию:
- Вкладка «Рецензирование» — «Исправления» — «Выделить исправления».
- Устанавливаем параметры «Исправлений». По времени – «все». Галочки напротив «Пользователем» и «В диапазоне» сняты. Напротив «вносить изменения на отдельный лист» — стоит. Жмем ОК.
- Откроется Журнал изменений. Его можно сохранить либо распечатать.
Чтобы отключить совместный доступ к файлу 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." + Символы.ПС + ОписаниеОшибки());
Возврат;
КонецПопытки;