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

Есть две таблицы в экселе.
Одна с товарами, что есть в наличии.
Вторая со всеми возможными товарами плюс описание каждого товара.
Нужно сделать общую таблицу с товарами что есть в наличии плюс описание каждого товара.
Вопрос : возможно ли это сделать пользуясь М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
11.02.2011, 04:01
    #37110422
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
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
11.02.2011, 09:28
    #37110576
_slan_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
если товары в обеих таблицах можно однозначно идентифицировать( названия полностью совпадают или есть коды), то берете за основу таблицу наличия и подтягиваете в нее формулами(или макросом) описания для соответсвующего товара.

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

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

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

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

ЗЫ: если файлики с тестовыми данными выложите - у себя "помучаю".
...
Рейтинг: 0 / 0
11.02.2011, 22:23
    #37112604
konishoa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
скукотища,
...
Рейтинг: 0 / 0
11.02.2011, 22:23
    #37112605
konishoa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
...
Рейтинг: 0 / 0
11.02.2011, 23:04
    #37112639
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
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
12.02.2011, 00:13
    #37112678
konishoa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
О великий гуру sql.ru под ником Скукотища!
Бью челом и благодарю! =) Плюс Вам в карму!
Я уже установил Webyog SQLyog и заливал таблицы в базу, но задолбался мучится с кодировками и остальным бредом! Там тоже нужно было сделать 10 телодвижений как минимум, чтобы только импортировать одну таблицу... и все в таком духе. И всё безуспешно.
Поэтому еще раз большое спасибо! Я себе сделаю теперь татуировку Скукотища распечатаю этот макрос и буду на него смотреть каждый день до полного просветления!
Тему можно закрывать!
...
Рейтинг: 0 / 0
15.02.2011, 11:51
    #37116678
Algol70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
konishoa для чего такие краиности? ползуитесь и радуйтесь!
...
Рейтинг: 0 / 0
15.02.2011, 16:17
    #37117577
konishoa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1)
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
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / xls1*xls2=xls3 (xls1 входит в xls2) and (xls3>xls2>xls1) / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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