Страницы: 1
RSS
Связь столбцов одного листа/книги со столбцами другого листа/книги.
 

Здравствуйте, дорогие формучане. Помогите пожалуйста советом.

В одном файле есть заполненная информация о товарах и их характеристиках. Эту информацию хочется автоматически переносить в другой файл (шаблон товаров). Но, во-первых в этих фалах не равное количество характеристик (столбцов), во-вторых название столбцов могут отличаться. Вопрос: «можно ли как-то создать связь со столбцами по типу диаграмм в Power Pivot, но без участия сводных таблиц?». Дело в том что периодически придётся менять связи между столбцами, поэтому функциями и формулами- не вариант, долго. Какой инструмент можно в этом случае использовать, есть ли такай в Ексель? Может тогда стоит прибегнуть к помощи SQL, если конечно там имеется такая возможность?

Заранее спасибо. Для наглядности прикрепляю файлы, о которых шла речь.

 
Можно попробовать в SQL через mapping-таблицу.
Код
CREATE TABLE mapping_table (
    source_column VARCHAR(255),
    target_column VARCHAR(255)
);

INSERT INTO mapping_table (source_column, target_column)
VALUES
    ('column1_source', 'column1_target'),
    ('column2_source', 'column2_target'),
    -- Добавьте все необходимые соответствия
    ('columnN_source', 'columnN_target');
Теперь мы можем использовать эту mapping-таблицу для копирования данных из source_table в target_table. Юзаем динамический SQL, чтобы построить запрос на основе mapping-таблицы.
Код
-- Получаем все соответствия из mapping таблицы
SELECT source_column, target_column
FROM mapping_table;

-- Пример динамического SQL (в реальности это будет цикл или процедура)
DECLARE @sql NVARCHAR(MAX) = '';

SELECT @sql += 'INSERT INTO target_table (' + target_column + ') SELECT ' + source_column + ' FROM source_table; '
FROM mapping_table;

-- Выполняем запрос
EXEC sp_executesql @sql;
Используя SQLite и Питон, автоматизируем процесс:
Код
import sqlite3

# Подключаемся к базе данных
conn = sqlite3.connect('your_database.db')
cursor = conn.cursor()

# Получаем все соответствия из mapping таблицы
cursor.execute("SELECT source_column, target_column FROM mapping_table")
mappings = cursor.fetchall()

# Генерируем и выполняем запросы
for source, target in mappings:
    query = f"INSERT INTO target_table ({target}) SELECT {source} FROM source_table"
    cursor.execute(query)

# Сохраняем изменения
conn.commit()

# Закрываем соединение
conn.close()

Не забываем про установку библиотек pandas для чтения данных и sqlite3 для работы с базой данных.
One tap - one kill
Страницы: 1
Читают тему
Наверх