|
|
|
Supreme Being
      
участник
Last Login: 16.04.2008 11:44
Сообщ.: 366,
Visits: 2 473
|
|
В своем приложении я экспортирую данные листов Excel в xml файл.
Делаю я это примерно так:
Sub send_to_xml_Click()
Dim strConnectString$, strSQL$, strHeading$
Dim cnn As ADODB.Connection
Dim rs As Recordset
'листаем книгу
For i = 1 To ThisWorkbook.Sheets.Count
' For Each f In Worksheets(i).Range(Module3.scan_diap)
''''''''''''''''''''''''''и превращаем данные в record set
NameDir = ThisWorkbook.Path & "\"
strConnectString = "Provider=MSDASQL.1;Persist Security Info=True;" & _
"Data Source = Файлы Excel;Initial Catalog=" & NameDir
'strConnectString = "Provider=Microsoft.Jet.OLEDB.3.51;" & _
"Persist Security Info=False;" & _
"Data Source=C:\vb-db\xmltest.mdb"
'scan_diap
strSQL = "SELECT * FROM [" & Worksheets(i).Name & "$" & Module3.scan_diap & _
"] IN '" & ThisWorkbook.FullName & "' [Excel 5.0;HDR=NO;IMEX=2];"
strHeading$ = "preds"
Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset
cnn.Open strConnectString$ ' устанавливаем связь
Set rs = cnn.Execute(strSQL) ' создаем Recordset
Call ExportXML(rs, strHeading$, strCode, "d:\file1.xml") 'грузим в xml
' Next f
Next i
End Sub
Public Sub ExportXML(rs As Recordset, strHeading$, strCode, FileName$) '
' Экспорт таблицы RecordSet в XML файл
Dim xmlDoc As DOMDocument
' Cоздаем XMLDOM-объект
Set xmlDoc = RecordsetToXMLDOM(rs, strHeading$, strCode) '
' выводим его в виде отдельного файла
xmlDoc.Save FileName$
End Sub
Public Function RecordsetToXMLDOM(rs As Recordset, strHeading$, strCode) As DOMDocument '
'
' Преобразование Recordset в DOMDocument
'
Dim fldField As Field
Dim xmlDoc As DOMDocument
Dim xmlFields As IXMLDOMElement
Dim xmlField As IXMLDOMElement
Dim i&
' создание экземпляра объекта
Set xmlDoc = CreateObject("Microsoft.XMLDOM") ' New DOMDocument
' записываем XML-константу объекта
xmlDoc.loadXML "" + _
Replace("<" + strHeading + "/>", " ", "_")
' Replace("<" + strHeading + "/>", " ", "_")
With rs
' Вывод содержимого полей таблицы
.MoveFirst: i = 1
Do Until .EOF
' создание нового узла
Set xmlFields = xmlCode.documentElement.appendChild _
(xmlDoc.createElement("OneRow" + LTrim(Str(i))))
For Each fldField In rs.Fields ' запись полей записи
Set xmlField = xmlFields.appendChild( _
xmlDoc.createElement(Replace(fldField.Name, " ", "_")))
If IsNull(fldField.Value) = False Then
xmlField.Text = fldField.Value
End If
Next
.MoveNext ' к следующей записи набора
i = i + 1
Loop
End With
Set RecordsetToXMLDOM = xmlDoc ' возвращаем созданный объект
End Function
Полученный xml я предполагаю использовать для web отображения данных. Заставлять пользователя вручную копировать файл из локальной fs на сервер не есть хорошо. Очевидно, что метод xmlDoc.Save FileName$ не сработает, если я вместо локального пути укажу url удаленного web-сервера. Как решить эту проблему?
С уважением,
|
|
|
|
|
Supreme Being
      
участник
Last Login: 16.04.2008 11:44
Сообщ.: 366,
Visits: 2 473
|
|
Конечно я мог бы положить этот файл на сервер через подключение сетевого диска (API), но зная локальную сеть предприятия, где это будет работать, думаю, что это не приемлимо. Использование active-x ftp компонент сторонних производителей известных в сети, тоже не подойдет.
С уважением,
|
|
|
|
|
Supreme Being
      
участник
Last Login: 03.03.2008 16:40
Сообщ.: 443,
Visits: 4 574
|
|
| Ну, если в API есть функция загрузки URLDownloadToFile, должна быть и функция выгрузки. Я бы там поискал. Лежит она наверняка в urlmon.dll.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 16.04.2008 11:44
Сообщ.: 366,
Visits: 2 473
|
|
Спасибо за отклик. Буду искать.
С уважением,
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Можно еще два способа попробовать: 1) В Windows есть программа для работы с ftp с командной строки. У нее есть удобный параметр -s позволяющий подать на вход команды из внешнего файла. В первой строки пишем имя, во второй пароль, затем нужные команды по загрузке файла и, в конце, команда bye для отключения. Запустить внешнуюю программу из Excel не должно составить труда. 2) Организовать на веб-сервере страницу для upload-а файлов и обращаться к ней из Excel с помощью стандартного компонента XmlHttpRequest. На мой взгляд первый способ проще всего. Его недостаток в невозможности проконтролировать успех/неуспех операции по загрузке файла.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 16.04.2008 11:44
Сообщ.: 366,
Visits: 2 473
|
|
Спасибо за совет. 1 вариант будет запасным (очень трудно "уломать" заказчика поднять ftp сервер).
нашел пример: http://www.motobit.com/tips/detpg_uploadvbaie/
Попробовал на localhost
Call UploadFile("http://localhost", "C:\1.xml")
вроде все отрабатывает без ошибок, но файл не копируется.
С уважением,
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
babken76 (08.02.2007) нашел пример: http://www.motobit.com/tips/detpg_uploadvbaie/ Попробовал на localhost Call UploadFile("http://localhost", "C:\1.xml") вроде все отрабатывает без ошибок, но файл не копируется.А у тебя на localhost есть скрипт обрабатывающий upload? Без него работать не будет.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 16.04.2008 11:44
Сообщ.: 366,
Visits: 2 473
|
|
Bazile, ты как всегда прав. Не внимательно прочел. Не могу только его найти на этом сайте.
С уважением,
|
|
|
|
|
|
| | |