logo

Перенос данных из файла Excel в блок

В примере рассмотрим получение данных из файла *.xlsx и запись их в блок с помощью сценария.
В качестве примера возьмем файл со средней успеваемостью учеников (во вложении). В контекст процесса добавим блок Блок с полями Фамилия - тип Строка, Средний балл - тип Дробное число и переменную Файл тип Файл.
Для работы сценария необходимо подключить сборку:
Aspose.Cells
Пространство имен:
using Aspose.Cells;
using EleWise.ELMA.Model.Common;
using EleWise.ELMA.Model.Entities;
using EleWise.ELMA.Model.Entities.ProcessContext;
using EleWise.ELMA.Model.Managers;
using EleWise.ELMA.Model.Types.Settings;
using EleWise.ELMA.Model.Services;
Текст сценария:
int StartRow=1; //номер строки Excel файла, начиная с которой нужно записывать данные (нумерация начинается с 0)
int EndRow=10;//максимально возможное количество строк в файле
var workbook = new Workbook(context.Fayl.ContentFilePath); //загружаем файл из переменной
var worksheet = workbook.Worksheets[0]; //номер листа, с которого требуется брать данные
for (int row = StartRow; row <= EndRow; row++) {
	if(worksheet.Cells[row, 0].StringValue != "" && worksheet.Cells[row, 1].StringValue != "") //если данные не пустые
	{
		var newRow = InterfaceActivator.Create<P_RazborDokumenta_Blok>(); //создаем новый элемент блока, указать имя класса блока
				newRow.Familiya = worksheet.Cells[row, 0].StringValue; //записываем фамилию
				newRow.SredniyBall= worksheet.Cells[row, 1].DoubleValue; //записываем средний балл
		context.Blok.Add(newRow); //добавляем элемент в блок
	}
}

Перенос данных из двумерной таблицы Excel

Рассмотрим получение данных из файла *.xlsx и запись их в блок в блоке с помощью сценария.

В качестве примера возьмем файл Plan (во вложении). В контекст процесса добавим переменную Файл и блок Блок со строковым полем Номенклатура из 1С и блоком Информация по номенклатуре. В блок Информация по номенклатуре добавим поля Дата, Смена, План и Оборудование.

Текст сценария:

var workbook = new Workbook(context.DokumentExcel.CurrentVersion.File.ContentFilePath); //загружаем файл из переменной
var worksheet = workbook.Worksheets["План"]; //ищем лист по названию
int StartColumn = 5; //номер столбца Excel файла, начиная с которой нужно записывать данные (нумерация начинается с 0)
int EndColumn = worksheet.Cells.MaxColumn; //максимально возможное количество столбцов в файле 
int StartRow=5; //номер строки Excel файла, начиная с которой нужно записывать данные (нумерация начинается с 0)
int EndRow=worksheet.Cells.MaxRow;//максимально возможное количество строк в файле
var datetimelist = new List<DateTime>(); // создаем лист, который будет хранить даты
for (int column = StartColumn; column <= EndColumn; column += 2) // проходим циклом по каждому столбцу
{
	if (worksheet.Cells[0, column].StringValue != "") //если данные не пустые
	{
		datetimelist.Add(worksheet.Cells[0, column].DateTimeValue); // добавляем дату в созданный выше лист
	}
	else ;
}
int count = datetimelist.Count(); // считаем количество дат
for (int row = StartRow; row <= EndRow; row +=3) // проходим циклом по строкам
{
	if(worksheet.Cells[row, 1].StringValue != "") //если данные не пустые
	{
		var newrow = InterfaceActivator.Create<InformaciyaPoNomenklature>(); // создаем элемент блока "Информация по Номенклатуре"
		for (int i = 0; i < count; i++) // проходим циклом по столбцам
		{
			int col = 5 + i * 2; // получаем номер столбца со сменой "День"
			int colnight = col + 1; // получаем номер столбца со сменой "Ночь"
			var data = worksheet.Cells[0, col].DateTimeValue; // записываем дату
			if (worksheet.Cells[row, col].StringValue != "0" && !String.IsNullOrEmpty(worksheet.Cells[row, col].StringValue)) // если план на день не null и не 0
			{
				var newfindrowinfo = InterfaceActivator.Create<InformaciyaPoNomenklature_Plan>(); // создаем элемент блока "План"
				newfindrowinfo.Data = data; // записываем дату
				newfindrowinfo.Smena = new DropDownItem(worksheet.Cells[2, col].StringValue); // записываем смену
				newfindrowinfo.Plan = Convert.ToDouble(worksheet.Cells[row, col].Value); // записываем план
				newfindrowinfo.Oborudovanie = worksheet.Cells[row, 0].StringValue; // записываем оборудование
				newfindrowinfo.Save(); // сохраняем
				newrow.Add(newfindrowinfo); // добавляем элемент блока в блок
			}
			if (worksheet.Cells[row, colnight].StringValue != "0" && !String.IsNullOrEmpty(worksheet.Cells[row, colnight].StringValue)) // если план на ночь не null и не 0
			{
				var newfindrowinfo = InterfaceActivator.Create<InformaciyaPoNomenklature_Plan>(); // создаем элемент блока "План"
				newfindrowinfo.Data = data; // записываем дату
				newfindrowinfo.Smena = new DropDownItem(worksheet.Cells[2, col].StringValue); // записываем смену
				newfindrowinfo.Oborudovanie = worksheet.Cells[row, 0].StringValue; // записываем оборудование
				newfindrowinfo.Plan = Convert.ToDouble(worksheet.Cells[row, colnight].Value); // записываем план
				newfindrowinfo.Save(); // сохраняем
				newrow.Add(newfindrowinfo); // добавляем элемент блока в блок
			}
		}
		context.InformaciyaPoNomenklature.Add(newrow); // добавляем строку в блок
	}
	else
	{
		Logger.Log.Error("файл пуст");
	}
}
После выполнения импорта получаем заполненный блок:

Прикрепленные файлы