D
D
domanskiy2019-09-05 10:40:37
excel
domanskiy, 2019-09-05 10:40:37

How to convert xls and xlsx files to xml using VBScript without Excel installed?

It is necessary to convert Excel files to xml on the server without installing Excel, using VBScript.
Is there any free library? An example of its use?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
D
domanskiy, 2019-09-06
@domanskiy

Understood.

'Читаем данные из XLS файла
Dim connStr, objConn, getNames, inputFile 
inputFile  = test.xls
connStr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & inputFile & ";Extended Properties=""Excel 12.0 xml;HDR=No;IMEX=2;"";"

Set objConn = CreateObject("ADODB.Connection")
'Open Connection
objConn.open connStr

'Define recordset and SQL query
'тут мы через SQL запрос вытаскиваем данные из ИМЕННЫХ ячеек экселевского файла. Всё это в массив
Set rs = objConn.execute("SELECT * FROM Job,Customer,Prod")

'присваиваем значения переменным из массива
DO WHILE NOT rs.EOF
Job = rs.Fields(0)
Customer = rs.Fields(1)
Prod = rs.Fields(2)
rs.MoveNext
Loop

'Close connection XLS and release objects
objConn.Close
Set rs = Nothing
Set objConn = Nothing

'формируем XML
Dim  rootNode, subNode, xmlDoc, commentItem, Fragment
Set xmlDoc = CreateObject("Msxml2.DOMDocument")
'Создание объявления XML
xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version='1.0' encoding='utf-8'"))

'Создание корневого элемента
Set rootNode = xmlDoc.CreateElement("JOBS")
xmlDoc.AppendChild rootNode

Set subNode = rootNode.appendChild(xmlDoc.createElement("Job"))
subNode.text = Job

Set subNode = rootNode.appendChild(xmlDoc.createElement("Customer"))
subNode.text = Customer

Set subNode = rootNode.appendChild(xmlDoc.createElement("Prod"))
subNode.text = Prod

'* -- написание XML-файла с отступом для более легкого использования независимо от того, какая программа использовалась для просмотра или редактирования файла -- *'
Dim rdr, wrt, oStream
Set rdr = CreateObject("MSXML2.SAXXMLReader")
Set wrt = CreateObject("MSXML2.MXXMLWriter")

Set oStream = CreateObject("ADODB.STREAM")
oStream.Open
oStream.Charset = "UTF-8"
 
wrt.Indent = True
wrt.Encoding = "UTF-8"
wrt.Output = oStream
Set rdr.ContentHandler = wrt
Set rdr.ErrorHandler = wrt
rdr.Parse xmlDoc
wrt.Flush

'запись xml файла
oStream.SaveToFile "Test.xml", 2

Set rdr = Nothing
Set wrt = Nothing

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question