Если вы используете Excel 2007 и хотите использовать XSLT, вам лучше всего использовать функции EXPath Zip Module для изменения существующего файла Excel .xslx.
Однако я бы предпочел использовать небольшой макрос Excel VBA.
Ниже приведен пример кода для процедуры VBA под названием «нагрузка» - в этом примере используется XML DOMТаким образом, все 112K строк вашего XML будут сначала загружены в память, но если производительность не является проблемой, то она проще, чем альтернатива SAX.
Вам необходимо изменить xpathToExtractRow
, чтобы соответствовать вашей структуре ввода XML,Существует также предположение, что непосредственные дочерние узлы элемента строки XML содержат данные ячейки, которые вы хотите импортировать как текстовые узлы, в противном случае вам нужно будет использовать вызов SelectNode
для получения необходимых данных.
Private dom As DOMDocument60
Public Sub load ()
Dim nodeList As IXMLDOMNodeList
Dim nodeRow As IXMLDOMNode
Dim nodeCell As IXMLDOMNode
Dim rowCount As Integer
Dim cellCount As Integer
Dim rowRange As Range
Dim cellRange As Range
Dim sheet As Worksheet
Dim xpathToExtractRow As String
xpathToExtractRow = "/feed/row"
Set dom = New DOMDocument60
dom.load ("c:\test\source.xml")
Set sheet = ActiveSheet
Set nodeList = dom.SelectNodes(xpathToExtractRow)
rowCount = 0
For Each nodeRow In nodeList
rowCount = rowCount + 1
cellCount = 0
For Each nodeCell In nodeRow.ChildNodes
cellCount = cellCount + 1
Set cellRange = sheet.Cells(rowCount, cellCount)
cellRange.Value = nodeCell.Text
Next nodeCell
Next nodeRow
End Sub
Пример ввода XML:
<?xml version="1.0" encoding="utf-8"?>
<feed>
<row>
<firstname>joe</firstname>
<lastname>smith</lastname>
<country>jamaica</country>
</row>
<row>
<firstname>bill</firstname>
<lastname>coots</lastname>
<country>uk</country>
</row>
</feed>