Получить столбцы в таблице через Epplus

MaxLucky

Client
Регистрация
13.08.2017
Сообщения
165
Благодарностей
13
Баллы
18
Помогите пожалуйста в написании сниппета для того чтобы брать из таблицы столбцы. Аналог действия (прикрепил в комментарии). Библиотеку Epplus решил использовать, так как необходимо получать столбцы с разных листов одной таблицы
 

Вложения

djaga

Client
Регистрация
26.04.2020
Сообщения
505
Благодарностей
1 052
Баллы
93
Помогите пожалуйста в написании сниппета для того чтобы брать из таблицы столбцы. Аналог действия (прикрепил в комментарии). Библиотеку Epplus решил использовать, так как необходимо получать столбцы с разных листов одной таблицы
Привет.)

Немного даже улучшил, поиск будет не по номеру столбца, а по имени в первой строке.
То есть создаете переменную searchColumnName пишите туда имя столбца как у вас в таблице в первой строчке.
Обязать обратите на пример шаблона.
Взять столбец из таблицы в список:
var tb = project.Tables["Table"]; // Table заменить на имя таблицы
string searchColumnName = project.Variables["searchColumnName"].Value; // имя столбца для поиска из переменной

var resList = new List<string>();
for (int col = 0; col < tb.ColCount; col++)
{
    if (!tb.GetCell(col, 0).Contains(searchColumnName)) continue;

    for (int row = 1; row < tb.RowCount; row++)
    {
        string cell = tb.GetCell(col, row);
        resList.Add(cell);
    }
}

project.Lists["nameList"].AddRange(resList); // nameList заменить на свой
upd: Если нужно решение принципиально по номеру столбца, напишите. С удовольствием покажу.)
upd1: Чтобы избежать вопросы про EPPlus. EPPlus вшита в ZennoPoster и используется через project.Tables["Table"]. .
Для таких простых задач хватит этой версии (той что используется в ZP).

Приложил ↓ шаблон для тестов
 

Вложения

Последнее редактирование:

MaxLucky

Client
Регистрация
13.08.2017
Сообщения
165
Благодарностей
13
Баллы
18
Привет.)

Немного даже улучшил, поиск будет не по номеру столбца, а по имени в первой строке.
То есть создаете переменную searchColumnName пишите туда имя столбца как у вас в таблице в первой строчке.
Обязать обратите на пример шаблона.
Взять столбец из таблицы в список:
var tb = project.Tables["Table"]; // Table заменить на имя таблицы
string searchColumnName = project.Variables["searchColumnName"].Value; // имя столбца для поиска из переменной

var resList = new List<string>();
for (int col = 0; col < tb.ColCount; col++)
{
    if (!tb.GetCell(col, 0).Contains(searchColumnName)) continue;

    for (int row = 1; row < tb.RowCount; row++)
    {
        string cell = tb.GetCell(col, row);
        resList.Add(cell);
    }
}

project.Lists["nameList"].AddRange(resList); // nameList заменить на свой
upd: Если нужно решение принципиально по номеру столбца, напишите. С удовольствием покажу.)
upd1: Чтобы избежать вопросы про EPPlus. EPPlus вшита в ZennoPoster и используется через project.Tables["Table"]. .
Для таких простых задач хватит этой версии (той что используется в ZP).

Приложил ↓ шаблон для тестов
По первому листу ищет отлично. Однако основной вопрос, в том, как искать по другим листам в этой же таблице?
 
  • Спасибо
Реакции: Sho

djaga

Client
Регистрация
26.04.2020
Сообщения
505
Благодарностей
1 052
Баллы
93
По первому листу ищет отлично. Однако основной вопрос, в том, как искать по другим листам в этой же таблице?
Советую делать консольное приложение для таких дел, так как у меня лично не получалось скомпилировать с зенкой нормально.
Только с интегрированным проектом VS22.

Using:
using OfficeOpenXml; // в VS
Взять столбец из таблицы в список с используванием EPPlus:
ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;
string path = project.Variables["TablePath"].Value; // путь из переменной
ExcelPackage table = new ExcelPackage(new FileInfo(path));
ExcelRange tb = table.Workbook.Worksheets[0].Cells;                    // первый лист в книге
string searchColumnName = project.Variables["searchColumnName"].Value; // имя столбца для поиска
int maxCol = tb.End.Column;
int maxRow = tb.End.Row;

var resList = new List<string>();
for (int col = 1; col < maxCol; col++)
{
    if (!tb[1, col].Text.Contains(searchColumnName)) continue;

    for (int row = 2; row < maxRow; row++)
    {
        if (tb[row, col].Text == string.Empty) continue;
        string cell = tb[row, col].Text;
        resList.Add(cell);
    }
}
project.Lists["nameList"].AddRange(resList); // nameList заменить на свой
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)