powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
15 сообщений из 15, страница 1 из 1
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
    #37110400
konishoa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, форумчане!
Нужна помощь в следующем вопросе:

Есть две таблицы в экселе.
Одна с товарами, что есть в наличии.
Вторая со всеми возможными товарами плюс описание каждого товара.
Нужно сделать общую таблицу с товарами что есть в наличии плюс описание каждого товара.
Вопрос : возможно ли это сделать пользуясь МS office`ом? Если да, то опишите хотя бы приблизительно как.
Если есть второй способ - через sql, то опишите, пожалуйста, практические шаги:
1) как ввести первую (вторую) таблицу в базу (вторая таблица содержит описание, довольно-таки объемноё)
2) какие мануалы почитать
3) как вывести таблицу из базы в эксель документ
Допустим 1 таблица - Available_products_bd={sku, product_name}
2 таблица - All_products_bd={sku, product_name, description}
Результат - Available_products_with_description={sku, product_name, description}
Всем заранее спасибо за советы и потраченное время!
...
Рейтинг: 0 / 0
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
    #37110422
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
konishoa,
допустим,
1 таблица на листе Лист1 в книге c:\Available_products_bd.xls,
2 таблица на листе Лист1 в книге c:\All_products_bd.xls.
Первые строки листов содержат названия полей таблиц.
Результат помещаем на лист Лист1 книги с нижеприведенным кодом
пользуясь МS office`ом через sql
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Sub INNERJOIN()
Const T1$ = "[Лист1$] as t1"
Const DB1$ = "c:\Available_products_bd.xls"
Const T2$ = "[Лист1$] as t2 in 'c:\All_products_bd.xls' 'Excel 8.0;HDR=Yes;IMEX=2'"
Const ResultWorksheet$ = "Лист1"
Const RESULTFIELDS$ = "t1.sku, t1.product_name, t2.description"
Const JOIN_CONDITION$="t1.sku=t2.sku"

Dim scn$, sq$, cn, rs, i%

scn = "Provider=Microsoft.Jet.OLEDB.4.0;Mode=Read;Data Source=" _
    & DB1 & ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=2'"

sq = "select " & RESULTFIELDS & " from " & T1 & " inner join " & T2 & " on " & JOIN_CONDITION

Set cn = CreateObject("ADODB.Connection")
cn.Open scn

Set rs = cn.Execute(sq)

With ThisWorkbook.Worksheets(ResultWorksheet)
    For i =  0  To rs.Fields.Count -  1 
        .Cells( 1 , i +  1 ).Value = rs(i).Name
    Next i
  .Range("A2").CopyFromRecordset rs
End With

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

End Sub
...
Рейтинг: 0 / 0
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
    #37110576
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если товары в обеих таблицах можно однозначно идентифицировать( названия полностью совпадают или есть коды), то берете за основу таблицу наличия и подтягиваете в нее формулами(или макросом) описания для соответсвующего товара.

понятно написал? или нужна полная реализация?
...
Рейтинг: 0 / 0
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
    #37111691
konishoa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища, спасибо за решение. Но я в VB ничего не шарю. Пробовал запустить как макрос - выдает "Ошибка синтаксиса в предложении FROM" файлы скопировал куда нужно с нужными названиями. Хз что делаю не так, но все равно спасибо :) Пытался отладить, ниче не вышло...
Слан, полная реализация не нужно. А то у меня еще не раз будут такие задачи. Подскажите лучше что почитать. Или как залить из xls файла в локальную БД таблицу. Просто если залью, то простым sql все сделаю.
Просто для меня сейчас ваши методы использование макросов с VB и вставками на sql выглядит как "ну это просто: берешь два адронных коллайдера и ..."
...
Рейтинг: 0 / 0
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
    #37112199
Фотография -O_o-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версию сервера скажите.
...
Рейтинг: 0 / 0
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
    #37112392
konishoa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-O_o-, Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8k PHP/5.3.1
...
Рейтинг: 0 / 0
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
    #37112412
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
konishoa,

насколько я понял речь шла о сервере БД.
...
Рейтинг: 0 / 0
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
    #37112500
konishoa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-duke,

Server version: 5.1.40-community
...
Рейтинг: 0 / 0
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
    #37112556
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
konishoa,
можно попробовать строку запроса без JOIN использовать:

Код: plaintext
sq = "select " & RESULTFIELDS & " from " & T1 & "," & T2 & " where " & JOIN_CONDITION

ЗЫ: если файлики с тестовыми данными выложите - у себя "помучаю".
...
Рейтинг: 0 / 0
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
    #37112604
konishoa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища,
...
Рейтинг: 0 / 0
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
    #37112605
konishoa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
    #37112639
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
konishoa,
поменял только описание таблицы T2.
Код размещал не в Available_products_bd.xls и не в All_products_bd.xls, - создал новую книгу.
Если надо результат добавить в одну из исходных книг - поменяйте значение константы ResultWorksheet.
работает как с inner join так и с where
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Sub INNERJOIN()
Const T1$ = "[Лист1$] as t1"
Const DB1$ = "c:\Available_products_bd.xls"
Const T2$ = "(select sku,description from [Лист1$] in 'c:\All_products_bd.xls'[Excel 8.0;HDR=Yes;IMEX=2]) as t2"
Const ResultWorksheet$ = "Лист1"
Const RESULTFIELDS$ = "t1.sku, t1.product_name, t2.description"
Const JOIN_CONDITION$ = "t1.sku=t2.sku"

Dim scn$, sq$, cn, rs, i%

scn = "Provider=Microsoft.Jet.OLEDB.4.0;Mode=Read;Data Source=" _
    & DB1 & ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=2'"

sq = "select " & RESULTFIELDS & " from " & T1 & " inner join " & T2 & " on " & JOIN_CONDITION
'sq = "select " & RESULTFIELDS & " from " & T1 & "," & T2 & " where " & JOIN_CONDITION

Set cn = CreateObject("ADODB.Connection")
cn.Open scn

Set rs = cn.Execute(sq)

With ThisWorkbook.Worksheets(ResultWorksheet)
    For i =  0  To rs.Fields.Count -  1 
        .Cells( 1 , i +  1 ).Value = rs(i).Name
    Next i
  .Range("A2").CopyFromRecordset rs
End With

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

End Sub
...
Рейтинг: 0 / 0
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
    #37112678
konishoa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О великий гуру sql.ru под ником Скукотища!
Бью челом и благодарю! =) Плюс Вам в карму!
Я уже установил Webyog SQLyog и заливал таблицы в базу, но задолбался мучится с кодировками и остальным бредом! Там тоже нужно было сделать 10 телодвижений как минимум, чтобы только импортировать одну таблицу... и все в таком духе. И всё безуспешно.
Поэтому еще раз большое спасибо! Я себе сделаю теперь татуировку Скукотища распечатаю этот макрос и буду на него смотреть каждый день до полного просветления!
Тему можно закрывать!
...
Рейтинг: 0 / 0
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
    #37116678
Algol70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
konishoa для чего такие краиности? ползуитесь и радуйтесь!
...
Рейтинг: 0 / 0
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
    #37117577
konishoa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Algol70, просто понравилось простое в несколько строк решение. Просто знать нужно кучу всего, чтобы задачи решать столь просто и быстро. Я бы может эти 20 строк родил бы после месяца вкуривания мануалов и то не факт.
Код: plaintext
Const T2$ = "(select DISTINCT sku,description from [Лист1$] in 'c:\All_products_bd.xls'[Excel 8.0;HDR=Yes;IMEX=2]) as t2"
Вот здесь поправочка ;). Еще раз спасибо.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]