Содержание
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, можно посмотреть здесь.