1с excel методы доступа

Как осуществить чтение/запись данных из/в Excel на языке 1с (используя COM-объект)

Здесь можно скачать шаблонную обработку, разработанную в среде «1С:Предприятие v8″ для работы с файлами Excel: [download id=»5»] В обработке осуществляются все основные действия с файлом Excel. Даны подробные комментарии. Можно использовать в качестве шаблона для разработки собственных выгрузок/загрузок в/из Excel.

Чтение данных из Excel

Доступ из 1С к Excel производится посредством OLE. Создание COM-объекта:

 Попытка
		Эксель =Новый COMОбъект("Excel.Application"); // для v7 код будет: Эксель = СоздатьОбъект("Excel.Application");
 Исключение
		Сообщить(ОписаниеОшибки());
		Возврат;
КонецПопытки;

Теперь используя переменную Эксель можно управлять приложением Excel.

  • Внимание! Microsoft Excel должен быть установлен на компьютере!

Следующая команда откроет книгу:

	Книга = Эксель.WorkBooks.Open(ПутьКФайлу);

Перед тем, как начать считывание данных, укажем лист книги, с которого будем считывать данные:

	Лист = Книга.WorkSheets(НомерЛиста);

Нумерация листов книги начинается с 1. Общее количество листов можно получить, используя следующую команду:

	КоличествоЛистов = Книга.Sheets.Count;

Лист можно выбрать по имени листа в книге:

	Лист = Книга.WorkSheets(ИмяЛиста);

Имя листа в книге можно получить по номеру:

	ИмяЛиста = Книга.Sheets(НомерЛиста).Name;

Точно так же можно задать имя листа:

        Книга.Sheets(6).Name = "6 Резерв на отпуск";

Итак, мы открыли книгу и выбрали лист, теперь посмотрим, сколько строк и колонок на выбранном листе:

	ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
	ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;

Получим значения ячейки листа в строке НомерСтроки и в колонке НомерКолонки:

	Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;

Ниже приведен отрывок кода, запустив который мы прочитаем все данные с первой страницы:

	Эксель = СоздатьОбъект("Excel.Application");
	Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
	Лист = Книга.WorkSheets(1);   

	ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
	ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;      

	Для Строка = 1 По ВсегоСтрок Цикл   

		Для Колонка = 1 По ВсегоКолонок Цикл
			Значение = СокрЛП(Лист.Cells(Строка,Колонка).Value);
		КонецЦикла;       

	КонецЦикла;

Где ПутьКФайлу — полный путь к файлу книги Excel (включая имя).

После выполнения действий необходимо закрыть книгу:

	Эксель.Application.Quit();

Выгрузка данных в Excel

Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных.
Для создания новой книги можно использовать следующий код:

      Книга = Excel.WorkBooks.Add();

При создании книги автоматически создаются листы (по умолчанию 3). Нам остается только выбрать нужный:

      Лист = Книга.WorkSheets(НомерЛиста);

Или добавить в книгу новый лист:

      Лист = Книга.Sheets.Add();

Добавим в ячейку на листе значение:

      Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;

Запишем книгу:

	Попытка
		Книга.SaveAs(ПутьКФайлу);
	Исключение
		Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
	КонецПопытки;

Где ПутьКФайлу — полный путь к файлу книги Excel (включая имя).

После выполнения действий необходимо закрыть книгу:

      	Эксель.Application.Quit();

Как программно сохранить файл Excel в формате 2003 года

Синтаксис команды «SaveAs» во втором параметре разрешает указать формат сохраняемого файла.
Числовое значение фрмата файла Excel 2003: FileFormatNum = -4143
Т.е. команду сохранения для этого можно написатьтак:

Книга.SaveAs(ПутьДляЗаписиФайла, -4143);

Часто используемые методы Excel

Эксель.Visible = Видимость; 0 — Excel не виден, 1 — виден.
Книга = Эксель.WorkBooks.Add(); Создание новой книги (файла) Excel.
Книга = Эксель.WorkBooks.Add(ИмяФайлаШаблона); Создание новой книги (файла) Excel по шаблону «ИмяФайлаШаблона»
Книга.SaveAs(ИмяФайла); Сохранение книги Excel.
Лист = Книга.WorkSheets.Add(); Добавление нового листа в книгу.
Книга = Эксель.WorkBooks.Open(ИмяФайла); Открытие существующей книги (файла) Excel.
Лист = Книга.WorkSheets(НомерЛиста); Установка листа в качестве рабочего с номером НомерЛиста.
Лист.Name = ИмяЛиста; Задание рабочему листу имени ИмяЛиста
Лист.PageSetup.Zoom = Масштаб; Задание параметра страницы «Масштаб» (от 10 до 400).
Лист.PageSetup.Orientation = Ориентация; Ориентация: 1 — книжная, 2 — альбомная.
Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры); Задание левой границы (в сантиметрах).
Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры); Задание верхней границы (в сантиметрах).
Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры); Задание правой границы (в сантиметрах).
Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры); Задание нижней границы (в сантиметрах).
Лист.Columns(НомерКолонки).ColumnWidth = Ширина; Задание ширины колонке.
Лист.Cells(НомерСтроки,НомерКолонки).ColumnWidth = 0; Скрыть всю колонку, в которой расположена ячейка
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение; Ввод данных в ячейку.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта; Установка шрифта в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Color = ЦветШрифта; Установка цвета шрифта в ячейке. Тип переменной ЦветШрифта — число десятичное.
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Color = ЦветРамки; Установка цвета рамки в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Interior.Color = ЦветФона; Установка цвета фона в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта; Установка размера шрифта в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный; 1 — жирный шрифт, 0 — нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив; 1 — наклонный шрифт, 0 — нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline = Подчеркнутый; 2 — подчеркнутый, 1 — нет.
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат; Установка формата данных ячейки.
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle = ТипЛинии; Установка рамок ячейки. 1 — тонкая сплошная.
Лист.Cells(НомерСтроки,НомерКолонки).WrapText = Истина; Осуществлять перенос по словам в указанной ячейке
Лист.Protect(); Установка защиты на лист
Лист.UnProtect(); Снятие защиты с листа
Лист.Cells(Строка, Столбец).Locked=0; Ячейка будет доступной (и после установки защиты на лист)
ПолучитьCOMОбъект(<Имя файла>, <Имя класса COM>); Основное применение функции ПолучитьCOMОбъект — это получение COM-объекта, соответствующего файлу.

Хитрости Excel

Как выборочно разрешить / запретить редактирование ячеек листа

	//Создаем объект EXCEL
	Эксель = СоздатьОбъект("Excel.Application");
	Книга = Эксель.WorkBooks.Open(ФайлВыгрузки);
	Лист =Книга.Worksheets("Список сотрудников"); // Выбор листа

	Книга.ActiveSheet.UnProtect(); //делаем шаблон незащищенным

	// Заполняем лист

	// ...................................

	// Снимаем защиту с области ввода сумм 

	Для Перем = 1 По 10 Цикл
		// Прописываем, какие ячейки будут доступными
		Книга.ActiveSheet.Cells(Перем, 2).Locked=0;
	КонецЦикла;  

	Книга.ActiveSheet.Protect(); // ставим защиту на лист

Как запретить появление на экране всяких вопросов от Excel

Excel, чтоб вопрос не задавал:

	Excel.DisplayAlerts = False;

Как добавить лист Excel в конец списка листов книги или после конкретного листа (а не в начало книги)

Метод работает для платформ 1С v8.

	Файл = Новый COMОбъект("Excel.Application");
	Файл.DisplayAlerts = False;
	
	Попытка
		ОбщаяКнига = Файл.WorkBooks.Open(Объект.ПутьКОбщемуФайлу);
	Исключение
		Сообщить("Excel: Неудачная попытка открытия файла Excel" + ОписаниеОшибки());
		//ЗаписьЖурналаРегистрации("Excel: Неудачная попытка открытия файла Excel", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
		Возврат;
		
	КонецПопытки;
	
	КоличествоЛистов = ОбщаяКнига.Sheets.Count; //2
	ПоследнийЛист = ОбщаяКнига.Worksheets(КоличествоЛистов); // необходимо получить сам лист (не его номер)
	
	Если КоличествоЛистов < 8 Тогда // к примеру, нужно сделать так, чтобы в книге было 8 листов, если листов меньше, то добавляем их
		
		Пока 8 - КоличествоЛистов > 0 Цикл
			
			ОбщаяКнига.Sheets.Add(Null,ПоследнийЛист,Null,Null); // добавляем лист в конец книги

			КоличествоЛистов = КоличествоЛистов +1;
			ПоследнийЛист = ОбщаяКнига.Worksheets(КоличествоЛистов); // получаем ссылку на очередной последний лист книги
			
		КонецЦикла;
	КонецЕсли;

Как программно скрыть колонку файла Excel

	// ПРИМЕР как скрыть колонку программно - скроется колонка №2: 	ЛистОшибок.Cells(ПозицияШапкиФайла, 2).ColumnWidth  = 0; // скрыть колонку №2

Как программно назначить ячейке файла Excel перенос по словам

	// ПРИМЕР как осуществлять перенос в ячейке по словам программно ячейка в строке ПозицияШапкиФайла, колонке №2: 	ЛистОшибок.Cells(ПозицияШапкиФайла, 2).WrapText = Истина; // осуществлять перенос в ячейке по словам

Как обработать файл xls, если Excel не установлен на компьютере

Для этого можно использовать метод

	СоздатьОбъект("ADODB.Connection");

Код для 7.7, решающий такую задачу, будет выглядеть примерно так:

	db = СоздатьОбъект("ADODB.Connection");
	ConectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ИмяФайла+";Extended Properties="+"Excel 8.0;";
	rs=CreateObject("ADODB.Recordset");
	db.Open(ConectionString);
	rs.ActiveConnection = db;
	rs.CursorType = 3;
	rs.LockType = 2;

	//Чтобы задать Область, надо выделить область в екселе и нажать Вставка-Имя-Присвоить...
	rs.Source = "Select * from [Лист$1]";
	rs.Open();
	КоличествоПолей = rs.Fields.Count;
	Сообщить(КоличествоПолей);
	КоличествоЗаписей = rs.RecordCount;
	Сообщить(КоличествоЗаписей);
	Если rs.Eof()=0 Тогда
		Сообщить(rs.Fields(0).Value);
		rs.MoveNext();
	Иначе ТЗ.УстановитьЗначение(1,1,rs.Fields(1).Value);
	КонецЕсли;
	rs.Close();
	db.Close();

Как указать цвет шрифта в ячейке, цвет рамки, цвет фона

Книга.Sheets(1).Cells(1,1).Borders.Color = 25525124; // цвет рамки Книга.Sheets(1).Cells(1,1).Font.Color = 255000000; // цвет шрифта Книга.Sheets(1).Cells(1,1).Interior.Color = 255045; // цвет фона

Организация автоматической обработки файлов xls из выбранной папки

// В v8 код обработки файлов выглядит примерно так:

// примеры задания пути к файлам:
ПримерПапкиВСети = "Adsf01PublicЗАГРУЗКА ЗАКАЗОВ";
ПримерПапкиЛокал = "C:1сОбмен";

// задаем путь загрузки:
ПутьЗагрузки = ПримерПапкиЛокал;

// Файлы - Массив из значений типа Файл, содержащий найденные файлы:
Файлы = НайтиФайлы(ПутьЗагрузки,"*.xls*");

// организовываем перебор файлов:
Для Каждого Файл ИЗ Файлы Цикл

	// обрабатываем файлы....
	// ...

	// В конце можно удалить бработанный файл:
	Попытка
		УдалитьФайлы(Файл.ПолноеИмя);
	Исключение
		Сообщить("Не удалось удалить файл " + ОписаниеОшибки());
	КонецПопытки;

	// или в конце можно переместить обработанный файл в специально предназначенную подпапку исходной папки:
	Попытка
		ПереместитьФайл(Файл.ПолноеИмя, ПутьЗагрузки+"Arhiv" + Файл.Имя); // папка архива: "C:1сОбменArhiv"
	Исключение
		Сообщить("Не удалось переместить файл " + ОписаниеОшибки());
	КонецПопытки;

КонецЦикла;

// в 7.7 для аналогичных действий используются команды:
ФС.НайтиПервыйФайл()
ФС.НайтиСледующийФайл()
ФС.УдалитьФайл()
ФС.ПереименоватьФайл(,,);

Создание кнопки в Excel в 7.7

	ТекущийЛист.Shapes("CommandButton").Select
	ТекущийЛист.OLEObjects("CommandButton").Object.Caption = "Кнопуля";

Процедура открывает Эксель, втавляет на первый лист кнопку «Очистить» и назначает ей макрос,
устанавливающий автофильтр на колонку Е по не нулевым значениям. Текст макроса любой,
главное разделять Симв(13) строки

	Попытка
		Ex=CreateObject("Excel.Application");
	Исключение
		Сообщить(ОписаниеОшибки(),"!!!");
		Предупреждение("Не удалось запустить MS Excel!");
		Возврат;
	КонецПопытки;
	Состояние("Открытие файла...");
	Попытка
		Wb=Ex.WorkBooks.Add();
	Исключение
		Возврат;
	КонецПопытки;
	Ex.Visible=-1;
	Wb.Sheets(1).OLEObjects.Add("Forms.CommandButton.1",,,10, 99.75, 120.75,  "Очистить");//27.75
	st = "Private Sub CommandButton1_Click()" +  Chr(13) +
	" ThisWorkbook.Sheets(1).Columns(""E:E"").AutoFilter Field:=1, Criteria1:="">0"",
 Operator:=xlAnd" + Chr(13) + "End Sub";
	Ex.VBE.ActiveVBProject.VBComponents(Wb.Sheets(1).Name).CodeModule.AddFromString(st)

текст макроса пишется в переменную st

Как подключиться к запущенному Excel-евскому файлу в реальном времени, изменить его и даже не сохранять, а просто переключить окно на 1С и сразу же выгружать данные в табличную часть, лишь переключив окна

 Excel = ПолучитьCOMОбъект(, "Excel.Application");

При этом первый параметр нужно оставить пустым. В этом случае при этом подцепится тот файл экселя, который был открыт последним, даже если порядок переключения окон был таким:
Excel1, Excel2, IE, Проводник, 1С (т.е. что-то и было открытым между 1с и экселевским файлом) — все равно откроется Excel2, потому что он был активен последним.

Описание команды ПолучитьCOMОбъект

Глобальный контекст
ПолучитьCOMОбъект (GetCOMObject)
Синтаксис:
ПолучитьCOMОбъект(<Имя файла>, <Имя класса COM>)
Параметры:
<Имя файла> (необязательный)
Тип: Строка. Имя файла, включающее полный путь.
<Имя класса COM> (необязательный)
Тип: Строка. Имя класса COM, экземпляр которого должен быть создан или получен. Если расширение имени файла, указанное в первом параметре полностью идентифицирует класс объекта, то параметр может быть опущен.
Возвращаемое значение:
Тип: COMОбъект.
Описание:
Основное применение функции ПолучитьCOMОбъект — это получение COM-объекта, соответствующего файлу. Для этого следует в качестве первого параметра функции задать имя файла, который будет определять COM-объект. Например, фрагмент кода

Таб = ПолучитьCOMОбъект("C:DATADATA.XLS");

создает объект Excel.Application и открывает с его помощью файл документа «C:DATADATA.XLS». Если указанный файл во время выполнения данного фрагмента уже открыт с помощью MS Excel, то будет получена ссылка на уже существующий объект.
Для файлов, указываемых в качестве параметра данной функции, должно быть установлено соответствие расширения имени файла и класса COM.
Если в качестве имени файла указана пустая строка, то будет создан новый экземпляр объекта. В этом случае необходимо указать имя класса COM.
Например, фрагмент кода

Таб = ПолучитьCOMОбъект("", "Excel.Application");

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

П = ПолучитьCOMОбъект( , "Excel.Application");

Переменная П получит значение типа COMОбъект, соответствующее активному приложению MS Excel, если таковое имелось, или будет вызвано исключение, если активных экземпляров MS Excel не было.
Пример:

// Получение объекта COM, соответствующего файлу Таб = ПолучитьCOMОбъект("C:DATADATA.XLS"); // Создание нового экземпляра объекта Таб = ПолучитьCOMОбъект("", "Excel.Application"); // Получение активного объекта Таб = ПолучитьCOMОбъект( , "Excel.Application");

Ниже приведена сравнительная таблица команд — один и тот же код на 7.7 и v8 с небольшими дополнениями

Отличия:

  • команда создания самого объекта в 7.7 и v8 различна;
  • в v8 выводится запись в журнал регистрации (просто для примера, например, когда вывод сообщения на экран невозможен из-за выполнения кода в фоновом задании);
  • в v8 параллельно создается, заполняется и сохраняется копия исходного файла с комментариями об ошибках
1C 7.7 1C v8
Доступ из 1С к Excel производится посредством OLE. Создание COM-объекта:
Попытка
 Эксель = СоздатьОбъект("Excel.Application");
Исключение
 Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Попытка
 Эксель = Новый COMОбъект("Excel.Application");
Исключение
 ЗаписьЖурналаРегистрации("Excel: Неудачная попытка подключения компоненты Excel.
 | Возможно, программа Excel не установлена на данном компьютере!", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
Теперь, используя переменную «Эксель», можно управлять приложением Excel.
* Внимание! Microsoft Excel должен быть установлен на компьютере!
Следующая команда откроет книгу:
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
Попытка
Книга = Эксель.WorkBooks.Open(ИмяФЗагрузки);
Исключение
ЗаписьЖурналаРегистрации("Excel: Неудачная попытка открытия файла Excel", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
Возврат;
КонецПопытки;
Перед тем, как начать считывание данных, укажем лист книги, с которого будем считывать данные:
Лист = Книга.WorkSheets(НомерЛиста)
Нумерация листов книги начинается с 1. Общее количество листов можно получить, используя следующую команду:
КоличествоЛистов = Книга.Sheets.Count;
КоличествоЛистов = Книга.Sheets.Count;
// создание файла для записи проблем
КнигаОшибок = Эксель.WorkBooks.Add();
КнигаОшибок = Эксель.WorkBooks.Add();
// читаем книгу по листам:
Для СчетчикПоЛистам = 1 По КоличествоЛистов Цикл //цикл по листам
// если листов больше 3, то потребуется добавить лист в книгу
Если СчетчикПоЛистам > 3 Тогда
ЛистОшибок = КнигаОшибок.Sheets.Add();
Иначе
ИмяЛистаОшибок = КнигаОшибок.Sheets(СчетчикПоЛистам).Name;
ЛистОшибок = КнигаОшибок.WorkSheets(ИмяЛистаОшибок);
КонецЕсли;
//Имя листа в книге можно получить по номеру:
ИмяЛиста = Книга.Sheets(НомерЛиста).Name;
ИмяЛиста = Книга.Sheets(СчетчикПоЛистам).Name;
//Лист можно выбрать по имени листа в книге:
Лист = Книга.WorkSheets(ИмяЛиста);
Лист = Книга.WorkSheets(ИмяЛиста);
//Итак, мы открыли книгу и выбрали лист, теперь посмотрим, сколько строк и колонок на выбранном листе:
ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
Попытка
ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row; // используем для перебора строк
Исключение
ЗаписьЖурналаРегистрации("Excel: Неудачная попытка получения количества колонок и строк Excel", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
Возврат;
КонецПопытки;
// получение значения из конкретной ячейки файла экселя:
Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;
Для счетчикПоКолонкам = 1 По ВсегоКолонок Цикл //цикл по колонкам
ЗначениеВЯчейке=Книга.Sheets(СчетчикПоЛистам).Cells(ПозицияШапкиФайла,счетчикПоКолонкам).Value;
...
// установка нового значения ячейки экселя:
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;
ЛистОшибок.Cells(ПозицияШапкиФайла, счетчикПоКолонкам).Value = ЗначениеВЯчейке;
// сохранение изменений в новом файле экселя:
// если такой файл уже был записан, удалим его, чтобы эксель не спросил интерактивно про перезапись
Попытка
ИмяФайлаОшибок = ВыбФайл.Путь + ВыбФайл.ИмяБезРасширения + "_bad.xls";
ФайлОш = Новый Файл(ИмяФайлаОшибок);
Если ФайлОш.Существует() Тогда
УдалитьФайлы(ИмяФайлаОшибок);
КонецЕсли;
КнигаОшибок.SaveAs(ИмяФайлаОшибок); // файл с ошибочными данными
Исключение
ДобавитьСообщениеВОшибки("Не удалось записать в файл сообщения об ошибках!"+ ОписаниеОшибки(),,, "Важно");
КонецПопытки;
// После выполнения действий закрываем книгу:
Эксель.Quit();
Эксель.Quit();

1С 8.х и Excel

Чтение данных из Excel

Доступ из 1С к Excel производится посредством OLE. Создание COM-объекта:

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

Теперь используя переменную Эксель можно управлять приложением Excel.

  • Внимание! Microsoft Excel должен быть установлен на компьютере!

Следующая команда откроет книгу:

Книга = Эксель.WorkBooks.Open(ПутьКФайлу);

Перед тем, как начать считывание данных, укажем лист книги, с которого будем считывать данные:

Лист = Книга.WorkSheets(НомерЛиста);

Нумерация листов книги начинается с 1. Общее количество листов можно получить, используя
следующую команду:

КоличествоЛистов = Книга.Sheets.Count;

Лист можно выбрать по имени листа в книге:

Лист = Книга.WorkSheets(ИмяЛиста);

Имя листа в книге можно получить по номеру:

ИмяЛиста = Книга.Sheets(НомерЛиста).Name;

Итак, мы открыли книгу и выбрали лист, теперь посмотрим, сколько строк и колонок
на выбранном листе:

ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;

Получим значения ячейки листа в строке НомерСтроки и в колонке НомерКолонки:

Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;

Ниже приведен отрывок кода, запустив который мы прочитаем все данные с первой страницы:

Эксель = СоздатьОбъект("Excel.Application");
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
Лист = Книга.WorkSheets(1);

ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;

для Строка = 1 по ВсегоСтрок цикл
	
	для Колонка = 1 по ВсегоКолонок цикл
		Значение = СокрЛП(Лист.Cells(Строка,Колонка).Value);
	КонецЦикла;
		
КонецЦикла;

Где ПутьКФайлу — полный путь к файлу книги Excel (включая имя).

После выполнения действий необходимо закрыть книгу:

Эксель.Application.Quit();

Выгрузка данных в Excel

Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу,
либо создать новую, и выбрать рабочий лист для вывода данных.

Для создания новой книги можно использовать следующий код:

Попытка
	Эксель = СоздатьОбъект("Excel.Application"); 
Исключение
	Сообщить(ОписаниеОшибки()); 
	Возврат;
КонецПопытки; 
Книга = Эксель.WorkBooks.Add();

При создании книги автоматически создаются листы (по умолчанию 3).
Нам остается только выбрать нужный:

Лист = Книга.WorkSheets(НомерЛиста);

Или добавить в книгу новый лист:

Лист = Книга.Sheets.Add();

Добавим в ячейку на листе значение:

Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;

Запишем книгу:

Попытка
	Книга.SaveAs(ПутьКФайлу); 
Исключение
	Сообщить(ОписаниеОшибки()+" Файл не сохранен!"); 
КонецПопытки;

Где ПутьКФайлу — полный путь к файлу книги Excel (включая имя).

После выполнения действий необходимо закрыть книгу:

Эксель.Application.Quit();

Часто используемые методы Excel

Эксель.Visible = Видимость; 0 — Excel не виден, 1 — виден.
Книга = Эксель.WorkBooks.Add(); Создание новой книги (файла) Excel.
Книга.SaveAs(ИмяФайла); Сохранение книги Excel.
Лист = Книга.WorkSheets.Add(); Добавление нового листа в книгу.
Книга = Эксель.WorkBooks.Open(ИмяФайла); Открытие существующей книги (файла) Excel.
Лист = Книга.WorkSheets(НомерЛиста); Установка листа в качестве рабочего с номером НомерЛиста.
Лист.Name = ИмяЛиста; Задание рабочему листу имени ИмяЛиста
Лист.PageSetup.Zoom = Масштаб; Задание параметра страницы «Масштаб» (от 10 до 400).
Лист.PageSetup.Orientation = Ориентация; Ориентация: 1 — книжная, 2 — альбомная.
Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры); Задание левой границы (в сантиметрах).
Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры); Задание верхней границы (в сантиметрах).
Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры); Задание правой границы (в сантиметрах).
Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры); Задание нижней границы (в сантиметрах).
Лист.Columns(НомерКолонки).ColumnWidth = Ширина; Задание ширины колонке.
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение; Ввод данных в ячейку.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта; Установка шрифта в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта; Установка размера шрифта в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный; 1 — жирный шрифт, 0 — нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив; 1 — наклонный шрифт, 0 — нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline = Подчеркнутый; 2 — подчеркнутый, 1 — нет.
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат; Установка формата данных ячейки.
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle = ТипЛинии; Установка рамок ячейки. 1 — тонкая сплошная.
Лист.Protect(); Установка защиты на лист
Лист.UnProtect(); Снятие защиты с листа
Лист.Cells(Строка, Столбец).Locked=0; Ячейка будет доступной (и после установки защиты на лист)

Хитрости Excel

Как выборочно разрешить / запретить редактирование ячеек листа

//Создаем объект EXCEL
Эксель = СоздатьОбъект("Excel.Application"); 
Книга = Эксель.WorkBooks.Open(ФайлВыгрузки); 
Лист =Книга.Worksheets("Список сотрудников"); // Выбор листа
       
Книга.ActiveSheet.UnProtect();    //делаем шаблон незащищенным

// Заполняем лист

...................................

// Снимаем защиту с области ввода сумм

Для Перем = 1 По 10 Цикл
	// Прописываем, какие ячейки будут доступными  
    Книга.ActiveSheet.Cells(Перем, 2).Locked=0; 
КонецЦикла;

Книга.ActiveSheet.Protect();    // ставим защиту на лист

Как осуществить поиск / замену значений ячеек на листе

//Выбираем область поиска - весь лист
ОбластьПоиска = Лист.Cells;

// Укажем начало листа
НачалоЛиста = Диапазон.Cells(1, 1);

// Ищем ячейку с текстом, указанным в переменной ТекстДляПоиска, 
//укажем откуда искать - с начала листа
ОбластьПараметр = ОбластьПоиска.Find(ТекстДляПоиска, НачалоЛиста);


// Если нашли, заполняем значением из переменной Значение
Если ОбластьПараметр <> неопределено Тогда
	ОбластьПараметр.Value = Значение;
КонецЕсли;

Замечание. Текст для замены лучше выделять, например, в угловые скобки, аналогично
параметрам макета в 1С. Это улучшит наглядность, визуально отделит от рабочего текста.

Текст для поиска в этом случае будет выглядеть так:

ТекстДляПоиска = «<ИмяДляЗамены>»

Как скопировать / удалить строку

//Выбираем область поиска - весь лист
ОбластьПоиска = Лист.Cells;

// Найдем нужную нам ячейку
// Если не указываем откуда искать - то с текущей ячейки, это первая ячейка на листе
НайденнаяОбласть = ОбластьПоиска.Find("Текст для поиска");

// Выделяем всю строку
НайденнаяОбласть.EntireRow.Select();

// Копируем выделенное
НайденнаяОбласть.EntireRow.Copy();

// Вставляем (новая строка будет вставлена тут же)
НайденнаяОбласть.EntireRow.Insert();


// Теперь как удалить строку. Найдем область
НайденнаяОбласть = ОбластьПоиска.Find("Текст для поиска", НачалоЛиста);
НайденнаяОбласть.EntireRow.Delete();

Замечание. Приведенные выше примеры позволят, например, организвать работу с шаблонами на основании листов Excel.

Чтение данных из Excel

Доступ из 1С к Excel производится посредством OLE. Создание COM-объекта:

Попытка
     Эксель = СоздатьОбъект(“Excel.Application”);
Исключение
     Сообщить(ОписаниеОшибки());
     Возврат;
КонецПопытки;

Теперь используя переменную Эксель можно управлять приложением Excel.

  • Внимание! Microsoft Excel должен быть установлен на компьютере!

Следующая команда откроет книгу:

 Книга = Эксель.WorkBooks.Open(ПутьКФайлу);  

Перед тем, как начать считывание данных, укажем лист книги, с которого будем считывать данные:

 Лист = Книга.WorkSheets(НомерЛиста);  

Нумерация листов книги начинается с 1. Общее количество листов можно получить, используя следующую команду:

 КоличествоЛистов = Книга.Sheets.Count;  

Лист можно выбрать по имени листа в книге:

 Лист = Книга.WorkSheets(ИмяЛиста);   

Имя листа в книге можно получить по номеру:

 ИмяЛиста = Книга.Sheets(НомерЛиста).Name;  

Итак, мы открыли книгу и выбрали лист, теперь посмотрим, сколько строк и колонок на выбранном листе:

ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;

ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;

Получим значения ячейки листа в строке НомерСтроки и в колонке НомерКолонки:

 Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;  

Ниже приведен отрывок кода, запустив который мы прочитаем все данные с первой страницы:

Эксель = СоздатьОбъект(“Excel.Application”);
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
Лист = Книга.WorkSheets(1);

ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
Для Строка = 1 по ВсегоСтрок цикл
     для Колонка = 1 по ВсегоКолонок цикл
          Значение = СокрЛП(Лист.Cells(Строка,Колонка).Value);
     КонецЦикла;
КонецЦикла;
где ПутьКФайлу – полный путь к файлу книги Excel (включая имя).

После выполнения действий необходимо закрыть книгу:

 Эксель.Application.Quit();  

Выгрузка данных в Excel

Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных.
Для создания новой книги можно использовать следующий код:

Попытка

Эксель = СоздатьОбъект("Excel.Application");

Исключение

Сообщить(ОписаниеОшибки());

Возврат;

КонецПопытки;

Книга = Эксель.WorkBooks.Add();

При создании книги автоматически создаются листы (по умолчанию 3). Нам остается только выбрать нужный:

 Лист = Книга.WorkSheets(НомерЛиста);  

Или добавить в книгу новый лист:

 Лист = Книга.Sheets.Add();   

Добавим в ячейку на листе значение:

 Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;   

Запишем книгу:

Попытка
     Книга.SaveAs(ПутьКФайлу);
Исключение
     Сообщить(ОписаниеОшибки()+” Файл не сохранен!”);
КонецПопытки;

где ПутьКФайлу – полный путь к файлу книги Excel (включая имя).

После выполнения действий необходимо закрыть книгу:

 Эксель.Application.Quit();  

Здесь можно скачать обработку, позволяющую из выбранного файла Excel загрузить данные со всех страниц:

Часто используемые методы Excel

Эксель.Visible = Видимость; 0 – Excel не виден, 1 – виден.
Книга = Эксель.WorkBooks.Add(); Создание новой книги (файла) Excel.
Книга.SaveAs(ИмяФайла); Сохранение книги Excel.
Лист = Книга.WorkSheets.Add(); Добавление нового листа в книгу.
Книга = Эксель.WorkBooks.Open(ИмяФайла); Открытие существующей книги (файла) Excel.
Лист = Книга.WorkSheets(НомерЛиста); Установка листа в качестве рабочего с номером НомерЛиста.
Лист.Name = ИмяЛиста; Задание рабочему листу имени ИмяЛиста
Лист.PageSetup.Zoom = Масштаб; Задание параметра страницы “Масштаб” (от 10 до 400).
Лист.PageSetup.Orientation = Ориентация; Ориентация: 1 – книжная, 2 – альбомная.
Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры); Задание левой границы (в сантиметрах).
Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры); Задание верхней границы (в сантиметрах).
Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры); Задание правой границы (в сантиметрах).
Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры); Задание нижней границы (в сантиметрах).
Лист.Columns(НомерКолонки).ColumnWidth = Ширина; Задание ширины колонке.
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение; Ввод данных в ячейку.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта; Установка шрифта в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта; Установка размера шрифта в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный; 1 – жирный шрифт, 0 – нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив; 1 – наклонный шрифт, 0 – нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline = Подчеркнутый; 2 – подчеркнутый, 1 – нет.
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат; Установка формата данных ячейки.
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle = ТипЛинии; Установка рамок ячейки. 1 – тонкая сплошная.
Лист.Protect(); Установка защиты на лист
Лист.UnProtect(); Снятие защиты с листа
Лист.Cells(Строка, Столбец).Locked=0; Ячейка будет доступной (и после установки защиты на лист)

Хитрости Excel

Как выборочно разрешить / запретить редактирование ячеек листа

//Создаем объект EXCEL
Эксель = СоздатьОбъект(“Excel.Application”);
Книга = Эксель.WorkBooks.Open(ФайлВыгрузки);
Лист =Книга.Worksheets(“Список сотрудников”); // Выбор листа        
Книга.ActiveSheet.UnProtect();   
//делаем шаблон незащищенным 
// Заполняем лист  …………………………….. 
// Снимаем защиту с области ввода сумм
Для Перем = 1 По 10 Цикл    
     // Прописываем, какие ячейки будут доступными      
     Книга.ActiveSheet.Cells(Перем, 2).Locked=0;
КонецЦикла;
Книга.ActiveSheet.Protect();    // ставим защиту на лист

Взято с http://programna1c.narod.ru/docs/Excel/Excel1C8.html

Многие знают, что Excel гораздо старше 1С. На мой взгляд, это очень успешный продукт, и нареканий о нем я не слышал. Excel прост и универсален. Он способен выполнять не только простые арифметические операции, но и сложные вычисления, построение графиков и т.п. Знаю примеры, когда организации до перехода на 1С вели часть бухгалтерии в Excel. Многие и сейчас параллельно используют две программы. В этой статье рассмотрим способы обмена данными между 1С и Excel.

Таблицы 1С и Excel.

Многие пользователи для удобства работы сохраняют таблицы 1С (печатные формы) в формате Excel (*.xls). После чего в полученном файле делают различные группировки, сортировки, вычисления и т.п. Связано это с тем, что в таблицах 1С нет такого огромного функционала как в таблицах Excel. Но в версии 1С 8.0 есть нововведения, делающих работу с таблицами более комфортной.

Замечание: В Excel разделителем дробной части считается символ «,». Поэтому перед сохранением таблицы 1С в формате Excel замените в ней другой разделитель (например «.») на «,». Иначе в Excel с этими числами не удастся произвести вычисления, или они вообще не будут отображаться как числа. Например, в таблице 1С «15.2» отобразится в Excel как «15.фев».

Получение данных из Excel.

Доступ из 1С к Excel производится посредством OLE. Например, код

Попытка
Эксель= СоздатьОбъект(«Excel.Application»);
Исключение

Сообщить(ОписаниеОшибки() + » Программа Exсel не установлена на данном компьютере!»);
Возврат;

КонецПопытки;

позволит нам получить доступ через переменную «Эксель» к запущенному приложению Excel. А далее уже можно получить доступ к книге (файлу), листу и ячейке с данными. Далее примеры кода.

Открытие книги (файла):

Книга=Эксель.WorkBooks.Open(ПутьКФайлу);

ПутьКФайлу — полный путь к файлу книги Excel.

Выбор листа книги для работы с ним:

Лист=Книга.WorkSheets(НомерЛиста);

или

Лист=Книга.WorkSheets(ИмяЛиста);

НомерЛиста — номер листа в книге, ИмяЛиста — имя листа в книге.

Получение значения ячейки листа:

Значение=Лист.Cells(НомерСтроки,НомерКолонки).Value;

НомерСтроки, НомерКолонки — номер строки и номер колонки, на пересечении которых находится ячейка.

Важно: не забывайте поле выполнения нужных действий добавлять кодЭксель.Quit();, иначе запущенный процесс останется незавершенным и будет занимать память и процессор компьютера.

Вывод данных в Excel.

Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо

создать новую, и выбрать рабочий лист для вывода данных. Открытие существующей книги описано выше, а для создания новой книги нужно использовать следующий код:

Попытка
Эксель= СоздатьОбъект(«Excel.Application»);
Исключение

Сообщить(ОписаниеОшибки() + » Программа Exсel не установлена на данном компьютере!»);
Возврат;

КонецПопытки;
Книга=Эксель.WorkBooks.Add();

Так как при создании книги в Excel автоматически создаются листы (Сервис->Параметры->Общие->Листов в новой книге), то нужно лишь произвести выбор листа, с которым будет вестись работа:

Лист=Книга.WorkSheets(НомерЛиста);

либо добавить в книгу новый лист, если необходимо:
Лист=Книга.Sheets.Add();

Следующим шагом будет установка значения ячейки:
Лист.Cells(НомерСтроки,НомерКолонки).Value=Значение;

НомерСтроки, НомерКолонки — номер строки и номер колонки, на пересечении которых находится ячейка.

И в конце нужно произвести запись созданной книги:

Попытка
Книга.SaveAs(ПутьКФайлу);
Исключение

Сообщить(ОписаниеОшибки()+» Файл не сохранен!»);
Возврат;

КонецПопытки;

ПутьКФайлу — полный путь к файлу книги Excel (включая имя).

Важно: не забывайте, что в имени файлов не должно содержаться символов / : * ? » > < |.

Часто используемые методы для чтения/установки значений в Excel.

Эксель = СоздатьОбъект(«Excel.Application»); Получение доступа к приложению Excel.

Эксель.Visible = Видимость;

0 — Excel не виден, 1 — виден.

Книга = Эксель.WorkBooks.Add();

Создание новой книги (файла) Excel.

Книга.SaveAs(ИмяФайла);

Сохранение книги Excel.

Лист = Книга.WorkSheets.Add();

Добавление нового листа в книгу.

Книга = Эксель.WorkBooks.Open(ИмяФайла);

Открытие существующей книги (файла) Excel.

Лист = Книга.WorkSheets(НомерЛиста);

Установка листа в качестве рабочего с номером НомерЛиста.

Лист.Name = ИмяЛиста;

Задание рабочему листу имени ИмяЛиста

Лист.PageSetup.Zoom = Масштаб;

Задание параметра страницы «Масштаб» (от 10 до 400).

Лист.PageSetup.Orientation = Ориентация;

Ориентация: 1 — книжная, 2 — альбомная.

Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры);

Задание левой границы (в сантиметрах).

Лист.PageSetup.TopMargin =

Эксель.CentimetersToPoints(Сантиметры);

Задание верхней границы (в сантиметрах).

Лист.PageSetup.RightMargin =

Эксель.CentimetersToPoints(Сантиметры);

Задание правой границы (в сантиметрах).

Лист.PageSetup.BottomMargin =

Эксель.CentimetersToPoints(Сантиметры);

Задание нижней границы (в сантиметрах).

Лист.Columns(НомерКолонки).ColumnWidth = Ширина;

Задание ширины колонке.

Лист.Cells(НомерСтроки,НомерКолонки).Value = Значение;

Ввод данных в ячейку.

Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта;

Установка шрифта в ячейке.

Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта;

Установка размера шрифта в ячейке.

Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный;

1 — жирный шрифт, 0 — нормальный.

Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив;

1 — наклонный шрифт, 0 — нормальный.

Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline =

Подчеркнутый;

2 — подчеркнутый, 1 — нет.

Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat =

Формат;

Установка формата данных ячейки.

Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle =

ТипЛинии;

Установка рамок ячейки. 1 — тонкая сплошная.

Постоянный адрес статьи http://exp-1c.narod.ru/articles/articl01.htm

1С 8.х и Excel

Чтение данных из Excel

Доступ из 1С к Excel производится посредством OLE. Создание COM-объекта:

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

Теперь используя переменную Эксель можно управлять приложением Excel.

  • Внимание! Microsoft Excel должен быть установлен на компьютере!

Следующая команда откроет книгу:

Книга = Эксель.WorkBooks.Open(ПутьКФайлу);

Перед тем, как начать считывание данных, укажем лист книги, с которого будем считывать данные:

Лист = Книга.WorkSheets(НомерЛиста);

Нумерация листов книги начинается с 1. Общее количество листов можно получить, используя следующую команду:

КоличествоЛистов = Книга.Sheets.Count;

Лист можно выбрать по имени листа в книге:

Лист = Книга.WorkSheets(ИмяЛиста);

Имя листа в книге можно получить по номеру:

ИмяЛиста = Книга.Sheets(НомерЛиста).Name;

Итак, мы открыли книгу и выбрали лист, теперь посмотрим, сколько строк и колонок на выбранном листе:

ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;

Получим значения ячейки листа в строке НомерСтроки и в колонке НомерКолонки:

Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;

Ниже приведен отрывок кода, запустив который мы прочитаем все данные с первой страницы:

Эксель = СоздатьОбъект("Excel.Application");
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
Лист = Книга.WorkSheets(1);

ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;

для Строка = 1 по ВсегоСтрок цикл

для Колонка = 1 по ВсегоКолонок цикл
Значение = СокрЛП(Лист.Cells(Строка,Колонка).Value);
КонецЦикла;

КонецЦикла;

Где ПутьКФайлу — полный путь к файлу книги Excel (включая имя).

После выполнения действий необходимо закрыть книгу:

Эксель.Application.Quit();

Выгрузка данных в Excel

Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных.
Для создания новой книги можно использовать следующий код:

Попытка
Эксель = СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Книга = Эксель.WorkBooks.Add();

При создании книги автоматически создаются листы (по умолчанию 3). Нам остается только выбрать нужный:

Лист = Книга.WorkSheets(НомерЛиста);

Или добавить в книгу новый лист:

Лист = Книга.Sheets.Add();

Добавим в ячейку на листе значение:

Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;

Запишем книгу:

Попытка
Книга.SaveAs(ПутьКФайлу);
Исключение
Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
КонецПопытки;

Где ПутьКФайлу — полный путь к файлу книги Excel (включая имя).

После выполнения действий необходимо закрыть книгу:

Эксель.Application.Quit();

Часто используемые методы Excel

Эксель.Visible = Видимость; 0 — Excel не виден, 1 — виден.
Книга = Эксель.WorkBooks.Add(); Создание новой книги (файла) Excel.
Книга.SaveAs(ИмяФайла); Сохранение книги Excel.
Лист = Книга.WorkSheets.Add(); Добавление нового листа в книгу.
Книга = Эксель.WorkBooks.Open(ИмяФайла); Открытие существующей книги (файла) Excel.
Лист = Книга.WorkSheets(НомерЛиста); Установка листа в качестве рабочего с номером НомерЛиста.
Лист.Name = ИмяЛиста; Задание рабочему листу имени ИмяЛиста
Лист.PageSetup.Zoom = Масштаб; Задание параметра страницы «Масштаб» (от 10 до 400).
Лист.PageSetup.Orientation = Ориентация; Ориентация: 1 — книжная, 2 — альбомная.
Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры); Задание левой границы (в сантиметрах).
Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры); Задание верхней границы (в сантиметрах).
Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры); Задание правой границы (в сантиметрах).
Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры); Задание нижней границы (в сантиметрах).
Лист.Columns(НомерКолонки).ColumnWidth = Ширина; Задание ширины колонке.
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение; Ввод данных в ячейку.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта; Установка шрифта в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта; Установка размера шрифта в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный; 1 — жирный шрифт, 0 — нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив; 1 — наклонный шрифт, 0 — нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline = Подчеркнутый; 2 — подчеркнутый, 1 — нет.
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат; Установка формата данных ячейки.
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle = ТипЛинии; Установка рамок ячейки. 1 — тонкая сплошная.
Лист.Protect(); Установка защиты на лист
Лист.UnProtect(); Снятие защиты с листа
Лист.Cells(Строка, Столбец).Locked=0; Ячейка будет доступной (и после установки защиты на лист)

Хитрости Excel

Как выборочно разрешить / запретить редактирование ячеек листа

//Создаем объект EXCEL
Эксель = СоздатьОбъект("Excel.Application"); 
Книга = Эксель.WorkBooks.Open(ФайлВыгрузки); 
Лист =Книга.Worksheets("Список сотрудников"); // Выбор листа

     Книга.ActiveSheet.UnProtect();    //делаем шаблон незащищенным

// Заполняем лист

...................................

// Снимаем защиту с области ввода сумм

Для Перем = 1 По 10 Цикл
// Прописываем, какие ячейки будут доступными 
Книга.ActiveSheet.Cells(Перем, 2).Locked=0;
КонецЦикла;

Книга.ActiveSheet.Protect();    // ставим защиту на лист

Как осуществить поиск / замену значений ячеек на листе

//Выбираем область поиска - весь лист
ОбластьПоиска = Лист.Cells;

// Укажем начало листа
НачалоЛиста = Диапазон.Cells(1, 1);

// Ищем ячейку с текстом, указанным в переменной ТекстДляПоиска,
//укажем откуда искать - с начала листа
ОбластьПараметр = ОбластьПоиска.Find(ТекстДляПоиска, НачалоЛиста);

// Если нашли, заполняем значением из переменной Значение
Если ОбластьПараметр <> неопределено Тогда
ОбластьПараметр.Value = Значение;
КонецЕсли;

Замечание. Текст для замены лучше выделять, например, в угловые скобки, аналогично параметрам макета в 1С. Это улучшит наглядность, визуально отделит от рабочего текста.
Текст для поиска в этом случае будет выглядеть так:

ТекстДляПоиска = «<ИмяДляЗамены>»

Как скопировать / удалить строку

//Выбираем область поиска - весь лист
ОбластьПоиска = Лист.Cells;

// Найдем нужную нам ячейку
// Если не указываем откуда искать - то с текущей ячейки, это первая ячейка на листе
НайденнаяОбласть = ОбластьПоиска.Find("Текст для поиска");

// Выделяем всю строку
НайденнаяОбласть.EntireRow.Select();

// Копируем выделенное
НайденнаяОбласть.EntireRow.Copy();

// Вставляем (новая строка будет вставлена тут же)
НайденнаяОбласть.EntireRow.Insert();

// Теперь как удалить строку. Найдем область
НайденнаяОбласть = ОбластьПоиска.Find("Текст для поиска", НачалоЛиста);
НайденнаяОбласть.EntireRow.Delete();

Замечание. Приведенные выше примеры позволят, например, организвать работу с шаблонами на основании листов Excel.

————————
Взято отсюда: http://programna1c.narod.ru/docs/Excel/Excel1C8.html

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 15
Всего: 24

Вступление.

Многие знают, что Excel гораздо старше 1С. На мой взгляд, это очень успешный продукт, и нареканий о нем я не слышал. Excel прост и универсален. Он способен выполнять не только простые арифметические операции, но и сложные вычисления, построение графиков и т.п. Знаю примеры, когда организации до перехода на 1С вели часть бухгалтерии в Excel. Многие и сейчас параллельно используют две программы. В этой статье рассмотрим способы обмена данными между 1С и Excel.

Таблицы 1С и Excel.

Многие пользователи для удобства работы сохраняют таблицы 1С (печатные формы) в формате Excel (*.xls). После чего в полученном файле делают различные группировки, сортировки, вычисления и т.п. Связано это с тем, что в таблицах 1С нет такого огромного функционала как в таблицах Excel. Но в версии 1С 8.0 есть нововведения, делающих работу с таблицами более комфортной. 

На сайте 1С (www.1C.ru) есть полезная программка, которая дает возможность открывать таблицы 1С в Excel и сохранять лист Excel как таблицу 1С. Это пригодится в том случае, если таблицу 1С не сохранили в формате Excel, а на том компьютере, где нужно открыть эту таблицу не установлена 1С. Да и постоянно помнить о том, что сохранить таблицу 1С нужно в формате Excel, не будет необходимости. 

Полная информация о программе находится здесь.
Скачать программу можно здесь (архив zip 682 739 байт). 

Замечание: В Excel разделителем дробной части считается символ «,». Поэтому перед сохранением таблицы 1С в формате Excel замените в ней другой разделитель (например «.») на «,». Иначе в Excel с этими числами не удастся произвести вычисления, или они вообще не будут отображаться как числа. Например, в таблице 1С «15.2» отобразится в Excel как «15.фев».

Получение данных из Excel.

Доступ из 1С к Excel производится посредством OLE. Например, 

Код

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

позволит нам получить доступ через переменную «Эксель» к запущенному приложению Excel. А далее уже можно получить доступ к книге (файлу), листу и ячейке с данными. Далее примеры кода. 

Открытие книги (файла)

Код

Книга = Эксель.WorkBooks.Open(ПутьКФайлу);

 

ПутьКФайлу — полный путь к файлу книги Excel.
Выбор листа книги для работы с ним:

Код

Лист = Книга.WorkSheets(НомерЛиста);

 или

Код

Лист = Книга.WorkSheets(ИмяЛиста);

 

НомерЛиста — номер листа в книге, ИмяЛиста — имя листа в книге.
Получение значения ячейки листа:

Код

Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;

 

НомерСтрокиНомерКолонки — номер строки и номер колонки, на пересечении которых находится ячейка.
Важно: не забывайте поле выполнения нужных действий добавлять код Эксель.Quit(); , иначе запущенный процесс останется незавершенным и будет занимать память и процессор компьютера.

Вывод данных в Excel.

Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных. Открытие существующей книги описано выше, а для создания новой книги нужно использовать следующий код:

Код

Попытка
    Эксель = СоздатьОбъект("Excel.Application"); 
Исключение
    Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!"); 
    Возврат;
КонецПопытки; 
Книга = Эксель.WorkBooks.Add();

Так как при создании книги в Excel автоматически создаются листы (Сервис->Параметры->Общие->Листов в новой книге), то нужно лишь произвести выбор листа, с которым будет вестись работа:

Код

Лист = Книга.WorkSheets(НомерЛиста);

 либо добавить в книгу новый лист, если необходимо:

Код

Лист = Книга.Sheets.Add();

 Следующим шагом будет установка значения ячейки

Код

Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;

 

НомерСтрокиНомерКолонки — номер строки и номер колонки, на пересечении которых находится ячейка.
И в конце нужно произвести запись созданной книги:

Код

Попытка
    Книга.SaveAs(ПутьКФайлу); 
Исключение
    Сообщить(ОписаниеОшибки()+" Файл не сохранен!"); 
    Возврат;
КонецПопытки;

 

ПутьКФайлу — полный путь к файлу книги Excel (включая имя).
Важно: не забывайте, что в имени файлов не должно содержаться символов  / : * ? » > < |.

Часто используемые методы для чтения/установки значений в Excel.

Код

//Получение доступа к приложению Excel. 
Эксель = СоздатьОбъект("Excel.Application"); 

//0 - Excel не виден, 1 - виден. 
Эксель.Visible = Видимость;  

//Создание новой книги (файла) Excel.
Книга = Эксель.WorkBooks.Add();   

//Сохранение книги Excel.
Книга.SaveAs(ИмяФайла); 

 //Добавление нового листа в книгу.
Лист = Книга.WorkSheets.Add();   

//Открытие существующей книги (файла) Excel.
Книга = Эксель.WorkBooks.Open(ИмяФайла);   

//Установка листа в качестве рабочего с номером НомерЛиста.
Лист = Книга.WorkSheets(НомерЛиста);   

//Задание рабочему листу имени ИмяЛиста
Лист.Name = ИмяЛиста;  

//Задание параметра страницы "Масштаб" (от 10 до 400).
Лист.PageSetup.Zoom = Масштаб;   

//Ориентация: 1 - книжная, 2 - альбомная. 
Лист.PageSetup.Orientation = Ориентация; 

 //Задание левой границы (в сантиметрах). 
Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры);  

//Задание верхней границы (в сантиметрах). 
Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры);  

//Задание правой границы (в сантиметрах). 
Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры);  

//Задание нижней границы (в сантиметрах). 
Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры);  

//Задание ширины колонке.
Лист.Columns(НомерКолонки).ColumnWidth = Ширина;   

//Ввод данных в ячейку.
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение; 

//Установка шрифта в ячейке. 
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта; 

//Установка размера шрифта в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта;  

//1 - жирный шрифт, 0 - нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный; 

//1 - наклонный шрифт, 0 - нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив; 

//2 - подчеркнутый, 1 - нет.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline = Подчеркнутый; 

//Установка формата данных ячейки.
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат; 

//Установка рамок ячейки. 1 - тонкая сплошная.
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle = ТипЛинии;   

Статья взята отсюда:
http://exp-1c.narod.ru/articles/articl01.htm

Это сообщение отредактировал(а) Zero — 17.6.2007, 12:21

1С и Excel.

I. Вступление
II. Таблицы 1С и Excel.
III. Получение данных из Excel.
IV. Вывод данных в Excel.
V. Часто используемые методы для чтения/установки значений в Excel.

Вступление.

Многие знают, что Excel гораздо старше 1С. На мой взгляд,
это очень успешный продукт, и нареканий о нем я не слышал. Excel прост и
универсален. Он способен выполнять не только простые арифметические операции, но
и сложные вычисления, построение графиков и т.п. Знаю примеры, когда организации
до перехода на 1С вели часть бухгалтерии в Excel. Многие и сейчас параллельно
используют две программы. В этой статье рассмотрим способы обмена данными между
1С и Excel.

Таблицы 1С и Excel.

Многие пользователи для удобства работы сохраняют таблицы 1С (печатные формы)
в формате Excel (*.xls). После чего в полученном файле делают различные
группировки, сортировки, вычисления и т.п. Связано это с тем, что в таблицах 1С
нет такого огромного функционала как в таблицах Excel. Но в версии 1С 8.0 есть
нововведения, делающих работу с таблицами более комфортной.

На сайте 1С (www.1C.ru) есть полезная программка, которая дает
возможность открывать таблицы 1С в Excel и сохранять лист Excel как таблицу
1С. Это пригодится в том случае, если таблицу 1С не сохранили в формате Excel, а на
том компьютере, где нужно открыть эту таблицу не установлена 1С. Да и
постоянно помнить о том, что сохранить таблицу 1С нужно в формате Excel, не будет
необходимости.

Полная информация о программе находится
здесь.
Скачать программу можно
здесь (архив zip 682 739 байт).

Замечание: В Excel разделителем дробной части считается символ «,».
Поэтому перед сохранением таблицы 1С в формате Excel замените в ней другой разделитель
(например «.») на «,». Иначе в Excel с этими числами не удастся произвести
вычисления, или они вообще не будут отображаться как числа. Например, в таблице
1С «15.2» отобразится в Excel как «15.фев».

Получение данных из Excel.

Доступ из 1С к Excel производится посредством OLE. Например, код
Попытка

Эксель
= СоздатьОбъект(«Excel.Application»);

Исключение

Сообщить(ОписаниеОшибки() +
» Программа Exсel не установлена на данном компьютере!»);

Возврат;
КонецПопытки;


позволит нам получить
доступ через переменную «Эксель» к запущенному приложению Excel. А далее уже
можно получить доступ к книге (файлу), листу и ячейке с данными. Далее примеры кода.

Открытие книги (файла):
Книга
=
Эксель.WorkBooks.Open(ПутьКФайлу);

ПутьКФайлу — полный путь к файлу книги Excel.

Выбор листа книги для работы с ним:
Лист
=
Книга.WorkSheets(НомерЛиста);

или
Лист
=
Книга.WorkSheets(ИмяЛиста);

НомерЛиста — номер листа в книге, ИмяЛиста — имя листа в книге.

Получение значения ячейки листа:
Значение
=
Лист.Cells(НомерСтроки,
НомерКолонки).Value;

НомерСтроки, НомерКолонки — номер строки и номер
колонки, на пересечении которых находится ячейка.

Важно: не забывайте поле выполнения
нужных действий добавлять код
Эксель.Quit();
, иначе запущенный процесс останется незавершенным и будет занимать память и процессор компьютера.

Вывод данных в Excel.

Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо
создать новую, и выбрать рабочий лист для вывода данных. Открытие существующей книги описано выше,
а для создания новой книги нужно использовать следующий код:
Попытка

Эксель
= СоздатьОбъект(«Excel.Application»);

Исключение

Сообщить(ОписаниеОшибки() +
» Программа Exсel не установлена на данном компьютере!»);

Возврат;
КонецПопытки;


Книга
=
Эксель.WorkBooks.Add();

Так как при создании книги в Excel автоматически создаются листы (Сервис->Параметры->Общие->Листов в новой книге),
то нужно лишь произвести выбор листа, с которым будет вестись работа:
Лист
=
Книга.WorkSheets(НомерЛиста);

либо добавить в книгу новый лист, если необходимо:
Лист
=
Книга.Sheets.Add();

Следующим шагом будет установка значения ячейки:
Лист.Cells(НомерСтроки,
НомерКолонки).Value
=
Значение;

НомерСтроки, НомерКолонки — номер строки и номер
колонки, на пересечении которых находится ячейка.
И в конце нужно произвести запись созданной книги:
Попытка

Книга.SaveAs(ПутьКФайлу);

Исключение
Сообщить(ОписаниеОшибки()
+» Файл не сохранен!»);

Возврат;
КонецПопытки;


ПутьКФайлу — полный путь к файлу книги Excel (включая имя).
Важно: не забывайте, что в имени файлов не должно содержаться символов / : * ? » > < |.

Часто используемые методы для чтения/установки значений в Excel.

Эксель
= СоздатьОбъект(«Excel.Application»);
Получение доступа к приложению Excel.
Эксель.Visible
=
Видимость;
0 — Excel не виден, 1 — виден.
Книга
=
Эксель.WorkBooks.Add();
Создание новой книги (файла) Excel.
Книга.SaveAs(ИмяФайла); Сохранение книги Excel.
Лист
=
Книга.WorkSheets.Add();
Добавление нового листа в книгу.
Книга
=
Эксель.WorkBooks.Open(ИмяФайла);
Открытие существующей книги (файла) Excel.
Лист
=
Книга.WorkSheets(НомерЛиста);
Установка листа в качестве рабочего с номером НомерЛиста.
Лист.Name
=
ИмяЛиста;
Задание рабочему листу имени ИмяЛиста
Лист.PageSetup.Zoom
=
Масштаб;
Задание параметра страницы «Масштаб» (от 10 до 400).
Лист.PageSetup.Orientation
=
Ориентация;
Ориентация: 1 — книжная, 2 — альбомная.
Лист.PageSetup.LeftMargin
=
Эксель.CentimetersToPoints(Сантиметры);
Задание левой границы (в сантиметрах).
Лист.PageSetup.TopMargin
=
Эксель.CentimetersToPoints(Сантиметры);
Задание верхней границы (в сантиметрах).
Лист.PageSetup.RightMargin
=
Эксель.CentimetersToPoints(Сантиметры);
Задание правой границы (в сантиметрах).
Лист.PageSetup.BottomMargin
=
Эксель.CentimetersToPoints(Сантиметры);
Задание нижней границы (в сантиметрах).
Лист.Columns(НомерКолонки).ColumnWidth
=
Ширина;
Задание ширины колонке.
Лист.Cells(НомерСтроки,
НомерКолонки).Value
=
Значение;
Ввод данных в ячейку.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name
=
ИмяШрифта;
Установка шрифта в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size
=
РазмерШрифта;
Установка размера шрифта в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold
=
Жирный;
1 — жирный шрифт, 0 — нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic
=
Курсив;
1 — наклонный шрифт, 0 — нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline
=
Подчеркнутый;
2 — подчеркнутый, 1 — нет.
Лист.Cells(НомерСтроки,
НомерКолонки).NumberFormat
=
Формат;
Установка формата данных ячейки.
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle
=
ТипЛинии;
Установка рамок ячейки. 1 — тонкая сплошная.

Постоянный адрес статьи http://exp-1c.narod.ru/articles/articl01.htm

Весьма частая задача, с которой сталкивается 1С разработчик – это чтение файлов Excel и загрузка их в 1С. Есть как минимум два способа прочитать файл Excel – средствами платформы 1С, или используя COM-объект приложения MS Excel. В статье рассматривается чтение файлов xls, xlsx при помощи табличного документа.

Содержание

Общая информация

В платформе 1С 8 существует объект ТабличныйДокумент, который позволяет формировать и выводить на экран печатные формы в табличном виде. Но у табличного документа есть еще одно применение – чтение данных из табличных файлов. Поддерживаются форматы xls, xlsx и ods. Т.е. можно загружать табличные файлы, созданные в пакете MS Office или OpenOffice Calc.

Значения типа Число или Дата, содержащиеся в ячейках исходного табличного файла, можно считать двумя способами – как значение, либо как текст. Рассмотрим пример: пусть в ячейке содержится число 123,456, и установлен формат с округлением до целого числа; в этом случае отображаться будет текст “123”, а значение будет храниться 123,456

  1. Если прочитать с указанием способа чтения как “Значение”, в табличный документ 1С будет прочитано исходное значение 123,456
  2. Если прочитать с указанием способа чтения как “Текст”, значение будет потеряно, и в табличный документ прочитается текст “123”

Использование объекта ВременноеХранилище

Вспомогательные процедуры — диалог выбора файла

Следующий код не является обязательным для решения задачи – путь к исходному файлу можно указать в коде, ввести вручную, скопировать из адресной строки ОС или прочитать из БД – вариантов очень много. Мы же рассмотрим пример, когда пользователь сам указывает файл на клиентском компьютере, и путь к этому файлу помещается в реквизит. В примере будем использовать реквизит формы ПутьКФайлу

Чтение файла Excel. Диалог выбора файла

Создадим обработчик события НачалоВыбора:

&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ВыбратьФайлНаКлиенте();
	
КонецПроцедуры

Для того чтобы код был универсальным, и работал в случае отказа от модальных синхронных методов, нам понадобится создать асинхронную процедуру ВыбратьФайлНаКлиенте(). В ней мы создаем диалог выбора для открытия файла, указываем фильтр с нужными форматами – xls и xlsx, а также отключаем множественный выбор файлов. Перед методом ВыбратьАсинх добавляем ключевое слово Ждать, с тем чтобы дальнейший код дождался возвращаемого значения.

&НаКлиенте
Асинх Процедура ВыбратьФайлНаКлиенте()
	
	Перем Диалог;
	
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx";
	Диалог.ИндексФильтра = 0;
	Диалог.ПредварительныйПросмотр = Ложь;
	Диалог.МножественныйВыбор = Ложь; 
	РезультатВыбора = Ждать Диалог.ВыбратьАсинх();
	Если РезультатВыбора <> Неопределено Тогда
		ПутьКФайлу = РезультатВыбора[0];
	КонецЕсли;
	
КонецПроцедуры

Двоичные данные во временное хранилище

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

Клиентский код:

  1. проверяем, указан ли путь к файлу. Если не указан – прекращаем выполнение
  2. Получаем двоичные данные из файла по указанному пути
  3. Помещаем эти двоичные данные во временное хранилище
  4. Далее передаем на сервер адрес этого временного хранилища
&НаКлиенте
Процедура ДвоичныеДанныеВоВременноеХранилище(Команда)

	Если Не ЗначениеЗаполнено(ПутьКФайлу) Тогда
		Возврат;
	КонецЕсли;
	
	ДД = Новый ДвоичныеДанные(ПутьКФайлу);
	АдресВХ = ПоместитьВоВременноеХранилище(ДД);
	ПрочитатьИзВХНаСервере(АдресВХ);
	
КонецПроцедуры

Серверный код:

  1. Создаем временный файл с нужным расширением (в примере – xlsx)
  2. Получаем двоичные данные из временного хранилища
  3. Записываем во временный файл
  4. Определяем вариант чтения файла – читать значения табличного документа как текст, или как значения
  5. Далее используем метод Прочитать, и считываем из временного файла данные в табличный документ

Метод Прочитать лучше делать в попытке, и отдельно продумать и написать код обработки исключения. для упрощения примера мы это исключение никак не обрабатываем. В случае, если передан поврежденный файл, или его невозможно прочитать по какой-то другой причине, он просто не считается в табличный документ.

&НаСервере
Процедура ПрочитатьИзВХНаСервере(АдресВХ, Режим = "Значение")
	
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
	
	ДД = ПолучитьИзВременногоХранилища(АдресВХ);
	ДД.Записать(ИмяВременногоФайла);

	Если Режим = "Текст" Тогда
		СпособЧтения = СпособЧтенияЗначенийТабличногоДокумента.Текст;
	Иначе
		СпособЧтения = СпособЧтенияЗначенийТабличногоДокумента.Значение;
	КонецЕсли;

	Попытка
		ТабДок.Прочитать(ИмяВременногоФайла, СпособЧтения);
	Исключение
	КонецПопытки;	
	
КонецПроцедуры

Рассмотренный пример является достаточно универсальным – процедуру ПрочитатьИзВХНаСервере() можно использовать с любыми двоичными данными, помещенными во временное хранилище. Это могут быть двоичные данные, полученные с веб-сервиса, считанные из базы данных, полученные из макета, созданного в конфигураторе – код от этого не изменится.

Помещение файла на сервер в 1С

Более простой, но менее универсальный способ, предназначенный исключительно для передачи файла с клиента на сервер – это использование метода НачатьПомещениеФайлаНаСервер. В платформе предусмотрено несколько методов для помещения файлов – как одиночных, так и нескольких одновременно. Эти методы делятся на синхронные и асинхронные. Начиная с версии 8.3.18 появились методы, использующие ключевые слова Асинх и Ждать. Аналогичный метод мы рассмотрели при работе с диалогом. Далее разберем “классический” вариант с обработкой оповещения. 

Логика кода следующая:

  1. Создаем описание оповещения и указываем в нем процедуру, которая будет вызвана после окончания помещения файла на сервер
  2. Указываем параметры диалога выбора файла и добавляем фильтр
  3. Вызываем помещение файла на сервер
  4. После того как файл помещен во временное хранилище, используем ту же процедуру, которую мы реализовали в первом примере – ПрочитатьИзВХНаСервере. В этом примере мы для разнообразия используем способ чтения значений как “Текст”.
&НаКлиенте
Процедура ПередачаФайла(Команда)
	
ОбработкаОкончанияПомещения = Новый ОписаниеОповещения("ОбработчикОкончанияПомещения", ЭтотОбъект);
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
ПараметрыДиалога.Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx";
НачатьПомещениеФайлаНаСервер(ОбработкаОкончанияПомещения, , , АдресВХ, ПараметрыДиалога, ЭтотОбъект.УникальныйИдентификатор);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОкончанияПомещения(ОписаниеПомещенногоФайла, ДополнительныеПараметры) Экспорт
	
АдресФайла = ОписаниеПомещенногоФайла.Адрес;
ПрочитатьИзВХНаСервере(АдресФайла, "Текст");
	
КонецПроцедуры

Использование потока для чтения файла

В случае, если нам нужно просто передать файл с клиента на сервер для сохранения в базу данных, либо мы хотим прочитать файл в формате ods(Open Documents Spreadsheet) или mxl(встроенный формат табличных документов 1С), мы можем воспользоваться еще одним способом – с использованием потоков данных.

В этом случае нам не понадобится создавать временный файл и следить за его корректным удалением. Код будет очень похож на прерыдущий пример. Мы также выбираем файл с использованием метода НачатьПомещениеФайлаНаСервер, но указываем другой фильтр. А в обработчике оповещения вызываем серверную процедуру ПрочитатьВПоток. В методе Прочитать() нам нужно явным образом указать тип файла табличного документа, который мы считываем.

&НаКлиенте
Процедура ПрочитатьЧерезПоток(Команда)

ОбработкаОкончанияПомещения = Новый ОписаниеОповещения("ОбработчикОкончанияПомещенияПоток", ЭтотОбъект);
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
ПараметрыДиалога.Фильтр = "файлы ODS или MXL|*.ods;*.mxl";

НачатьПомещениеФайлаНаСервер(ОбработкаОкончанияПомещения, , , АдресВХ, ПараметрыДиалога, ЭтотОбъект.УникальныйИдентификатор);

КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОкончанияПомещенияПоток(ОписаниеПомещенногоФайла, ДополнительныеПараметры) Экспорт

АдресФайла = ОписаниеПомещенногоФайла.Адрес;
ПрочитатьВПоток(АдресФайла);

КонецПроцедуры

&НаСервере
Процедура ПрочитатьВПоток(АдресФайла)

ДД = ПолучитьИзВременногоХранилища(АдресФайла);
Поток = ДД.ОткрытьПотокДляЧтения();
ТабДок.Прочитать(Поток,,ТипФайлаТабличногоДокумента.ODS);
Поток.Закрыть();

КонецПроцедуры

Надеюсь, рассмотренные примеры помогут вам справиться с задачей передать файл с клиента на сервере и прочитать файл Excel в 1С.

Like this post? Please share to your friends:
  • 1с excel как внешний источник данных 1с
  • 1с excel в табличный документ без excel
  • 1e word skills adjective endings i can use different adjective endings
  • 1c excel выгрузка как есть
  • 19х электронные таблицы excel ответы на все задания