Для того чтобы организовать торговлю в Интернет-магазине компании потребуется наличие всего одного Менеджера, контролирующего процесс автоматической работы магазина как из офиса компании, так и из любого места в Сети.
Каталог прайсов интернет магазинов - разместите свой прайс бесплатно
  Главная  |    О компании  |    Новости  |    Статьи  |    Форум  |    Клиенты  |    Обратная связь  |    Карта сайта
Добро пожаловать, Гость. Для того, чтобы отвечать на сообщения и создавать новые темы, Вам необходимо зарегистрироваться, если Вы уже зарегистрированы, то войдите используя Ваши E-Mail и Пароль.
Запомнить
Пароль
   
Форум
 Программа iNETsHOP » Работа с программой
        Создание схемы импорта
Создание схемы импорта

05.01.2016 01:19

atemirov


Посетитель

Количество сообщений   5
Зарегистрирован:   02-04-2015, 23:12:52
Создание схемы импорта
Доброго времени суток!
В моем прайсе есть данные, которые расположены в столбцах АА, АК, AL и т.п.
Если в схеме импорта указываю АК, то программа берет данные из столбцов А и К.
Как сделать, чтобы данные брались из одного столбца?
Пользователь оффлайн Распечатать
 

05.01.2016 01:46

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Чтение прайс-листа Excel через ODBC/OLEDB
Да, такая проблема существует. В полной версии ее можно решить через выполнение макроса VBA, который скопирует/перенесет необходимые колонки. В бесплатной версии можно воспользоваться чтением прайс-листа не штатными средствами программы, а посредством SQL-запроса который прочитает информацию например из источника ODBC Excel и запишет в нужные колонки/поля для предварительного просмотра прайса.

Приложите прайс-лист (или его часть, достаточную для создания примера и тестирования SQL-запроса) и укажите какая у вас версия Microsoft SQL Server (в том числе для какой разрядности процессора) и какая версия Microsoft Office/Excel (и его разрядность).


Пользователь оффлайн Распечатать
 

05.01.2016 11:56

atemirov


Посетитель

Тема начата

Количество сообщений   5
Зарегистрирован:   02-04-2015, 23:12:52
Спасибо за ответ!

Версия Microsoft SQL Server 2008R2 x64
Версия Microsoft Office 2013 x64
Прикрепленные файлы
price.zip   ( 6 Просмотров | 256.1 KB )
Пользователь оффлайн Распечатать
 

05.01.2016 12:29

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Загрузка прайс-листов из XML
Судя по присутствию нескольких колонок Size, сложилось впечатление, что вы преобразовали XML в XLSX и затем импортируете в базу данных. Если у вас файл изначально в XML - то его так же можно легко импортировать.
Пользователь оффлайн Распечатать
 

05.01.2016 12:53

atemirov


Посетитель

Тема начата

Количество сообщений   5
Зарегистрирован:   02-04-2015, 23:12:52
Изначально прайс получаю в csv, приложил Вам уже откорректированный прайс, который заливаю на сайт.
Приложил изначальный вариант
Прикрепленные файлы
price.zip   ( 3 Просмотров | 269.5 KB )
Пользователь оффлайн Распечатать
 

05.01.2016 14:27

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Какой из прайс-листов вы будете постоянно импортировать, чтобы именно для него сделать схему импорта?
Пользователь оффлайн Распечатать
 

05.01.2016 14:49

atemirov


Посетитель

Тема начата

Количество сообщений   5
Зарегистрирован:   02-04-2015, 23:12:52
В идеале - первый.
Пользователь оффлайн Распечатать
 

05.01.2016 15:17

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Чтение CSV средствами MS SQL
Прочитать CSV-файл средствами Microsoft SQL Server можно несколькими способами, самый простой через BULK INSERT. Например, если вы выполните в SQL Server Management studio следующий SQL-запрос, то он вернет вам набор данных из вашего файла CSV.

Код

IF not OBJECT_ID('tempdb..#TEMP_CSV') is null DROP TABLE #TEMP_CSV;
CREATE TABLE #TEMP_CSV
(
"code" varchar(1024),
"folder_id" varchar(1024),
"name" varchar(1024),
"size" varchar(1024),
"photo" varchar(1024),
"price" varchar(1024),
"url" varchar(1024),
"folder_alias" varchar(1024),
"folder_name" varchar(1024),
"manuftac" varchar(1024),
"attributes" varchar(1024),
"Стоимость" varchar(1024),
"Отображение времени" varchar(1024),
"Стиль" varchar(1024),
"Подсветка" varchar(1024),
"Противоударные" varchar(1024),
"Форма корпуса" varchar(1024),
"Цвет корпуса" varchar(1024),
"Материал браслета" varchar(1024),
"Цвет браслета/ремешка" varchar(1024),
"Цвет циферблата" varchar(1024),
"Цифры" varchar(1024),
"Стразы" varchar(1024),
"Говорящие" varchar(1024),
"Bluetooth" varchar(1024),
"Дополнительные функции" varchar(1024),
"Для дайвинга и туризма" varchar(1024),
"Тип механизма" varchar(1024),
"Ремешок/Браслет" varchar(1024),
"Материал корпуса" varchar(1024),
"Водозащита" varchar(1024),
"Стекло" varchar(1024),
"Ход" varchar(1024),
"Мелодия" varchar(1024),
"Сигнал" varchar(1024),
"Пол" varchar(1024),
"Страна-происхождения" varchar(1024)
);

BULK INSERT #TEMP_CSV
FROM 'C:\TEMP\92f3344e7c96c349cbf571f4564cb487.csv'
WITH
(
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n',
CODEPAGE = 'ACP'
);
SELECT * FROM #TEMP_CSV




Вам останется только перенести данные во временную таблицу #TMP_PRICE которая используется в программе для предварительного просмотра прайса.

В итоге, sql-запрос чтобы импортировать данный прайс-лист поставщика из CSV будет выглядеть так:

Код

DECLARE @FILENAME varchar(255);
SET @FILENAME = :FILENAME;
IF not OBJECT_ID('tempdb..#TEMP_CSV') is null DROP TABLE #TEMP_CSV;
CREATE TABLE #TEMP_CSV
(
"code" varchar(1024),
"folder_id" varchar(1024),
"name" varchar(1024),
"size" varchar(1024),
"photo" varchar(1024),
"price" varchar(1024),
"url" varchar(1024),
"folder_alias" varchar(1024),
"folder_name" varchar(1024),
"manuftac" varchar(1024),
"attributes" varchar(max),
"Стоимость" varchar(1024),
"Отображение времени" varchar(1024),
"Стиль" varchar(1024),
"Подсветка" varchar(1024),
"Противоударные" varchar(1024),
"Форма корпуса" varchar(1024),
"Цвет корпуса" varchar(1024),
"Материал браслета" varchar(1024),
"Цвет браслета/ремешка" varchar(1024),
"Цвет циферблата" varchar(1024),
"Цифры" varchar(1024),
"Стразы" varchar(1024),
"Говорящие" varchar(1024),
"Bluetooth" varchar(1024),
"Дополнительные функции" varchar(1024),
"Для дайвинга и туризма" varchar(1024),
"Тип механизма" varchar(1024),
"Ремешок/Браслет" varchar(1024),
"Материал корпуса" varchar(1024),
"Водозащита" varchar(1024),
"Стекло" varchar(1024),
"Ход" varchar(1024),
"Мелодия" varchar(1024),
"Сигнал" varchar(1024),
"Пол" varchar(1024),
"Страна-происхождения" varchar(1024)
);

EXEC('
BULK INSERT #TEMP_CSV
FROM '''+@FILENAME+'''
WITH
(
FIELDTERMINATOR = '';'',
ROWTERMINATOR = ''\n'',
CODEPAGE = ''ACP''
);
');
--SELECT * FROM #TEMP_CSV
INSERT INTO #TMP_PRICE ([NAME],[BRAND], [SID], [DESC_FULL], [PRICE], [CATEGORY], [URL])
SELECT "name", "manuftac", "code", "attributes", "price", "folder_name", "url"
FROM #TEMP_CSV
WHERE ISNUMERIC("code")=1 AND LTRIM(RTRIM(ISNULL("name", ''))) <> '';


Его нужно вставить в соответствующее поле схемы импорта.


Пользователь оффлайн Распечатать
 

05.01.2016 15:52

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Microsoft Access Database Engine 2010
Для чтения файлов Excel непосредственно в MS SQL для вашего случая, вам потребуется для начала установить драйвер Microsoft.ACE.OLEDB.12.0.

И переконфигурировать сервер СУБД.

Код

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO


Затем вы сможете посмотреть названия полей (Путь и имя файла C:\TEMP\price.xlsx следует заменить на свои):

Код

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\TEMP\price.xlsx', [Лист1$])


и модифицировать SQL-запрос чтения CSV на XLSX.

Пользователь оффлайн Распечатать
 

05.01.2016 17:32

MaXX


Пользователь iNETsHOP


Количество сообщений   64
Зарегистрирован:   11-11-2008, 04:35:57
Как загрузить прайс из Excel через OLE Automation
Мне, когда нужно вытащить какое-то значение ячейки из экселевского листа, открываю его через OLE Automation и читаю из Cells. Сейчас переделал чтение для такого прайса как в примере. Держите вариант на заметку (если колонок не хватает, добавляйте их так же):

Код

declare
@file_name varchar(255), @IExcel int, @hr int, @IWorkbook int,
@data varchar(255),
@source varchar(255),
@description varchar(255),
@iRow int, @iColumn int, @sCellStr varchar(150);
;

DECLARE
@code varchar(32),
@name varchar(155),
@photo varchar(1024),
@price varchar(16),
@url varchar(1024),
@folder_name varchar(155),
@manuftac varchar(1024),
@attributes varchar(max)
;

set @file_name = :FILENAME;
exec @hr = sp_OACreate 'Excel.Application', @IExcel OUT
exec @hr = sp_OASetProperty @IExcel, 'DisplayAlerts', 0

exec @hr = sp_OAMethod @IExcel, 'Application.workbooks.Open', @IWorkbook OUT , @file_name

SET @iRow = 1;
while 1=1
begin
SET @code = NULL;
SET @name = NULL;
SET @photo = NULL;
SET @price = NULL;
SET @url = NULL;
SET @folder_name = NULL;
SET @manuftac = NULL;
SET @attributes = NULL;
SET @sCellStr = 'Application.Activeworkbook.Activesheet.Cells(' + LTRIM(STR(@iRow, 10, 0)) + ',1).value';
exec @hr = sp_OAGetProperty @IExcel, @sCellStr, @code OUT;

SET @sCellStr = 'Application.Activeworkbook.Activesheet.Cells(' + LTRIM(STR(@iRow, 10, 0)) + ',3).value';
exec @hr = sp_OAGetProperty @IExcel, @sCellStr, @name OUT;

SET @sCellStr = 'Application.Activeworkbook.Activesheet.Cells(' + LTRIM(STR(@iRow, 10, 0)) + ',7).value';
exec @hr = sp_OAGetProperty @IExcel, @sCellStr, @photo OUT;

SET @sCellStr = 'Application.Activeworkbook.Activesheet.Cells(' + LTRIM(STR(@iRow, 10, 0)) + ',8).value';
exec @hr = sp_OAGetProperty @IExcel, @sCellStr, @price OUT;

SET @sCellStr = 'Application.Activeworkbook.Activesheet.Cells(' + LTRIM(STR(@iRow, 10, 0)) + ',9).value';
exec @hr = sp_OAGetProperty @IExcel, @sCellStr, @url OUT;

SET @sCellStr = 'Application.Activeworkbook.Activesheet.Cells(' + LTRIM(STR(@iRow, 10, 0)) + ',11).value';
exec @hr = sp_OAGetProperty @IExcel, @sCellStr, @folder_name OUT;

SET @sCellStr = 'Application.Activeworkbook.Activesheet.Cells(' + LTRIM(STR(@iRow, 10, 0)) + ',12).value';
exec @hr = sp_OAGetProperty @IExcel, @sCellStr, @manuftac OUT;

SET @sCellStr = 'Application.Activeworkbook.Activesheet.Cells(' + LTRIM(STR(@iRow, 10, 0)) + ',13).value';
exec @hr = sp_OAGetProperty @IExcel, @sCellStr, @attributes OUT;

IF ISNULL(@name, '') = '' BREAK;

INSERT INTO #TMP_PRICE ([NAME],[BRAND], [SID], [DESC_FULL], [PRICE], [CATEGORY], [URL], [IMAGE_URL])
SELECT @name, @manuftac, @code, @attributes, @price, @folder_name, @photo, @url;
SET @iRow = @iRow + 1;
end;

exec sp_OAMethod @IExcel, 'Quit';

exec @hr = sp_OADestroy @IExcel;


P.S.
Этот код нужно вставить в схему импорта там где SQL-запрос импорта или как-то так называется.

Пользователь оффлайн Распечатать
 

05.01.2016 18:06

atemirov


Посетитель

Тема начата

Количество сообщений   5
Зарегистрирован:   02-04-2015, 23:12:52
Большое спасибо всем
Пользователь оффлайн Распечатать
 

Распечатать  |  Следующая тема  |  Предыдущая тема
Перейти
 

Статистика форума
Тем: 506, Сообщений: 3222, Пользователей: 2255
Приветствуем новичка по имени Gotit
Ближайшие дни рождения
Сегодня именинников нет


iNETsHOP - программа для формирования каталога товаров интернет-магазина и обработки прайсов Copyright 2007-2015 "Программа iNETsHOP - работа с прайс-листами поставщиков для интернет магазинов ®" iNETsHOP - обработка, объединение, анализ прайсов поставщиков и конкурентов