Вернуться   Форум программистов > Форум Программирование > Форум VBA

VBA

Программирование на VBA

Ответ
 
Старый 06.02.2007, 22:36   #1
babken76
Местный
 
Регистрация: 03.08.2004
Сообщений: 363
babken76 пока не определено
По умолчанию Экспорт данных листов excel в xml

В своем приложении я экспортирую данные листов Excel в xml файл.

Делаю я это примерно так:



Код
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
156
157
158
159
160
161
162
163
 
 
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-dbxmltest.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 "<?xml version=""1.0"" encoding=""windows-1251"" ?>" + _
 
    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-сервера. Как решить эту проблему?



С уважением,
babken76 вне форума  
Старый 06.02.2007, 23:25   #2
babken76
Местный
 
Регистрация: 03.08.2004
Сообщений: 363
babken76 пока не определено
По умолчанию RE: Экспорт данных листов excel в xml

Конечно я мог бы положить этот файл на сервер через подключение сетевого диска (API), но зная локальную сеть предприятия, где это будет работать, думаю, что это не приемлимо. Использование active-x ftp компонент сторонних производителей известных в сети, тоже не подойдет.



С уважением,
babken76 вне форума  
Старый 08.02.2007, 18:06   #3
Johny Walker
Местный
 
Регистрация: 31.01.2005
Сообщений: 417
Johny Walker пока не определено
По умолчанию RE: Экспорт данных листов excel в xml

Ну, если в API есть функция загрузки URLDownloadToFile, должна быть и функция выгрузки. Я бы там поискал. Лежит она наверняка в urlmon.dll.
Johny Walker вне форума  
Старый 08.02.2007, 19:50   #4
babken76
Местный
 
Регистрация: 03.08.2004
Сообщений: 363
babken76 пока не определено
По умолчанию RE: Экспорт данных листов excel в xml

Спасибо за отклик. Буду искать.



С уважением,
babken76 вне форума  
Старый 08.02.2007, 20:52   #5
bazile
Местный
 
Регистрация: 05.01.2001
Сообщений: 6,924
bazile пока не определено
По умолчанию RE: Экспорт данных листов excel в xml

Можно еще два способа попробовать:
1) В Windows есть программа для работы с ftp с командной строки. У нее есть удобный параметр -s позволяющий подать на вход команды из внешнего файла. В первой строки пишем имя, во второй пароль, затем нужные команды по загрузке файла и, в конце, команда bye для отключения. Запустить внешнуюю программу из Excel не должно составить труда.
2) Организовать на веб-сервере страницу для upload-а файлов и обращаться к ней из Excel с помощью стандартного компонента XmlHttpRequest.
На мой взгляд первый способ проще всего. Его недостаток в невозможности проконтролировать успех/неуспех операции по загрузке файла.
bazile вне форума  
Старый 08.02.2007, 21:29   #6
babken76
Местный
 
Регистрация: 03.08.2004
Сообщений: 363
babken76 пока не определено
По умолчанию RE: Экспорт данных листов excel в xml

Спасибо за совет. 1 вариант будет запасным (очень трудно "уломать" заказчика поднять ftp сервер).

нашел пример: http://www.motobit.com/tips/detpg_uploadvbaie/

Попробовал на localhost

Call UploadFile("http://localhost", "C:1.xml")

вроде все отрабатывает без ошибок, но файл не копируется.



С уважением,
babken76 вне форума  
Старый 08.02.2007, 21:53   #7
bazile
Местный
 
Регистрация: 05.01.2001
Сообщений: 6,924
bazile пока не определено
По умолчанию RE: Экспорт данных листов excel в xml

Цитата:
babken76 (08.02.2007)
нашел пример: http://www.motobit.com/tips/detpg_uploadvbaie/
Попробовал на localhost
Call UploadFile("http://localhost", "C:1.xml")
вроде все отрабатывает без ошибок, но файл не копируется.
А у тебя на localhost есть скрипт обрабатывающий upload? Без него работать не будет.
bazile вне форума  
Старый 08.02.2007, 22:06   #8
babken76
Местный
 
Регистрация: 03.08.2004
Сообщений: 363
babken76 пока не определено
По умолчанию RE: Экспорт данных листов excel в xml

Bazile, ты как всегда прав. Не внимательно прочел. Не могу только его найти на этом сайте.



С уважением,
babken76 вне форума  
Старый 29.05.2007, 23:12   #9
babken76
Местный
 
Регистрация: 03.08.2004
Сообщений: 363
babken76 пока не определено
По умолчанию RE: Экспорт данных листов excel в xml

to Bazile:

Цитата:

1) В Windows есть программа для работы с ftp с командной строки. У нее есть удобный параметр -s позволяющий подать на вход команды из внешнего файла. В первой строки пишем имя, во второй пароль, затем нужные команды по загрузке файла и, в конце, команда bye для отключения. Запустить внешнуюю программу из Excel не должно составить труда.


А как передать инструкцию OPEN?



С уважением,
babken76 вне форума  
Ads
Ответ
Опции темы

Похожие темы
Тема Автор
VBA Как изменить background cell в Excell?
Простите за тупизну, но не могу изменить background ячейки. В опции Style Formating все просто, но цвет зависит от значения текущей ячейки. Полезла в инструкцию VB и там нашла рекомендации: You have...
annspa
Excel - передача файла по FTP или отправка файла сценарию на php. VBA
1) Необходимо из страницы экселя сформировать текстовый файл и перезаписать его на FTP-сервере. Или создать этой файл локально и скопировать на FTP-сервер - перезаписать такой же файл. Можно ли...
lurii
Программное отключение условного форматирования ячеек Excel VBA
Требуется не удалить условное форматирование ячеек, а временно отключить, а затем включить его, желательно для всей книги сразу. Возможно ли это сделать? С уважением,
babken76
VBA Поиск по дате и формирование отчета
Всем добрый день. Помогите довести до ума мой проект, если не трудно. Я делаю небольшую БД в Excell, записей будет немного, тысяч 5, Есть форма для ввода данных (№, ФИО, Дата, и т.д.), после...
oks2k
VBA Перемещение по ячейкам Excel.
Столбец с отсортированными данными. Как переместиться в конец данных, записав куда либо адреса всех ячеек при любом различии в значениях. Другими словами мне нужны номера всех строк, в которых...
-=MK=-
VBA и Exel, OLEObject, работа с CheckBox и с Combobox VBA
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt <FONT size=3><FONT color=#000000><FONT face="Times New Roman Я пишу макросы в VB и необходимо создать ряд объектов (CheckBox'ов и ComboBox'ов) на рабочем...
Eriksson



Текущее время: 11:57. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.

Рейтинг@Mail.ru