Excel в YML, примеры кода конвертера, парсера

PHP пример

Для преобразования данных из формата Excel в формат Яндекс.Маркет (YML) на PHP, вы можете использовать библиотеку для работы с XML и соответствующие функции для чтения данных из Excel. В данном примере используется библиотека PHPExcel для чтения данных из Excel и создания YML-файла. Обратите внимание, что PHPExcel более не развивается, и его использование рекомендуется заменить на PHPSpreadsheet.

Установите PHPExcel:
composer require phpoffice/phpexcel
Создайте файл excel_to_yml.php с следующим кодом:

<?php

require 'vendor/autoload.php';

use PHPExcel_IOFactory;

function excelToYML($excelFile)
{
    // Имя файла YML
    $ymlFile = 'output.yml';

    // Создаем новый объект PHPExcel
    $objPHPExcel = PHPExcel_IOFactory::load($excelFile);

    // Получаем активный лист
    $sheet = $objPHPExcel->getActiveSheet();

    // Открываем файл для записи
    $yml = fopen($ymlFile, 'w');

    // Начинаем запись в YML
    fwrite($yml, '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL);
    fwrite($yml, '<!DOCTYPE yml_catalog SYSTEM "shops.dtd">' . PHP_EOL);
    fwrite($yml, '<yml_catalog date="' . date('Y-m-d H:i') . '">' . PHP_EOL);
    fwrite($yml, '  <shop>' . PHP_EOL);

    // Пример: обработка каждой строки из Excel
    foreach ($sheet->getRowIterator() as $row) {
        // Получаем ячейки текущей строки
        $cellIterator = $row->getCellIterator();

        // Пример: извлечение данных из каждой ячейки
        $data = [];
        foreach ($cellIterator as $cell) {
            $data[] = $cell->getValue();
        }

        // Пример: создание YML-тега для каждой строки
        $ymlString = '    <offer>' . PHP_EOL;
        $ymlString .= '      <id>' . $data[0] . '</id>' . PHP_EOL;
        $ymlString .= '      <name>' . $data[1] . '</name>' . PHP_EOL;
        // Добавьте другие теги по необходимости
        $ymlString .= '    </offer>' . PHP_EOL;

        // Записываем YML-тег в файл
        fwrite($yml, $ymlString);
    }

    // Завершаем запись в YML
    fwrite($yml, '  </shop>' . PHP_EOL);
    fwrite($yml, '</yml_catalog>' . PHP_EOL);

    // Закрываем файл
    fclose($yml);

    echo "Conversion completed. YML file created: $ymlFile\n";
}

// Пример вызова функции
excelToYML('your_excel_file.xlsx');

Убедитесь, что ваш файл Excel (например, your_excel_file.xlsx) содержит данные, которые вы хотите преобразовать в формат YML. Код выше создаст файл output.yml с соответствующим форматом.

Примечание: В приведенном выше коде предполагается, что каждая строка в файле Excel представляет собой отдельный товар, и вы можете настроить код в соответствии с вашей структурой данных и требованиями YML.

Python пример

Для преобразования данных из формата Excel в формат Яндекс.Маркет (YML) на Python, вы можете использовать библиотеку openpyxl для чтения данных из Excel и создания YML-файла. Для упрощения создания XML-структуры, вы также можете использовать библиотеку xml.etree.ElementTree.

Установите библиотеки:
bash

pip install openpyxl
Создайте файл excel_to_yml.py с следующим кодом:

import openpyxl
import xml.etree.ElementTree as ET
from xml.dom import minidom

def excel_to_yml(excel_file):
    # Создаем объект рабочей книги из Excel файла
    workbook = openpyxl.load_workbook(excel_file)
    
    # Выбираем активный лист
    sheet = workbook.active
    
    # Создаем корневой элемент YML
    yml = ET.Element('yml_catalog', date='2023-11-16')
    shop = ET.SubElement(yml, 'shop')
    
    # Пример: обработка каждой строки из Excel
    for row in sheet.iter_rows(min_row=2, values_only=True):  # Пропускаем заголовок
        # Пример: извлечение данных из каждой ячейки
        product_id, product_name, product_price = row[:3]  # Предполагаем, что у вас есть три столбца: ID, название, цена

        # Пример: создание YML-тега для каждой строки
        offer = ET.SubElement(shop, 'offer')
        ET.SubElement(offer, 'id').text = str(product_id)
        ET.SubElement(offer, 'name').text = str(product_name)
        ET.SubElement(offer, 'price').text = str(product_price)
        # Добавьте другие теги по необходимости

    # Создаем XML-дерево
    xml_tree = ET.ElementTree(yml)
    
    # Форматируем XML для читаемости
    xml_string = minidom.parseString(ET.tostring(yml)).toprettyxml(indent="  ")
    
    # Записываем XML в файл YML
    with open('output.yml', 'w', encoding='utf-8') as yml_file:
        yml_file.write(xml_string)

    print("Conversion completed. YML file created: output.yml")

# Пример вызова функции с указанием вашего Excel файла
excel_to_yml('your_excel_file.xlsx')

Убедитесь, что ваш файл Excel (например, your_excel_file.xlsx) содержит данные, которые вы хотите преобразовать в формат YML. Код выше создаст файл output.yml с соответствующим форматом.

Примечание: Предполагается, что у вас есть три столбца в файле Excel: ID, название и цена. Вы можете настроить код в соответствии с вашей структурой данных и требованиями YML.

Typescript/js пример

Для преобразования данных из формата Excel в формат Яндекс.Маркет (YML) на TypeScript/JavaScript, вы можете использовать библиотеку для работы с XML (например, xmlbuilder) и библиотеку для чтения данных из Excel (например, xlsx).

Установите необходимые библиотеки: bash

npm install xmlbuilder xlsx
Создайте файл excel_to_yml.js с следующим кодом:

const fs = require('fs');
const xlsx = require('xlsx');
const xmlbuilder = require('xmlbuilder');

function excelToYML(excelFile) {
  // Читаем данные из Excel файла
  const workbook = xlsx.readFile(excelFile);
  const sheet = workbook.Sheets[workbook.SheetNames[0]];

  // Создаем корневой элемент YML
  const yml = xmlbuilder.create('yml_catalog', { encoding: 'utf-8' })
    .att('date', '2023-11-16')
    .ele('shop');

  // Пример: обработка каждой строки из Excel
  const range = xlsx.utils.decode_range(sheet['!ref']);
  for (let rowNum = range.s.r + 1; rowNum <= range.e.r; rowNum++) {
    // Пример: извлечение данных из каждой ячейки
    const product_id = sheet[xlsx.utils.encode_cell({ c: 0, r: rowNum })].v;
    const product_name = sheet[xlsx.utils.encode_cell({ c: 1, r: rowNum })].v;
    const product_price = sheet[xlsx.utils.encode_cell({ c: 2, r: rowNum })].v;

    // Пример: создание YML-тега для каждой строки
    yml.ele('offer')
      .ele('id', product_id).up()
      .ele('name', product_name).up()
      .ele('price', product_price); // Добавьте другие теги по необходимости
  }

  // Записываем YML в файл
  const ymlString = yml.end({ pretty: true });
  fs.writeFileSync('output.yml', ymlString);

  console.log("Conversion completed. YML file created: output.yml");
}

// Пример вызова функции с указанием вашего Excel файла
excelToYML('your_excel_file.xlsx');

Убедитесь, что ваш файл Excel (например, your_excel_file.xlsx) содержит данные, которые вы хотите преобразовать в формат YML. Код выше создаст файл output.yml с соответствующим форматом.

Примечание: Предполагается, что у вас есть три столбца в файле Excel: ID, название и цена. Вы можете настроить код в соответствии с вашей структурой данных и требованиями YML.

C#/.net пример

Для преобразования данных из формата Excel в формат Яндекс.Маркет (YML) на C#/.NET, вы можете использовать библиотеку для работы с XML (например, System.Xml.Linq) и библиотеку для чтения данных из Excel (например, EPPlus).

Установите библиотеки:

Install-Package EPPlus
Создайте файл ExcelToYMLConverter.cs с следующим кодом:

using System;
using System.IO;
using OfficeOpenXml;
using System.Xml.Linq;

class Program
{
    static void Main()
    {
        ExcelToYML("your_excel_file.xlsx");
    }

    static void ExcelToYML(string excelFilePath)
    {
        // Создаем XML-документ
        XDocument ymlDocument = new XDocument(
            new XDeclaration("1.0", "utf-8", null),
            new XDocumentType("yml_catalog", null, "shops.dtd", null),
            new XElement("yml_catalog", new XAttribute("date", DateTime.Now.ToString("yyyy-MM-dd HH:mm")),
                new XElement("shop")
            )
        );

        // Загружаем файл Excel
        FileInfo fileInfo = new FileInfo(excelFilePath);
        using (ExcelPackage package = new ExcelPackage(fileInfo))
        {
            // Получаем активный лист
            ExcelWorksheet sheet = package.Workbook.Worksheets[0];

            // Пример: обработка каждой строки из Excel
            for (int rowNum = 2; rowNum <= sheet.Dimension.End.Row; rowNum++)
            {
                // Пример: извлечение данных из каждой ячейки
                string productId = sheet.Cells[rowNum, 1].Text;
                string productName = sheet.Cells[rowNum, 2].Text;
                string productPrice = sheet.Cells[rowNum, 3].Text;

                // Пример: создание YML-тега для каждой строки
                XElement offer = new XElement("offer",
                    new XElement("id", productId),
                    new XElement("name", productName),
                    new XElement("price", productPrice)
                    // Добавьте другие теги по необходимости
                );

                // Добавляем тег в XML-документ
                ymlDocument.Root.Element("shop").Add(offer);
            }
        }

        // Записываем XML в файл
        ymlDocument.Save("output.yml");

        Console.WriteLine("Conversion completed. YML file created: output.yml");
    }
}

Примечание: Предполагается, что у вас есть три столбца в файле Excel: ID, название и цена. Пожалуйста, убедитесь, что установили пакет EPPlus. Вы можете настроить код в соответствии с вашей структурой данных и требованиями YML.

VBA (Visual Basic for Applications) пример

Вот пример кода на VBA (Visual Basic for Applications) для Excel, который преобразует данные из листа Excel в формат Яндекс.Маркет (YML). Этот код использует встроенные средства VBA и создает XML-документ, соответствующий формату YML:

Sub ExcelToYML()
    Dim ymlDocument As Object
    Dim shopElement As Object
    Dim offerElement As Object
    Dim rowNum As Long
    Dim productId As String
    Dim productName As String
    Dim productPrice As String

    ' Создаем XML-документ
    Set ymlDocument = CreateObject("MSXML2.DOMDocument.6.0")
    ymlDocument.appendChild ymlDocument.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")
    
    ' Создаем корневой элемент YML
    Set shopElement = ymlDocument.createElement("yml_catalog")
    shopElement.setAttribute "date", Format(Now, "yyyy-mm-dd HH:mm")
    ymlDocument.appendChild shopElement
    
    Set shopElement = ymlDocument.createNode(1, "shop", "")
    ymlDocument.documentElement.appendChild shopElement
    
    ' Пример: обработка каждой строки из Excel
    For rowNum = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        ' Пример: извлечение данных из каждой ячейки
        productId = Cells(rowNum, 1).Value
        productName = Cells(rowNum, 2).Value
        productPrice = Cells(rowNum, 3).Value
        
        ' Пример: создание YML-тега для каждой строки
        Set offerElement = ymlDocument.createNode(1, "offer", "")
        shopElement.appendChild offerElement
        offerElement.appendChild ymlDocument.createNode(1, "id", "").appendChild ymlDocument.createTextNode(productId)
        offerElement.appendChild ymlDocument.createNode(1, "name", "").appendChild ymlDocument.createTextNode(productName)
        offerElement.appendChild ymlDocument.createNode(1, "price", "").appendChild ymlDocument.createTextNode(productPrice)
        ' Добавьте другие теги по необходимости
    Next rowNum

    ' Сохраняем XML в файл
    ymlDocument.Save "output.xml"

    MsgBox "Conversion completed. YML file created: output.xml"
End Sub

Примечание: В данном примере предполагается, что у вас есть три столбца в файле Excel: ID, название и цена. Вы можете настроить код в соответствии с вашей структурой данных и требованиями YML. Выполните этот код в окне VBA Excel, выбрав "Alt + F11" для открытия редактора VBA, и вставив его в модуль.

Пример готового решения, чтобы конвертировать эксель в yml, можно посмотреть здесь.