Перенос данных из файла 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("файл пуст"); } }
После выполнения импорта получаем заполненный блок: