powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как из MSSQL создать Excel-файл?
20 сообщений из 20, страница 1 из 1
Как из MSSQL создать Excel-файл?
    #39840831
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О ГУРУ MSSQL, Здравствуйте!
Подскажите, как из MSSQL создать Excel-файл?
Заполнить уже имеющийся Excel-файл я могу, но для этого файл уже должен быть создан:
Код: sql
1.
2.
3.
insert into OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Excel 8.0;Database=\\WDMYCLOUD\Public\обмен\tmpLebed\testLEBED.xlsx;', 
    'SELECT * FROM [Лист1$]') select [name] from [FB].[dbo].[Brand]



Спасибо заранее за любую помощь!
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39840951
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-,

Существует - использование CLR процедур, ReportingServices (рисуете отчет) или Integration Services (C# скрипт для рыбы + выгрузка потоками).
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39840957
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нашел вот такой вариант одновременного создания и заполнения Excel (правда только .xls , с .xlsx не получается):
Код: sql
1.
2.
3.
4.
5.
declare @sql varchar(8000), @file_name varchar(100)
set @file_name='\\WDMYCLOUD\Public\обмен\tmpLebed\MYNEWLEBEDTEST.xls'

set @sql='exec master..xp_cmdshell ''bcp "select * from dbp.[dbo].[tblCDEK_CitiesFORTEST] " queryout "' + @file_name +'" -C ACP -T -c'''
exec(@sql)


ещё минус этого варианта - не выводятся наименования столбцов (может есть способ создания названия столбцов?)
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39840959
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39840963
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK, спасибо за ссылку. Как раз копаю её уже час)))

Но тут есть минус - я создаю эту процедуру в одной БД, а вытаскиваю данные из другой - в этом случае названия столбцов отсутствуют.
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39841020
Почему не сделать через SSRS? Клепаете rdl + подписка с выгрузкой на FTP
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39841046
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Syrovatchenko,

народ предпочитает нестабильные решения и с дырами в безопасности.
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39841201
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для простых выгрузок - используйте excel xml 2003.
По форуму бегала вполне рабочая процедура, генерирующая xml файл в формате exel xml 2003.
С т.з. пользователя - разницы никакой. Также по двум кликам экселям открывается.

Код: sql
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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

---------------------------------------
-- Usage:
-- 
-- Declare @ret int
-- exec @ret = [dbo].[OutToExcelFile] 'dbo.test', '', 'D:\MMSSQL\test.xml'
-- Select @ret
-- 
-- Параметры:
-- @object - table, view или функция, возвращающая табличное значение
-- @query - дополнительный отбор, должен выглядеть как 'Where ... and ...'
-- @path - Имя файла и путь. Папка может быть сетевой, но SQLSERVER должен иметь в нее разрешения. 
---------------------------------------

CREATE proc [dbo].[OutToExcelFile]
	 @object sysname
	,@query nvarchar(4000)
	,@path sysname
as
Begin
	set nocount on;
	set xact_abort on;
	
	DECLARE	@Result Int
	Declare @Command nvarchar(4000)

	SET	 @Command = 'bcp "' 
	+ Replace(Replace(dbo.fnExcelQuery(@object, @query),'"',''''''),'
',' ') -- должно быть именно так, это перевод строки!			
	+ '" queryout "' + @path + '" -S . -T -q -w'

	--print @Command
	EXEC @Result = master.dbo.xp_CmdShell @Command, no_output
		
	IF (@Result = 0) return 0
		ELSE return -1 -- была ошибка
End
GO

CREATE FUNCTION [dbo].[fnExcelQuery] (
	 @Object	SysName
	,@Query		NVarChar(max)
) RETURNS NVarChar(max) AS BEGIN RETURN ((
SELECT	  CASE	WHEN C.column_id = 1
		THEN ' '
		ELSE '
	,'	END + 'NULL AS [text()],'
	+ CASE	WHEN C.system_type_id IN (48,52,56,59,60,62,106,108,122,127)
							THEN '''Number''  '
		WHEN C.system_type_id IN (58,61)	THEN '''DateTime'''
		WHEN C.system_type_id = 104		THEN '''Boolean'' '
							ELSE '''String''  '
		END + 'AS [Cell/Data/@s:Type],'
	+ QuoteName(C.name) + Space(Max(Len(C.name))OVER() - Len(C.name)) + ' AS [Cell/Data/text()]'
		AS [Row/text()]
	, IsNull('<Column s:StyleID="'
	+ CASE	WHEN C.system_type_id IN (48,52,56,59,62,106,108,127)
							THEN 'Number'
		WHEN C.system_type_id IN (60,122)	THEN 'Currency'
		WHEN C.system_type_id IN (58,61)	THEN 'DateTime'
		WHEN C.system_type_id = 104		THEN 'Boolean'
		END + '" />','<Column />')
		AS [Style/text()]
	,'<Cell><Data s:Type="String">' + RePlace((SELECT C.name AS [*] FOR XML Path('')),'''','&apos;') + '</Data></Cell>'
		AS [Name/text()]
FROM	sys.columns C
WHERE	C.[object_id] = Object_ID(@Object)
ORDER BY C.column_id
FOR XML Path(''),Type).query('(<Row>{/Row/text()}</Row>,<Style>{/Style/text()}</Style>,<Name>{/Name/text()}</Name>)').value('fn:concat("
;WITH XMLNAMESPACES(Default ''urn:schemas-microsoft-com:office:spreadsheet'',''urn:schemas-microsoft-com:office:spreadsheet'' AS s)
SELECT	N''<?xml version=""1.0"" encoding=""UTF-16""?><?mso-application progid=""Excel.Sheet""?>'' + Convert(NVarChar(max),IsNull((
SELECT	",(/Row/text())[1],"
FROM	",sql:variable("@Object"),sql:variable("@Query"),"
FOR XML Path(''Row''),Root(''Table''),Type),'''').query(''
<Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet"" xmlns:s=""urn:schemas-microsoft-com:office:spreadsheet"">
 <Styles>
  <Style s:ID=""Boolean""><NumberFormat s:Format=""True/False"" /></Style>
  <Style s:ID=""Currency""><NumberFormat s:Format=""Currency"" /></Style>
  <Style s:ID=""Number""><NumberFormat s:Format=""General Number"" /></Style>
  <Style s:ID=""DateTime""><NumberFormat s:Format=""General Date"" /></Style>
 </Styles>
 <Worksheet s:Name=""",sql:variable("@Object"),""">
  <Table>
   ",(/Style/text())[1],"   &lt;Row&gt;
   ",(/Name/text())[1],"   &lt;/Row&gt;
   {/Table/Row}
  </Table>
 </Worksheet>
</Workbook>''))")','NVarChar(max)')
) END
GO



Авторство не моё, на этом же форуме нашел.
Автору - спасибо!
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39841237
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggsterПо форуму бегала вполне рабочая процедура, генерирующая xml файл в формате exel xml 2003.
Всегда удивляло желание сделать что угодно непременно средствами сервера - отправить XmlHttpRequest, что-то сделать в AD, или вот как здесь - эксель сгенерить. Зачем нужен этот хардкор с динамическим XQuery, когда вполне можно задействовать CLR-процедуру, или внешнюю программу, которая в лаконичном и удобоваримом виде сделает то же самое с помощью нормально читаемого XSL-шаблона (или с помощью всего предложенного выше).
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39841324
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

объясняется просто - всё от недостатка образования.
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39841354
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав КолосовSergey Syrovatchenko,

народ предпочитает нестабильные решения и с дырами в безопасности.

Объясните, пожалуйста, где же в том коде, что я нашел, дыра безопасности? И почему решение нестабильно?

У меня задача изначально стояла такая - автоматически из MSSQL (задание по расписанию) генерить и отправлять письма с вложениями (Excel-файлы) с данными из Сайта и MSSQL и нашего клиента MS Access.
Можете предложить другой вариант решения?
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39841364
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-У меня задача изначально стояла такая - автоматически из MSSQL (задание по расписанию) генерить и отправлять письма с вложениями (Excel-файлы) с данными из Сайта и MSSQL и нашего клиента MS Access.
Можете предложить другой вариант решения?

Джоб и SSIS-пакет
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39841369
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-У меня задача изначально стояла такая - автоматически из MSSQL (задание по расписанию) генерить и отправлять письма с вложениями (Excel-файлы) с данными из Сайта и MSSQL и нашего клиента MS Access.
Можете предложить другой вариант решения?
SSRS-отчет и подписка

в виде бонуса получишь возможность разных экселевских "бантиков" в отчете, в плане шрифтов, фонов и т.д.
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39841376
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джоб и SSIS-пакет
SSRS-отчет и подписка
...
Данными средствами возможно "вытянуть данные" с сайта (MySQL) и одновременно запустить пару-тройку процедур в MSSQL?
А после этого сформировать письмо на Email Получателя (с вложениями) с определенного почтового адреса?
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39841516
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-Джоб и SSIS-пакет
SSRS-отчет и подписка
...
Данными средствами возможно "вытянуть данные" с сайта (MySQL) и одновременно запустить пару-тройку процедур в MSSQL?
А после этого сформировать письмо на Email Получателя (с вложениями) с определенного почтового адреса?SSIS-пакетом можно.

Но, конечно, всё зависит от конкретной задачи.

1) Вариант от uaggster очень хорош, быстрый, стабильный и надёжный, но не позволяет конструировать документы по шаблонам.

2) Решение на SSIS более трудоёмко, громоздко, требует более квалифицированного программиста, то есть дороже. Медленее вносить изменения. Медленнее работает (ИМХО). Ну и сложнее (существенно дороже) в эксплуатации.
Но зато с шаблонами, а это очень ценно.

3) Вариант с OPENROWSET, как любой вариант с работающим из MSSQL Эксель-провайдером, ненадёжный и требует плясок с драйверами (притом на сервере!). Но зато три строки кода. Но заставить работать эти три строки кода дано не каждому.
Вот одно из обсуждений: https://stackoverflow.com/questions/909933/sql-server-export-to-excel-with-openrowset
, и там такой код (провайдер, как видите, другой):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DECLARE @myfile varchar(800)

SET @myfile = 'C:\template.xls'

EXEC ('
insert into OPENROWSET(''Microsoft.Jet.OLEDB.4.0'', 
''Excel 8.0;Database=' + @myfile + ';'', 
''SELECT * FROM [SheetName$]'') 
select * from myTable
')
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39841582
zindur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правда не совсем "Excel" но можно сохранить как CSV файл - правда надо немножко поправить скрипт
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39841595
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xlsx это зазипованный xml с которым SQL Server прекрасно работает
(так-же как и наличие возможности вызова внешних команд/скриптов, cmd PowerShell и пр.),
так что рассыпай ворох граблей, изобретай велосипед и начинай там ездить сколько угодно.
хоть как советуют выше - сначала в CSV а потом конвертация в xlsx
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39841711
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто копируйте пустой файл на место его и открывайте
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39842026
zindur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zindurправда не совсем "Excel" но можно сохранить как CSV файл - правда надо немножко поправить скрипт

DumpDataFromTable

почемуто линк потерялся по пути

DumpDataFromTable
...
Рейтинг: 0 / 0
Как из MSSQL создать Excel-файл?
    #39842445
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры ПавловныuaggsterПо форуму бегала вполне рабочая процедура, генерирующая xml файл в формате exel xml 2003.
Всегда удивляло желание сделать что угодно непременно средствами сервера - отправить XmlHttpRequest, что-то сделать в AD, или вот как здесь - эксель сгенерить. Зачем нужен этот хардкор с динамическим XQuery, когда вполне можно задействовать CLR-процедуру, или внешнюю программу, которая в лаконичном и удобоваримом виде сделает то же самое с помощью нормально читаемого XSL-шаблона (или с помощью всего предложенного выше).
Ну, во-первых, хардкор с динамическим sql - там только с вызовом bcp из текста хранимой процедуры.
Если на сервере взведено Filestream, то ничего этого не нужно, можно создавать файлы прямо в filetable одним запросом.
А во вторых - чем сборка "выходного" xml, сделанная таким образом хуже, и малочитабельней чем xslt преобразование, которое, к тому же, выполняется черте где?
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как из MSSQL создать Excel-файл?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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