logo

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

В примере рассмотрим получение данных из файла *.xlsx и запись их в блок с помощью сценария.
В качестве примера возьмем файл со средней успеваемостью учеников (во вложении). В контекст процесса добавим блок Блок с полями Фамилия - тип Строка, Средний балл - тип Дробное число и переменную Файл тип Файл.
Для работы сценария необходимо подключить сборку:
Aspose.Cells
Пространство имен:
1
2
3
4
5
6
7
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;
Текст сценария:
1
2
3
4
5
6
7
8
9
10
11
12
13
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С и блоком Информация по номенклатуре. В блок Информация по номенклатуре добавим поля Дата, Смена, План и Оборудование.

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

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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("файл пуст");
    }
}
После выполнения импорта получаем заполненный блок:

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