powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / как в ms sql в функции OPENDATASOURCE при импорте из EXCEL указать лист по номеру в списке
7 сообщений из 7, страница 1 из 1
как в ms sql в функции OPENDATASOURCE при импорте из EXCEL указать лист по номеру в списке
    #39960649
m830
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как в ms sql в функции OPENDATASOURCE при импорте из EXCEL указать лист по номеру в списке
...
Рейтинг: 0 / 0
как в ms sql в функции OPENDATASOURCE при импорте из EXCEL указать лист по номеру в списке
    #39960668
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m830
как в ms sql в функции OPENDATASOURCE при импорте из EXCEL указать лист по номеру в списке
https://stackoverflow.com/questions/24026408/sql-opendatasource-excel-sheet-with-hyphen-in-name
...
Рейтинг: 0 / 0
как в ms sql в функции OPENDATASOURCE при импорте из EXCEL указать лист по номеру в списке
    #39960678
m830
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это не мой случай
Мне нужно импортировать 1-лист из группы Excel-файлов. В каждом файле имя этого листа свое.
Как вариант, можно было бы сначала переименовать имя 1-го листа во всех файлах.
Как это программно сделать в ms sql ?
...
Рейтинг: 0 / 0
как в ms sql в функции OPENDATASOURCE при импорте из EXCEL указать лист по номеру в списке
    #39960681
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m830,

как при помощи MS SQL запустить ракету на Луну? Подбирайте подходящие инструменты для задачи.
...
Рейтинг: 0 / 0
как в ms sql в функции OPENDATASOURCE при импорте из EXCEL указать лист по номеру в списке
    #39960736
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m830
Это не мой случай
Мне нужно импортировать 1-лист из группы Excel-файлов. В каждом файле имя этого листа свое.
А, по номеру, сразу не понял.
m830
Как вариант, можно было бы сначала переименовать имя 1-го листа во всех файлах.
Как это программно сделать в ms sql ?
Разве что обратиться к файлу через Excel посредством OLE-объекта, так, например, можно узнать имена листов, или переименовать.
...
Рейтинг: 0 / 0
как в ms sql в функции OPENDATASOURCE при импорте из EXCEL указать лист по номеру в списке
    #39961021
m830
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробую так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
declare @cmd1 varchar(8000),  @ImportPath nvarchar(255), @FileName nvarchar(255), @Sheet nvarchar(255)

set @ImportPath = '\\s00-dbs09\SHARED\RGIS\Ежедневные_выгрузки_РГИС_с_1_мая_2020\'
select @FileName = @ImportPath+'094 - Выгрузка 15_05_2020.xlsx'
set @Sheet = 'Лист0'

exec master..xp_cmdshell 'Set xls = CreateObject(''Excel.Application'')'
set @cmd1 = 'Set wb = xls.Workbooks.Open FileName := '+@FileName
exec master..xp_cmdshell @cmd1
set @cmd1 = 'wb.Sheets(1).Name = '+@Sheet
exec master..xp_cmdshell @cmd1
exec master..xp_cmdshell 'wb.Save'
exec master..xp_cmdshell 'wb.Close'
exec master..xp_cmdshell 'xls.Quit'



Результат работы

Код: 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.
output
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL

(1 row(s) affected)

output
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL

(1 row(s) affected)

output
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'wb.Sheets' is not recognized as an internal or external command,
operable program or batch file.
NULL

(3 row(s) affected)

output
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'wb.Save' is not recognized as an internal or external command,
operable program or batch file.
NULL

(3 row(s) affected)

output
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'wb.Close' is not recognized as an internal or external command,
operable program or batch file.
NULL

(3 row(s) affected)

output
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'xls.Quit' is not recognized as an internal or external command,
operable program or batch file.
NULL

(3 row(s) affected)



Где собака порылась?
...
Рейтинг: 0 / 0
как в ms sql в функции OPENDATASOURCE при импорте из EXCEL указать лист по номеру в списке
    #39961035
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А надо как-то так
см. "With .OpenSchema(adSchemaTables)"

Код: vbnet
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.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
Private Sub btnLoadFile_Click()

  Dim file As String, str As String, rowCnt As Integer
  Dim xlsConn As ADODB.Connection, xlsList As String, xlsRs As ADODB.Recordset
  Dim FileId As Integer, f As ADODB.Field, sName As String
  
  file = GetSetting(CurrentProject.Name, Me.Name, "btnLoadFile_LastFile")
  
  file = Trim(SelectTxtFile(file))
  
  If file = "" Then
    MsgBox "Ôàéë íå óêàçàí.", Buttons:=vbOKOnly + vbInformation, Title:=Me.Name
    Exit Sub
  End If
  
  If (InStrRev(file, ".") = 0) Or (InStrRev(file, ".") <= InStrRev(file, "\")) Then
    file = file + ".xlsx"
  End If
  
  If Dir(file) = "" Then
    MsgBox "&#212;&#224;&#233;&#235; [" + file + "] &#237;&#229; &#241;&#243;&#249;&#229;&#241;&#242;&#226;&#243;&#229;&#242;.", Buttons:=vbOKOnly + vbExclamation, Title:=Me.Name
    Exit Sub
  End If
  
  DoCmd.Hourglass True
  
  SaveSetting CurrentProject.Name, Me.Name, "btnLoadFile_LastFile", file
  
  sName = ""
  
  On Error GoTo Err_Click
  
  Set xlsConn = New ADODB.Connection
  
  With xlsConn
  
    .Provider = "MSDASQL"
    .ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
                        "DBQ=" + file + ";" & _
                        "ReadOnly=TRUE;"

    .Open
    
    xlsList = ""
    
    With .OpenSchema(adSchemaTables)
    
        While Not .EOF And (xlsList = "")
          
            str = .Fields("TABLE_NAME").value
            
            With xlsConn.Execute("SELECT * FROM [" + str + "] where 1 = 2", Options:=adCmdText)
              
              If .Fields(0).Name = "&#207;&#224;&#247;&#234;&#224;" Then xlsList = str
              
              .Close
            
            End With
            
            .MoveNext
          
        Wend
        
    End With
    
    If xlsList = "" Then
    
        MsgBox "&#203;&#232;&#241;&#242; &#241; &#228;&#224;&#237;&#237;&#251;&#236;&#232; &#226; &#244;&#224;&#233;&#235;&#229; [" + file + "] &#237;&#229; &#237;&#224;&#233;&#228;&#229;&#237;. &#203;&#232;&#241;&#242; &#232;&#249;&#229;&#242;&#241;&#255; &#239;&#238; &#231;&#224;&#227;&#238;&#235;&#238;&#226;&#234;&#243; &#241;&#242;&#238;&#235;&#225;&#246;&#224; [&#207;&#224;&#247;&#234;&#224;].", Buttons:=vbOKOnly + vbExclamation, Title:=Me.Name
    
    Else
    
        Set xlsRs = .Execute("SELECT * FROM [" + xlsList + "] where [&#205;&#238;&#236;&#229;&#240; &#228;&#238;&#234;&#243;&#236;&#229;&#237;&#242;&#224;] is not null and [&#205;&#238;&#236;&#229;&#240; &#228;&#238;&#234;&#243;&#236;&#229;&#237;&#242;&#224;] <> ''", Options:=adCmdText + adAsyncFetch)
        
        rowCnt = 0
        
        With New ADODB.Command
          
          .CommandText = "Finances.accTicketsRC_FileId"
          .CommandType = adCmdStoredProc
          .CommandTimeout = 120
          .NamedParameters = True
          .ActiveConnection = CurrentProject.Connection
          .Parameters.Append .CreateParameter("Return", adInteger, adParamReturnValue)
          .Parameters.Append .CreateParameter("@File", adVarWChar, adParamInput, 512, file)
          .Parameters.Append .CreateParameter("@Id", adInteger, adParamOutput)
          .Execute Options:=adExecuteNoRecords
          
          FileId = .Parameters("@Id")
          
        End With
        
        With New ADODB.Recordset
          .Open Source:="select top(0) * from Finances.TicketsRC_ExcelFileLines" _
                 , ActiveConnection:=CurrentProject.Connection _
                 , CursorType:=adOpenKeyset _
                 , LockType:=adLockBatchOptimistic _
                 , Options:=adCmdText
        
          While Not xlsRs.EOF
            
            .AddNew
            rowCnt = rowCnt + 1
            
            .Fields("FileId") = FileId
            
            For Each f In xlsRs.Fields
              sName = f.Name
              .Fields(sName) = f.value
            Next
            sName = ""
            
            xlsRs.MoveNext
          
          Wend
          
          .UpdateBatch
          .Close
        
        End With

        xlsRs.Close
        
        DoCmd.Hourglass False
    
        MsgBox "&#196;&#224;&#237;&#237;&#251;&#229; &#231;&#224;&#227;&#240;&#243;&#230;&#229;&#237;&#251; &#232;&#231; [" + file + "]. &#194;&#241;&#229;&#227;&#238; &#241;&#242;&#240;&#238;&#234;: " + CStr(rowCnt) + ".", Buttons:=vbOKOnly, Title:=Me.Name
        
        btnShowFiles_Click
        
        'Hold SHIFT and CTRL, then press the DOWN Arrow to Expand all SubDatasheets
        SendKeys "+^({DOWN})"
        
    End If
    
    Set xlsRs = Nothing
  
  End With
  
  Set xlsConn = Nothing
  
  DoCmd.Hourglass False
  
Exit Sub

Err_Click:
    
    Set xlsRs = Nothing
    Set xlsConn = Nothing
    
    DoCmd.Hourglass False
    If sName <> "" Then sName = vbCrLf + " &#200;&#236;&#255; &#234;&#238;&#235;&#238;&#237;&#234;&#232;: [" + sName + "]"
    MsgBox Error_Descriptions.Translate(err.description) + sName, Title:=Me.Name

End Sub

Private Sub btnLoadFileTxt_Click()

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


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