Как сохранить ведущие нули в цифровой строке при экспорте данных?

[16 июля 2019 г.]    Российская сборка Magento 2.52.2
Magento 2: модули и услуги
magereport.com: составление перечня необходимых для установки заплаток SUPEE
#1 usa
  • Группа: Пользователь
  • Сообщений: 12
  • Регистрация: 23.04.2012

23.04.2012 12:19

Экспортирую товары в XML. SKU и ещё одно текстовое поле, добавленное мной, могут состоять только из цифр и начинаться с нуля, например:

03410420


В XML-файле, который получается в результате экспорта, содержится следующее:

<Data ss:Type="Number">03410420</Data>


Excel, как его и просят, импортирует это значение как число и, естественно, убирает ведущий ноль. При этом в случае, если у какого-то товара в этом же самом поле содержится что-то кроме цифр, то Magento экспортирует его как текст. Например:

022PU00113


экспортируется как

<Data ss:Type="String">022PU00113</Data>


Похоже, что Magento при экспорте не смотрит тип поля соответствующей таблицы, а пытается в каждой строке определить тип поля по его содержанию. Как победить эту дикость?

PS: добавлять нули уже в Экселе -- не решение, потому что:
1) таких полей несколько
2) длина данных в одном поле может быть разная -- поэтому неясно, сколько нулей восстанавливать в каждой строке.

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

23.04.2012 12:24

Программа Microsoft Excel позволяет указать для каждой колонки требуемый тип данных.

#3 usa
  • Группа: Пользователь
  • Сообщений: 12
  • Регистрация: 23.04.2012

23.04.2012 12:37

Excel 2007.

1) [Office button] --> Open --> (выбираю export_all_products.xml) --> кнопка [Open] --> Файл уже открыт.
Тип полей выбрать негде.

2) [Office button] --> New --> Blank Workbook --> кнопка [Create]
Data --> Get External Data --> From Other Sources --> From XML Data Import --> (выбираю export_all_products.xml)

В окне Import Data нажимаю кнопку Properties, но там настроек для каждого поля нет. Нажимаю кнопку [OK] и товары загружается так, что каждый атрибут каждого товара находится в отдельной строке.


Где именно надо указывать тип полей?
Можно ли внести исправления в код Magento?

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

23.04.2012 12:45

Чтобы изменить тип колонки в программе Microsoft Excel, надо мышкой нажать на заголовок колонки (выделив все ячейки колонки), а затем выбрать в контекстном меню пункт "Формат ячеек".
Всё это легко находится через общедоступные поисковые системы интернета:
http://www.google.ru/search?q=как+изменить+формат+ячейки+в+excel


#5 usa
  • Группа: Пользователь
  • Сообщений: 12
  • Регистрация: 23.04.2012

23.04.2012 13:24

Пожалуйста, попробуйте выполнить указанные вами действия на примере вот этого файла (Прикрепленный файл  Book1.xml (2.85К)
Количество загрузок:: 636). В результате в ячейке должно быть "000000000000000123". Я уверен, что у вас ничего не получится.

Вот ссылка, которая даёт представление о серьёзности проблемы:
https://www.google.com/search?q=excel+import+xml+%22leading+zeros%22&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a


<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
  <Author>usa</Author>
  <LastAuthor>usa</LastAuthor>
  <Created>2012-04-23T10:18:08Z</Created>
  <Company>Dominante Capital</Company>
  <Version>12.00</Version>
 </DocumentProperties>
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>11565</WindowHeight>
  <WindowWidth>24915</WindowWidth>
  <WindowTopX>120</WindowTopX>
  <WindowTopY>60</WindowTopY>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
 </ExcelWorkbook>
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="Calibri" x:CharSet="186" x:Family="Swiss" ss:Size="11"
    ss:Color="#000000"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
 </Styles>
 <Worksheet ss:Name="Sheet1">
  <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
   x:FullRows="1" ss:DefaultRowHeight="15">
   <Row>
    <Cell><Data ss:Type="Number">000000000000000123</Data></Cell>
   </Row>
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <Header x:Margin="0.3"/>
    <Footer x:Margin="0.3"/>
    <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
   </PageSetup>
   <Selected/>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="Sheet2">
  <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
   x:FullRows="1" ss:DefaultRowHeight="15">
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <Header x:Margin="0.3"/>
    <Footer x:Margin="0.3"/>
    <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
   </PageSetup>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="Sheet3">
  <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
   x:FullRows="1" ss:DefaultRowHeight="15">
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <Header x:Margin="0.3"/>
    <Footer x:Margin="0.3"/>
    <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
   </PageSetup>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
</Workbook>


#6 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

23.04.2012 15:21

Используйте тогда формат CSV в качестве экспортного формата в тех случаях, когда нужно загрузить данные в программу Microsoft Excel.

#7 usa
  • Группа: Пользователь
  • Сообщений: 12
  • Регистрация: 23.04.2012

24.04.2012 14:08

А то же самое с ведущими нулями происходит. В XML хотя бы теоретически можно эту проблему обойти, если заставить Magento указывать верный тип данных.
Плюс по сравнению с форматом XML неправильно выгружаются товары, описание которых состоит из нескольких строк.

Кто-нибудь в коде Magento знает нужное место, или придётся искать самому?

#8 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

24.04.2012 14:22

Отройте экспортированный файл CSV в программе Open Office Calc.
При открытии укажите для проблемного столбца, что его тип — текстовый.
Open Office Calc и переносы строк тексте корректно обрабатывает, и числовые данные с ведущими нулями.
После открытия файла вы можете сохранить его в формате Microsoft Excel.

Поделиться темой: