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

03.02.2016 09:36

reddimonus


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

Количество сообщений   9
Зарегистрирован:   27-09-2014, 21:24:42
Хотелось бы создать красивый прайс лист
Добрый день!

Появилась необходимость выгрузить определенные группы товаров (группы товаров нужно выбирать и отмечать галочками) в формат EXCEL.

Просят оформить красиво, с шапкой прайс листа, адресом фирмы, внизу также под прайсом пару своих строк добавить.

Фото вставить в ячейки прайса.

Выделить разделы прайса (группы товаров) отдельной строкой с другим шрифтом и закраской фона ячеек.

Как подойти к данному вопросу ?
Пользователь оффлайн Распечатать
 

03.02.2016 10:47

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Экспорт прайса
Вставить объекты с фотографиями товаров можно, изменить шрифты и цвет ячейки тоже каким-то отдельным макросом или скриптом. Но группы товаров представляют собой дерево и их может быть не ограниченное количество. Так же не указано требуется ли пользователю комбинировать группы разных уровней вложенности.

Использовать для экспорта файл шаблона не подойдет, так как в конце прайс-листа должен быть еще какой-то текст, а количество строк прайса естественно зарание не известно.

Можно написать отдельный плагин и включить в него все пожелания пользователя.
Пользователь оффлайн Распечатать
 

03.02.2016 10:58

reddimonus


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

Тема начата

Количество сообщений   9
Зарегистрирован:   27-09-2014, 21:24:42
Экспорт прайса
Цитата
Написал: support

Использовать для экспорта файл шаблона не подойдет, так как в конце прайс-листа должен быть еще какой-то текст, а количество строк прайса естественно зарание не известно.

Можно написать отдельный плагин и включить в него все пожелания пользователя.


1. А если принебречь текстом внизу прайса, можно ли использовать шаблон ?
2. Насколько я понял, при экспорте прайса СНАЧАЛА выполняется запрос который формирует строки для экспорта в EXCEL, а ЗАТЕМ какая-то недоступная пользователю процедура открывает новый EXCEL файл и переносит туда данные. Можно ли вмешаться в процесс переноса данных для того например чтобы VBA макросом или как-то еще изменить оформление формируемого документа ? К примеру название категории (я могу создать строку с определенным значением в какой-то ячейке) выделить жирным.
Ну или не закрывая готовый сформированный документ выполнить VBA скрипт. А уже потом закрыть файл.
Лучше бы конечно построчно, тогда картинки можно вставлять.

Или я неправильно понимаю процедуру экспорта ?
Пользователь оффлайн Распечатать
 

03.02.2016 11:39

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Стандартный экспорт в Excel из программы выполняет заранее подготовленный SQL-запрос на выборку набора данных, открывает COM-сервер Excel.Application и построчно экспортирует в него данные в виде строк. Если вы хотите сделать все сами, то вы можете например создать собственный VBScript и получить в нем данные выборки через ADODB или OLEDB:

Код

Dim oConn
Set oConn = CreateObject("ADODB.Connection")
oConn.Open "Driver={SQL Server};Server=127.0.0.1;Database=iNETsHOP;Uid=Administrator;Pwd="
'oConn.Open "Provider=SQLOLEDB;User ID=SA;Password=password;Initial Catalog="iNETsHOP_PL";Data Source="127.0.0.1"


Dim oRcordSet
Set oRcordSet = CreateObject("ADODB.Recordset")
oRcordSet.CursorType = 2
oRcordSet.LockType = 3
oRcordSet.Open "select G_ID, G_NAME from TBL_GOODS", oConn

'oRcordSet.AddNew
'oRcordSet.Fields("G_NAME").Value = "Good #1"
'oRcordSet.Update

'For Each Item In oRcordSet
' WScript.Echo Item.Value
'Next

Do While oRcordSet.EOF = 0
' Worksheets("Лист1").Range("A" & i).Value = oRcordSet.Fields("G_ID").Value
' Worksheets("Лист1").Range("B" & i).Value = oRcordSet.Fields("G_NAME").Value
oRcordSet.MoveNext
i = i + 1
Loop

'WScript.Echo i


В этот пример вы можете добавить подключение к Excel.Application и перенести любые данные из выборки на лист. Фотографии товаров наверное потребуется предварительно сохранить в файл, а затем добавить как объект рисунка из файла.
Пользователь оффлайн Распечатать
 

03.02.2016 11:48

reddimonus


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

Тема начата

Количество сообщений   9
Зарегистрирован:   27-09-2014, 21:24:42
Цитата
Написал: support
Стандартный экспорт в Excel из программы выполняет заранее подготовленный SQL-запрос на выборку набора данных, открывает COM-сервер Excel.Application и построчно экспортирует в него данные в виде строк. Если вы хотите сделать все сами, то вы можете например создать собственный VBScript и получить в нем данные выборки через ADODB или OLEDB:

В этот пример вы можете добавить подключение к Excel.Application и перенести любые данные из выборки на лист. Фотографии товаров наверное потребуется предварительно сохранить в файл, а затем добавить как объект рисунка из файла.


Понятно.

Это в принципе реализуемо, но достаточно сложно.
Можно ли просто получить возможность выполнить некоторый VBA скрипт после уже загрузки данных в EXCEL но до закрытия документа ? По типу импорта прайсов.

И еще вопросик.
Шеф желает отмечать галочками те группы товаров, что войдут в прайс.

Возможно ли реализовать это в стандартном экспорте передавая выбранное из справочника не как один параметр, а перечень через запятую ?

Тогда в скрипте экспорта я могу применить IN (:параметр или список параметров).


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

03.02.2016 12:03

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Специфический экспорт в Эксель
В экспорте данных в Эксель не предусмотрено вызов макроса и его негде хранить.

Множественный выбор одного параметра в динамических наборах параметров так же не предусмотрен. Вы можете сделать заранее определенное количество однотипных параметров, например выбор 10-20 групп и формировать собственный список уже при экспорте.
Пользователь оффлайн Распечатать
 

03.02.2016 18:35

MaXX


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


Количество сообщений   64
Зарегистрирован:   11-11-2008, 04:35:57
Экспорт в Excel через VBS
Цитата
Написал: reddimonus
Это в принципе реализуемо, но достаточно сложно.
Можно ли просто получить возможность выполнить некоторый VBA скрипт после уже загрузки данных в EXCEL но до закрытия документа ? По типу импорта прайсов.


Ничего сложного нет. Вот за 30 минут переделал пример сценария VBS для экспорта в Эксель полей: код товара, Название, цена, основаная группа

Замените в примере имя сервера, базу данных, логин и пароль на свои.
Код

Dim oExcelApp, oWorkbook, oSheet
Dim oConn
sPriceEmpty = "C:\TEMP\price1.xls"

Set oConn = CreateObject("ADODB.Connection")
oConn.Open "Driver={SQL Server};Server=127.0.0.1;Database=iNETsHOP;Uid=Administrator;Pwd="
'oConn.Open "Provider=SQLOLEDB;User ID=SA;Password=password;Initial Catalog="iNETsHOP_PL";Data Source="127.0.0.1"
'MsgBox(oConn.Version)


Dim oRcordSet
Set oRcordSet = CreateObject("ADODB.Recordset")
oRcordSet.CursorType = 2
oRcordSet.LockType = 3
oRcordSet.Open "select G_ID, G_NAME, price, GR_FULL_NAME from TBL_GOODS, TBL_GROUPS where G_GR_ID = GR_ID", oConn

Set oExcelApp = CreateObject("Excel.Application")
oExcelApp.Visible = False
oExcelApp.DisplayAlerts = False
oExcelApp.EnableEvents = False
oExcelApp.Visible = False
oExcelApp.AskToUpdateLinks = False

Set oWorkbook = oExcelApp.Workbooks.Open(sPriceEmpty)
'oWorkbook.CheckCompatibility = False

Set oSheet = oWorkbook.Sheets("Лист1")

oSheet.Range("A5").Value = "Код"
oSheet.Range("B5").Value = "Название"
oSheet.Range("C5").Value = "Цена"
oSheet.Range("D5").Value = "Категория"

i = 6
Do While oRcordSet.EOF = 0
oSheet.Range("A" & i).Value = oRcordSet.Fields("G_ID").Value
oSheet.Range("B" & i).Value = oRcordSet.Fields("G_NAME").Value
oSheet.Range("C" & i).Value = oRcordSet.Fields("price").Value
oSheet.Range("D" & i).Value = oRcordSet.Fields("GR_FULL_NAME").Value

oRcordSet.MoveNext
i = i + 1
Loop

oWorkbook.Close True
oExcelApp.Quit

Set oSheet = Nothing
Set oWorkbook = Nothing
Set oExcelApp = Nothing

oConn.Close
Set oRcordSet = Nothing
Set oConn = Nothing


Этот пример переносит занные из sql-запроса "select G_ID, G_NAME, price, GR_FULL_NAME from TBL_GOODS, TBL_GROUPS where G_GR_ID = GR_ID" в пустой файл-шаблон Эксель "C:\TEMP\price1.xls" начиная с 6-й строки и затем спрашивает куда сохранить новый файл.

Если нужно еще вызвать макрос, то после передачи данных из запроса можно дописать
oExcelApp.Application.Run "MarcosName"
Пользователь оффлайн Распечатать
 

04.02.2016 17:20

vikarenko


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

Количество сообщений   25
Зарегистрирован:   17-12-2014, 08:45:27
Как в этом макросе вставить фото товаров в ячейки Excel?
Пользователь оффлайн Распечатать
 

04.02.2016 19:10

support


Support


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

Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Const xlContinuous = 1
Const xlDash = -4115
Const xlDashDot = 4
Const xlDashDotDot = 5
Const xlDot = -4118
Const xlDouble = -4119
Const xlLineStyleNone = -4142
Const xlSlantDashDot = 13

Const xlHairline = 1
Const xlMedium = -4138
Const xlThick = 4
Const xlThin = 2

Const xlDiagonalDown = 5
Const xlDiagonalUp = 6
Const xlEdgeBottom = 9
Const xlEdgeLeft = 7
Const xlEdgeRight = 10
Const xlEdgeTop = 8
Const xlInsideHorizontal = 12
Const xlInsideVertical = 11

Dim oConn, oRcordSet, oExcelApp, oWorkbook, oSheet, oShape

sPriceEmpty = "C:\TEMP\price1.xls"
sServerName = "127.0.0.1"
sDatabaseName = "iNETsHOP"
sUserName = "Admin"
sUserPwd = ""
iFotoRowHeight = 50
iFirstRow = 5
sFotoFileName = "C:\TEMP\temp_foto.jpg"

sColumnID = "A"
sColumnGoodName = "B"
sColumnBrandName = "C"
sColumnPrice = "D"
sColumnCategory = "F"
sColumnFoto = "E"


Set oConn = CreateObject("ADODB.Connection")
oConn.Open "Driver={SQL Server};Server=" & sServerName & ";Database=" & sDatabaseName & ";Uid=" & sUserName & ";Pwd=" & sUserPwd
'oConn.Open "Provider=SQLOLEDB;User ID=SA;Password=password;Initial Catalog="iNETsHOP";Data Source="127.0.0.1"
'MsgBox(oConn.Version)

Set oStream = CreateObject("ADODB.Stream")
Set oRcordSet = CreateObject("ADODB.Recordset")
oRcordSet.CursorType = 2
oRcordSet.LockType = 3
oRcordSet.Open "select G_ID, G_NAME, B_NAME, price, GR_FULL_NAME, G_IMAGE, DATALENGTH(G_IMAGE) as FotoLength from TBL_GROUPS inner join TBL_GOODS on G_GR_ID = GR_ID left outer join TBL_BRANDS on G_B_ID = B_ID", oConn

Set oExcelApp = CreateObject("Excel.Application")
oExcelApp.Visible = False
oExcelApp.DisplayAlerts = False
oExcelApp.EnableEvents = False
oExcelApp.Visible = False
oExcelApp.AskToUpdateLinks = False

Set oWorkbook = oExcelApp.Workbooks.Open(sPriceEmpty)
'oWorkbook.CheckCompatibility = False

'Set oSheet = oWorkbook.Sheets("Лист1")
Set oSheet = oWorkbook.Sheets(1)

oSheet.Columns(sColumnID).ColumnWidth = 7
oSheet.Range(sColumnID & iFirstRow).Value = "Код"
oSheet.Range(sColumnID & iFirstRow).Interior.Color = RGB(51, 204, 57)
oSheet.Range(sColumnID & iFirstRow).Font.Bold = True
oSheet.Range(sColumnID & iFirstRow).Borders(xlEdgeBottom).LineStyle = xlContinuous

oSheet.Columns(sColumnGoodName).ColumnWidth = 50
oSheet.Range(sColumnGoodName & iFirstRow).Value = "Название"
oSheet.Range(sColumnGoodName & iFirstRow).Interior.Color = RGB(51, 204, 57)
oSheet.Range(sColumnGoodName & iFirstRow).Font.Bold = True
oSheet.Range(sColumnGoodName & iFirstRow).Borders(xlEdgeBottom).LineStyle = xlContinuous

oSheet.Columns(sColumnBrandName).ColumnWidth = 15
oSheet.Range(sColumnBrandName & iFirstRow).Value = "Бренд"
oSheet.Range(sColumnBrandName & iFirstRow).Interior.Color = RGB(51, 204, 57)
oSheet.Range(sColumnBrandName & iFirstRow).Font.Bold = True
oSheet.Range(sColumnBrandName & iFirstRow).Borders(xlEdgeBottom).LineStyle = xlContinuous

oSheet.Columns(sColumnPrice).ColumnWidth = 10
oSheet.Range(sColumnPrice & iFirstRow).Value = "Цена"
oSheet.Range(sColumnPrice & iFirstRow).Interior.Color = RGB(51, 204, 57)
oSheet.Range(sColumnPrice & iFirstRow).Font.Bold = True
oSheet.Range(sColumnPrice & iFirstRow).Borders(xlEdgeBottom).LineStyle = xlContinuous

oSheet.Columns(sColumnCategory).ColumnWidth = 60
oSheet.Range(sColumnCategory & iFirstRow).Value = "Категория"
oSheet.Range(sColumnCategory & iFirstRow).Interior.Color = RGB(51, 204, 57)
oSheet.Range(sColumnCategory & iFirstRow).Font.Bold = True
oSheet.Range(sColumnCategory & iFirstRow).Borders(xlEdgeBottom).LineStyle = xlContinuous

oSheet.Columns(sColumnFoto).ColumnWidth = 15
oSheet.Range(sColumnFoto & iFirstRow).Value = "Фотография"
oSheet.Range(sColumnFoto & iFirstRow).Interior.Color = RGB(51, 204, 57)
oSheet.Range(sColumnFoto & iFirstRow).Font.Bold = True
oSheet.Range(sColumnFoto & iFirstRow).Borders(xlEdgeBottom).LineStyle = xlContinuous

i = iFirstRow + 1
Do While oRcordSet.EOF = 0
oSheet.Range(sColumnID & i).Value = oRcordSet.Fields("G_ID").Value
oSheet.Range(sColumnGoodName & i).Value = oRcordSet.Fields("G_NAME").Value
oSheet.Range(sColumnBrandName & i).Value = oRcordSet.Fields("B_NAME").Value
oSheet.Range(sColumnPrice & i).Value = oRcordSet.Fields("price").Value
oSheet.Range(sColumnPrice & i).Interior.Color = RGB(255, 255, 0)
oSheet.Range(sColumnCategory & i).Value = oRcordSet.Fields("GR_FULL_NAME").Value

If oRcordSet.Fields("FotoLength").Value > 0 then
oSheet.Rows(i).RowHeight = iFotoRowHeight

oStream.Type = adTypeBinary
oStream.Open
oStream.Write oRcordSet.Fields("G_IMAGE").Value
oStream.SaveToFile sFotoFileName, adSaveCreateOverWrite
oStream.Close

'oSheet.Range(sColumnFoto & i).Activate
'oSheet.Pictures.Insert(sFotoFileName)
'oSheet.Range("A1").Activate

iLeft = oSheet.Range(sColumnFoto & i).Left
iTop = oSheet.Range(sColumnFoto & i).Top
iWidth = oSheet.Range(sColumnFoto & i).Width
iHeight = oSheet.Range(sColumnFoto & i).Height
Set oShape = oSheet.Shapes.AddPicture(sFotoFileName, False, True, iLeft, iTop, -1, -1)
oShape.LockAspectRatio = True
oShape.Width = iWidth
oShape.Height = iHeight
End if

oRcordSet.MoveNext
i = i + 1
Loop

oExcelApp.Visible = True
'oWorkbook.Close True
'oExcelApp.Quit

'Set oSheet = Nothing
'Set oWorkbook = Nothing
'Set oExcelApp = Nothing

oConn.Close
Set oRcordSet = Nothing
Set oConn = Nothing
Set oStream = Nothing


По данному примеру можно дальше кастомизировать вид прайса - менять шрифты, цвет текста и фона, границы ячеек, высоту строк и ширину колонок и т.п. Вся использованная информация взята из документации по Excel, VBA, VBS. Так же по Excel и VBA существует большое количество специализированных форумов где можно найти примеры работы с листами, ячейками, регионами, фигурами и прочими элементами приложения Excel.

В прикрепленном архиве текст данного сценария.

Прикрепленные файлы
inetshop_price_export.vbs.zip   ( 20 Просмотров | 1.7 KB )
Пользователь оффлайн Распечатать
 

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

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


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