powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Подключение к excel-листам
25 сообщений из 48, страница 1 из 2
Подключение к excel-листам
    #39239146
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

В excel-ом файле на каждом листе "Лист1" и 'Лист2" есть по одной таблице с подключением с MDX-запросом. На "Лист3" нужно вставить таблицу с подключением с SQL-запросом к этим двум листам. Нужно сделать внешнее соединение из этих двух таблиц.

Логичнее было сделать так: обойтись без первых двух листов и вставить на лист таблицу с подключением с непосредственным SQL-запросом на сервер. Но такой возможности нет.

Делаю так. Данные - Из других источников- Из Microsoft Query. Но фишка в том, что синтаксис Microsoft Query не совсем такой как SQL. Более капризный. Запутался там как делать внешнее соединение Для данной задачи нужно подключаться через Microsoft Query или можно подключаться по другому (через другой провайдер)? ADO не вариант, там ограниченный SQL.
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39239682
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, сделал так

В меню "Из других источников" - "С сервера SQL сервер" - выбираю любую базу данных, потом меняю свойства подключении и текст запроса.

Вариант 1
В строке подключения ввел так Provider=Microsoft.ACE.OLEDB.12.0;Excel 12.0;Database=C:\Users\User\Desktop\СМ2.xlsm. Тип команды - SQL. Текст запроса
Код: sql
1.
Select * From [ИД1$]

Выгрузились данные нормально.

Захожу в свойства подключения и в строке подключения теперь другая запись
Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source="";Mode=Share Deny None;Extended Properties="Excel 12.0;Database=C:\Users\User\Desktop\СМ2.xlsm";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False

Теперь вставляю такой текст простого запроса с объединением
Код: sql
1.
2.
3.
4.
5.
6.
Select
[ИД1$].[Поле1],
[ИД2$].[Поле3]
From [ИД1$]  JOIN [ИД2$]
ON
[ИД1$].[Поле1]=[ИД2$].[Поле2]

Пишет, что ошибка в From. Вроде все по синтаксису написал.


Вариант 2

Если в строке подключения написать Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\User\Desktop\СМ2.xlsm;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"" .Тип команды - SQL. И текст запроса
Код: sql
1.
Select [ИД1$].[Поле1],[ИД1$].[Поле2] From [ИД1$][ИД1$]

Данные выгружаются нормально.

Захожу в свойства подключения и в строке подключения теперь также другая запись как в первом варианте.

Если вставить такой текст запроса
Код: sql
1.
2.
3.
4.
5.
6.
Select
[ИД1$].[Поле1],
[ИД1$].[Поле3]
From [ИД1$][ИД1$] JOIN  [ИД2$][ИД2$]
ON
[ИД1$].[Поле1]=[ИД2$].[Поле2]

Пишет также, что ошибка в From.

Что не так делаю? Может надо что в строке подключения изменить?

Какой вариант подключения лучше использовать?
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39240445
anvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток
Странно всё это. Попробуйте явно указать тип соединения INNER JOIN
ferzmikkКакой вариант подключения лучше использовать?, а вот подключение лучше использовать ODBC . С OLEDB периодически возникают проблемы с блокировкой файла. При подключении запроса к самому себе, всё нормально, а вот с другими бывают проблемы.
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39241091
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvg,

вместо JOIN написал INNER JOIN - заработал.

Потом FULL JOIN не работал. Использовал UNION - заработало. Похоже SQL к excel листам ограниченный.
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39241096
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvgferzmikkКакой вариант подключения лучше использовать?, а вот подключение лучше использовать ODBC .
Тут я не совсем понял.
Код: xml
1.
2.
Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};
DBQ=C:\MyExcel.xlsx;

Это писать в строке подключения?
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39241124
anvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потом FULL JOIN не работаДля обращения к листам Excel используется движок Access, а он года с 97, в плане SQL, не развивается. Там есть только Left Join, Right Join, Inner Join
Тут я не совсем понял.

Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};
DBQ=C:\MyExcel.xlsx;

Это писать в строке подключения?
Смотря как вы создавали подключение. В уже существующем, если не ошибаюсь, перейти с OleDb на ODBC не получится (не эксперементировал). А так да, по минимальному тексту подключения всё правильно
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39241358
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvgСмотря как вы создавали подключение. В уже существующем, если не ошибаюсь, перейти с OleDb на ODBC не получится (не эксперементировал). А так да, по минимальному тексту подключения всё правильно
Получилось. Делал так: в меню "Из других источников" - "С сервера SQL сервер" - выбираю любую базу данных, потом меняю свойства подключении и текст запроса.
Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=C:\Users\User\Desktop\СМ2.xlsm;
Только потом excel изменил запись в подключении
Provider=MSDASQL.1;Persist Security Info=True;Extended Properties="DBQ=C:\Users\User\Desktop\СМ2.xlsm;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"

Тут фишка в том, что если этот файл будет открывать другой пользователь, то ему надо будет изменить строку подключения, а именно, изменить путь к файлу. Такая проблема только макросом решается, который в строке подключения меняет путь к файлу, или есть другие варианты решения?
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39241373
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обратил внимание. Если в свойствах подключении ставить тип команды "По умолчанию" или "SQL", то таблица формируется. А если ставить "Таблица", то выходит такое сообщение
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39241595
anvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Provider=MSDASQL.1;Увы, это слой с ODBC в OLEDB. Чтобы чистый ODBC получить делайте через MS Query, а потом точно также редактируете строку подключения.
Такая проблема только макросом решается, который в строке подключения меняет путь к файлуУвы, да, макросом или "ручками". Можете, попробовать вариант с Power Query, там, используя, таблицу параметров, можно через функцию ЯЧЕЙКА("filename"; A1) в ней получить путь к файлу в котором выполняется запрос, а по нему сконструировать относительный путь к вашему файлу-источнику данных.
"По умолчанию" или "SQL", то таблица формируется. А если ставить "Таблица", то выходит такое сообщение Естественно, вы же запрос помещаете. Оставьте только, например, [ИД1$], тогда будет и "Таблица" работать.
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39241829
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvgProvider=MSDASQL.1;Увы, это слой с ODBC в OLEDB. Чтобы чистый ODBC получить делайте через MS Query, а потом точно также редактируете строку подключения.
DSN=Excel Files;DBQ=C:\Users\User\Desktop\СМ3.xlsm;DefaultDir=C:\Users\User\Desktop;DriverId=1046;MaxBufferSize=2048;PageTimeout=5;

Тип команды - SQL, но тут неактивно поле, то есть нельзя изменить.

Если в свойствах подключении нажать на "Изменить запрос", то вылезает такое сообщение. Как можно изменить запрос в конструкторе?

Почему кнопка "параметры" не активна? Даже бывает не активна, когда подключаешься к кубу. Как еe сделать активной?

Какую роль играет файл подключения?

В интернете мало информации на тему Создание подключений к excel листам, где прописаны такие тонкие логические нюансы
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39242007
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39242746
anvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ип команды - SQL, но тут неактивно поле, то есть нельзя изменить.При Odbc подключении другого и нет. А вам зачем?
Я обычно для создания подключения пользуюсь такой заготовкой, а потом допиливаю подключение.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Sub CreateOdbcConnection()
    Const connStr = "ODBC;DBQ=$1;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};MaxBufferSize=2048;PageTimeout=5;ReadOnly=1;ExtendedAnsiSQL=1;"
    Dim pLO As ListObject, pSheet As Worksheet
    Set pSheet = ThisWorkbook.Worksheets.Add
    Set pLO = pSheet.ListObjects.Add(xlSrcExternal, Replace$(connStr, "$1", ThisWorkbook.FullName), True, xlYes, pSheet.Range("A1"))
    With pLO.QueryTable
        .CommandType = xlCmdSql
        .CommandText = "Select * From [Лист1$]"
        .Refresh
        .WorkbookConnection.Description = "Connection to Лист1"
        .WorkbookConnection.Name = "Query" & Format$(Now, "yyyymmddhhnnss")
    End With
End Sub


Успехов.
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39243204
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvg,

Обнаружил такую фишку. В запросе присутствует 2 параметра и записываем их как знаками "?".
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Public Sub CreateOdbcConnection()
    Const connStr = "ODBC;DBQ=$1;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};MaxBufferSize=2048;PageTimeout=5;ReadOnly=1;ExtendedAnsiSQL=1;"
    Dim pLO As ListObject, pSheet As Worksheet
    Set pSheet = ThisWorkbook.Worksheets.Add
    Set pLO = pSheet.ListObjects.Add(xlSrcExternal, Replace$(connStr, "$1", ThisWorkbook.FullName), True, xlYes, pSheet.Range("A1"))
    
    Set Параметр1 = pLO.QueryTable.Parameters.Add("@Параметр1", xlParamTypeVarChar)
    Параметр1.SetParam xlConstant, "Город1"
    
    Set Параметр2 = pLO.QueryTable.Parameters.Add("@Параметр2", xlParamTypeVarChar)
    Параметр2.SetParam xlConstant, "SKU1"    
       
    With pLO.QueryTable
        .CommandType = xlCmdSql
        .CommandText = "SELECT * FROM `ИД1$`  WHERE (`Поле1` = ? AND `Поле2` = ?) "
        .Refresh
        .WorkbookConnection.Description = "Connection to ÈÄ1"
        .WorkbookConnection.Name = "Query" & Format$(Now, "yyyymmddhhnnss")
    End With
End Sub


Какой именно знак "?" соответствует для заданного параметра, определяется последовательность заданных параметров Set Параметр1 и Set Параметр2.

Записывал в тексте параметры не как "?", а как "@Параметр1" и "@Параметр2". Но так почему то не работает.

Как надо правильно записывать в тексте запроса разные параметры (без знаков вопросов)?
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39243341
anvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какой именно знак "?" соответствует для заданного параметра, определяется последовательность заданных параметров Set Параметр1 и Set Параметр2.По опыту использования по порядку следования. 1-ый параметр 1-ому ?, второй - второму. С другой стороны с глубокой вложенностью параметров не экспериментировал - есть ли приоритет параметра по положению в основном запросе ли или в подзапросе или главное порядковый номер ? в тексте SQL. Если установите то или другое, сообщите, пожалуйста.
Именованных параметров в Access нет, увы.
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39243452
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvgесть ли приоритет параметра по положению в основном запросе ли или в подзапросе или главное порядковый номер ?
Это пример простого запроса, на самом деле будет сложным. Разные таблицы на разных листах, в запросе присутствуют подзапросы, несколько параметров. Со временем будут изменяться столбцы, добавляться еще таблицы. Хотелось бы сделать запрос мобильным, чтобы потом легко дорабатывать. Конечно здесь не такого удобного конструктора как в 1С - СКД.
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39243875
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реально ли с помощью программы SQL Server Management Studio подключиться к excel-листу?
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39244284
anvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подключиться не подключиться, а вот брать данные из закрытой книги вполне возможно.
Using OPENROWSET to Read Excel Worksheets from SQL Server: Part 1 – How to Set Up the System , Импорт данных из Excel в SQL Server
Успехов.
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39245466
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот на двух первых листах присутствуют таблицы с подключением с MDX-запроса. На третьем листе делаю SQL-запрос к этим двум листам. Первые два листа обновляю, потом обновляю третий. После после обновления двух листов данные свежие. Потом обновляю третий лист, но данные берутся из двух листов, но которые были до обновления. Почему так происходит? Как исправить?
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39245467
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже если менять SQL-запрос, то все равно обращается к данным до обновления
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39246097
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сделать корректное обновление?
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39246294
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может надо параметры подключения изменить?

DBQ=C:\Users\User\Desktop\СМ3.xlsm;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DriverId=1046;ExtendedAnsiSQL=1;MaxBufferSize=2048;PageTimeout=5;ReadOnly=1;
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39247368
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обратил внимание на следующее.

Если обновить таблицы на первых двух листах с подключением OLAP с помощью MDX-запросов, то данные обновляются корректно. Если обновить лист с SQL-запросом к этим двум листам, то отображаются данные с листов до обновления.

Если обновить таблицы на первых двух листах и программно создать лист с SQL-запросом к этим двум листам, то такая же проблема.

Если добавить новый лист с таблицей с подключением OLAP и также программно создать лист с SQL-запросом, то также все.

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

Почему так происходит? Как сделать так, чтобы данные можно корректно обновлять без создании новых файлов?
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39249702
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvgДля обращения к листам Excel используется движок Access, а он года с 97, в плане SQL, не развивается. Там есть только Left Join, Right Join, Inner Join
Может эту тему перенести в "Microsoft Access"?
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39249802
anvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток
Извиняюсь, давно не заглядывал.
Могу предположить следующее. Не эксперементировал. При обновлении запрос обращается не к текущей открытой книге, а к её версии на диске. Естественно, что там изменений нет.
Поэтому, скорее всего стоит написать макрос, который сначала обновляет mdx запросы, сохраняет книгу, а затем обновляет запрос к листам с результатами mdx запросов. Скорее всего в настройках подключения mdx запросов стоит включить синхронное обновление, иначе сохранение может прервать их обновление, либо каким- то образом отслеживать факт завершения обновления. По RefreshAll есть толпа обсуждений, но, правда, законченного решения проблемы нет. Всё же там можно будет, найти что-то полезное по поводу асинхронного обновления.
Успехов
...
Рейтинг: 0 / 0
Подключение к excel-листам
    #39249948
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvgСкорее всего в настройках подключения mdx запросов стоит включить синхронное обновление, иначе сохранение может прервать их обновление
Такая строка подключения
Provider=MSOLAP.4;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=profit;Data Source=...;MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error
Что тут нужно дописать?
...
Рейтинг: 0 / 0
25 сообщений из 48, страница 1 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Подключение к excel-листам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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