powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MSSQL & EXCEL
19 сообщений из 19, страница 1 из 1
MSSQL & EXCEL
    #32032898
crot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Privetstvuu.U menia problema s DTS packagem iz kotorogo ia sohraniau datu v EXCEL.
Rabotaet normalno, no kazdii raz dobavliaet datu v EXCEL, a mne nado chtobi perepisivala (overwrite).
Podskazite pozaluista, kak otchistit EXCEL pered dobavleniem novih dannih?

Spasibo
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32032904
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Podskazite pozaluista, kak otchistit EXCEL pered dobavleniem novih dannih?

Удалить файл/workbook/sheet и создать заново
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32032906
crot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Spasibo,
tolko ia ne znau a kak sdelat eto v ramkah DTS Packaga?
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32032907
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то т.к. работа с Excel файлом идет через Jet, то для создания/удаления sheet-ов можно использовать Execute SQL Task и "нормальный" SQL CREATE TABLE/DROP TABLE (правда это не T-SQL, поэтому есть некоторые различия в формате запросов)

Либо через ActiveX Scipt

Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
Function Main()

	Dim FileName
	FileName = DTSGlobalVariables( "OutputFileFullName" ).Value

	Dim fso
	Set fso = CreateObject( "Scripting.FileSystemObject" )
	If (fso.FileExists(FileName)) Then
		fso.DeleteFile FileName, TRUE
	End If

	If (fso.FileExists(FileName)) Then
		Main = DTSTaskExecResult_Failure
	Else
		Dim objXL
		Set objXL = CreateObject( "Excel.Application" )

		objXL.Visible = FALSE
		objXL.WorkBooks.Add

		Dim SheetsCnt
		Set SheetsCnt = objXL.WorkBooks( 1 ).Sheets
		While SheetsCnt.Count >  1 
			objXL.WorkBooks( 1 ).Sheets(SheetsCnt.Count).Delete
		Wend

		objXL.WorkBooks( 1 ).Sheets( 1 ).Activate()
		objXL.WorkBooks( 1 ).SaveAs(FileName)
		objXL.Quit
		Set objXL = Nothing

		If (fso.FileExists(FileName)) Then
			Main = DTSTaskExecResult_Success
		Else
			Main = DTSTaskExecResult_Failure
		End If
	End If
End Function

...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32032993
crot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory, chto-to ono u menia ne rabotaet.
Posle zapuska ActiveX scripta pokazivaet sleduushee soobshenie:

"! The selected sheet(s) will be permanemtly deleted.
|To delete the selected sheets press OK
| To cancel press Cancel"

A posle etogo zavisaet.
V chem delo?
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32033009
MIKLUHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Может быть установка objXL.DisplayAlerts = FALSE до удаления листов Вам поможет?

Желаю успехов!
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32033133
crot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MIKLUHA, zdravstvuite, a gde etu funkciuu na primere kodaprislannogo Glory nuzno postavit?
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32033136
crot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sechas poproboval udalit dannie cheres "Execute SQL Task'" v DTS package (proboval postavit drop and recreate i delete) vidaet sleduushuu oshibku:
"deliting data is not supported by this ISAM".

Kto_nibud znaet chto eto znachit?
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32033143
MIKLUHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Строчка добавляется перед удалением лишних листов (Sheets). Например, так:

...
objXL.Visible = FALSE
objXL.WorkBooks.Add
objXL.DisplayAlerts = FALSE

Dim SheetsCnt
...

Желаю успехов.
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32033145
crot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ogromnoe spasibo vsem.
Poslednee predlozenie eshe ne testiroval, poluchilos po drugomu. No kak-to stranno, rasskazu, mozet komu prigoditsia.
Kogda delal cheres "Execute SQL Task'" v DTS package (proboval postavit drop and recreate i delete) vidavala sleduushuu oshibku:
"deliting data is not supported by this ISAM".

No kogda delaesh tot_ze samii peregon, no ispolzuia "DTS Wizard" i zatem sohraniaesh kak package, to rabotaet.
Samoe smeshnoe, chto cod bil tot-ze samim (drop/create table) no pochemuto ne rabotalo.

Vsem uspehov
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32033216
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет
Я делал так: открывается файл, выбирается нужный лист, диапазон и очищается

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Function Main()
	Set xls = CreateObject( "Excel.Application" )
	xls.visible = false
	xls.Workbooks.Open  "c:\work\scripts\xls\Other\Currencies & Countries.XLS" 
	Set book = xls.Workbooks( 1 )

	For each foo in book.Worksheets
		foo.activate
		foo.range( "A2:F500" ).delete
	next
	book.close true
	xls.quit

	Main = DTSTaskExecResult_Success
End Function


Таким образом можно избирательно очищать данные, сохраняя верстку, расцветку и т.п.
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32033242
crot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AAron, spasibo , rabotaet, kak chasi.
Prosto i to chto nado.
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32033244
crot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AAron, a etot script rabotaet tolko na MSSQL 2000.
U menia na 2000 rabotaet, a na MSSQL 7 net, na pervoi strochke vidaet oshibku "read Only".
Tak i dolzno bit ili ctoto ne pravilno?
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32033428
denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А где взять описание Execute SQL Task.
А то есть проблема.
Нужно взять из Excel определенные значения из ячейки, обработать и запихнуть в таблицу SQL и в другой Excel.
Кто нить занимался этой задачкой?
Может Есть примерчики ссылки в Инете?
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32033446
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно взять из Excel определенные значения из ячейки, обработать и запихнуть в таблицу SQL и в другой Excel.
Кто нить занимался этой задачкой?


А причем здесь Execute SQL Task ? Для таких вещей есть Transformation Task

У вас должно получиться что-то такое

Excel Connection1 --Transformation Task1 --> SQL Conection --Transformation Task2 --> Excel Connection2

И в каждой Transformation Task совершаете нужные вам действия
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32033602
denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Transf task наверно не пойдет, т.к. это нужно делать с клиентского приложения, в котором есть возможность запускать хранимые процедуры на SQL сервере.
Т.е. интересует можно ли в хранимой процедуре открыть
файл Excel (чтобы появился диалог открытия нужногг файла) взять из опред.листа Excel данные из опред. ячеек и поместить в таблицу.
Выше написано что это делается через ActiveX и VB.
Только поподробней -куда этот код записывать (в SP)?
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32033653
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. интересует можно ли в хранимой процедуре открыть файл Excel (чтобы появился диалог открытия нужнго файла)

Выдача всяческих интерактивных окон - это прерагатива клиентского приложения, но никак не хранимой процедуры. Поэтому в T-SQL подобных операторов нет.

Выше написано что это делается через ActiveX и VB.
Только поподробней -куда этот код записывать (в SP)?


Данные выше примеры выполняются в DTS Package в специальном ActiveX Scipt Task. А DTS Package не то же самое, что хранимая процедура

Для работы с COM объектами в самом T-SQL имеется набор процедур, имена которых начинаются с sp_OA.
Только IMHO это не лучший вариант, особенно для работы.
Лучше все-таки рассмотреть варианты
- linked server
- DTS Package
- клиентское приложение
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32033657
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот вам пример работы с простым текстовым файлом

Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
DECLARE @FileName varchar( 255 ), 
@Text1 varchar( 8000 ),
@FS int, 
@OLEResult int, 
@FileID int, 
@hr int,
@source varchar( 30 ), 
@desc varchar ( 200 )

EXECUTE @OLEResult = sp_OACreate 'Scripting.FileSystemObject', @FS OUTPUT

IF @OLEResult <>  0  
BEGIN
PRINT 'Scripting.FileSystemObject'
GOTO Error_Handler
END

execute @OLEResult = sp_OAMethod @FS,'CreateTextFile',@FileID OUTPUT, 'c:\func.txt'
IF @OLEResult <>  0  
BEGIN
PRINT 'CreateTextFile'
GOTO Error_Handler
END

execute @OLEResult = sp_OAMethod @FileID, 'WriteLine', NULL, 'dsfgsdfgsdf'
IF @OLEResult <>  0  
BEGIN
PRINT 'WriteLine'
GOTO Error_Handler
END

Print @Text1
goto Done

Error_Handler: 
PRINT '*** ERROR ***'
EXEC @hr = sp_OAGetErrorInfo null, @source OUT, @desc OUT
SELECT hr = CONVERT (binary( 4 ), @hr), source = @source, description = @desc

Done:
EXECUTE @OLEResult = sp_OADestroy @FileID
EXECUTE @OLEResult = sp_OADestroy @FS



PS
Думаю, что при работе с Excel у вас получится тот еще код. Так что подумайте еще раз
...
Рейтинг: 0 / 0
MSSQL & EXCEL
    #32034399
Фотография MarchCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Glory

О а я и не предпологал что T-SQL может пользоваться
объектами WinScriptHost - вот это номер!!!

:))))))) В понедельник опробую. Спасибо за пример!
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MSSQL & EXCEL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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