Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Список всех листов Excel  [new]
NNNata:)
Member

Откуда:
Сообщений: 146
Все никак не решу до конца свою проблему, кое-где всплывают новые вопросы. Помогите написать SQL запрос возвращающий названия всех листов Excel документа. Спасибо
15 ноя 05, 12:08    [2069471]     Ответить | Цитировать Сообщить модератору
 Re: Список всех листов Excel  [new]
Breakneck
Member

Откуда: Kiev
Сообщений: 2454
А SQL тут-то причем? Это гораздо ближе к VBA-VBS
15 ноя 05, 12:18    [2069525]     Ответить | Цитировать Сообщить модератору
 Re: Список всех листов Excel  [new]
Glory
Member

Откуда:
Сообщений: 104760
NNNata:)
Все никак не решу до конца свою проблему, кое-где всплывают новые вопросы. Помогите написать SQL запрос возвращающий названия всех листов Excel документа. Спасибо


sp_tables_ex 'MyExcelLinkedServer'
15 ноя 05, 12:20    [2069540]     Ответить | Цитировать Сообщить модератору
 Re: Список всех листов Excel  [new]
NNNata:)
Member

Откуда:
Сообщений: 146
Дайте какую-то идею в реализации, по сути мой DTS Package выдает ошибку в случае когда не находит лист который я ему пишу.
15 ноя 05, 12:24    [2069577]     Ответить | Цитировать Сообщить модератору
 Re: Список всех листов Excel  [new]
Glory
Member

Откуда:
Сообщений: 104760
NNNata:)
Дайте какую-то идею в реализации, по сути мой DTS Package выдает ошибку в случае когда не находит лист который я ему пишу.

Можно ли попросить вас прочитать Рекомендации по оформлению вопросов и слеодовать им ?
Кончено, вам все едино что SQL что DTS, но жалко своего времени на выяснение всех этих "мелочей"
15 ноя 05, 12:27    [2069592]     Ответить | Цитировать Сообщить модератору
 Re: Список всех листов Excel  [new]
NNNata:)
Member

Откуда:
Сообщений: 146
Glory
sp_tables_ex 'MyExcelLinkedServer'

Glory не обижайтесь, но по моему я довольно-таки четко сформулировала вопрос: каким образом мне получить наименования всех листов Excel-овского документа? В DTS конструкторе у меня стоит Connection c Excel, а что далее не знаю:( Создала Execute Sql Task и определила необходимый Connection, а в Sql statement поместила select sp_tables_ex , но он мне выдает "Unable to parse this query".как разрешить это?
15 ноя 05, 13:48    [2070105]     Ответить | Цитировать Сообщить модератору
 Re: Список всех листов Excel  [new]
Glory
Member

Откуда:
Сообщений: 104760
Glory не обижайтесь, но по моему я довольно-таки четко сформулировала вопрос: каким образом мне получить наименования всех листов Excel-овского документа?
Я вам тоже привел четкий ответ как получить список листов Excel-овского документа через linked server.

В DTS конструкторе у меня стоит Connection c Excel, а что далее не знаю:(
Где в теме топика или первом посте упоминался DTS ? Или вы считаете что TSQL и DTS - это одно и тоже ?
15 ноя 05, 13:58    [2070182]     Ответить | Цитировать Сообщить модератору
 Re: Список всех листов Excel  [new]
NNNata:)
Member

Откуда:
Сообщений: 146
Glory
Где в теме топика или первом посте упоминался DTS ? Или вы считаете что TSQL и DTS - это одно и тоже ?

Нет не считаю что это одно и тоже, буду знать и писать(я про DTS)!!!
А насчет моей проблемы (решение для DTS) нет никаких идей?
15 ноя 05, 14:15    [2070305]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Список всех листов Excel  [new]
kamosion
Member

Откуда:
Сообщений: 3
Наверняка сюда заглянут как и я. Поэтому отвечаю на "поставленный" вопрос =).
как получить список всех листов Excel документа с помощью SQL запроса. Не самый оптимальный вариант, так что если
необходимо обрабатывать большое кол-во документов то может потребоваться модификация.
чистый SQL запрос сделать не получится из-за ограничений SQL SERVER (sp_dropserver и т.д.)
либо явно добавлять все файлы через sp_addlinkedserver.
-- добавляем разрешения
exec sp_configure 'Ad Hoc Distributed Queries',1
go
EXEC sp_configure 'xp_cmdshell', 1
GO
reconfigure
go
if object_id('GetXLSSheets') is not null
	drop procedure GetXLSSheets
go
create procedure dbo.GetXLSSheets(@FileNameMask nvarchar(1000),@outtabsql varchar(8000) OUTPUT)
WITH EXECUTE AS CALLER
-- get all tables from external datasource
as
begin
declare @sql as nvarchar(4000);

declare @files table(name varchar(250))
set @sql='dir /b/s '+@FileNameMask
insert into @files
exec master..xp_cmdshell @sql

select @outtabsql=''
set @sql=''

select @sql=@sql+'exec sp_dropserver xls_tmp'+char(13)+
'EXEC sp_addlinkedserver ''xls_tmp'',''Jet 4.0'',''Microsoft.Jet.OLEDB.4.0'','''+name+''',NULL,''Excel 5.0;HDR=NO'''+char(13)+
'select @out=@out+'' union all select '''''+name+''''' as filename, ''''''+table_name+'''''' as sheetname'' from openquery(ls,''EXEC sp_tables_ex xls_tmp'')'+char(13)
from @files where name is not null
EXEC sp_executesql @sql, N'@out varchar(8000) OUTPUT',@out=@outtabsql OUTPUT
select @outtabsql=substring(@outtabsql,12,8000)
end

пример вызова.
-- здесь получаем список всех листов для всех XLS файлов в share ресурсе. 
-- share необходимо заменить на имя компьютера в сети где распологаются excel файлы.
declare @sql as nvarchar(4000);
exec dbo.GetXLSSheets '\\share\*.xls', @sql OUTPUT
declare @sheets as table(filename varchar(200),sheetname varchar(200))
insert @sheets
EXEC sp_executesql @sql
select * from @sheets
11 май 09, 00:12    [7166179]     Ответить | Цитировать Сообщить модератору
 Re: Список всех листов Excel  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34014
Блог
проще написать процедуру из 2х строчек на любом .net-языке, а затем просто подключить ее )
11 май 09, 03:50    [7166330]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Список всех листов Excel  [new]
moscas
Member

Откуда:
Сообщений: 58
Процедура из последнего камента вылетает с ошибкой

автор
Could not find server 'ls' in sys.servers.


Я чёто не пойму, откуда в ней подразумевается линкед сервак ls?
24 дек 13, 12:37    [15338824]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить