2013-02-25 2 views
2

Я хочу программировать свою кнопку с этой функцией:Как открыть XML-файл в Excel

открытым и выбрать XML-файл затем записать в «table2» метрическом имя идентификатор M1-M10 с принадлежащими значениями.

Я был успешным, чтобы открыть и выбрать XML-файл:

Private Sub btn_load_xml_Click() 
'-----------Open file--------------------------- 
Dim Filter As String, Title As String 
Dim FilterIndex As Integer 
Dim Filename As Variant 

' File filters 
Filter = "XML Files (*.xml),*.xml" 
' Default Filter to *.* 

FilterIndex = 3 
' Set Dialog Caption 
Title = "Select a File to Open" 

' Select Start Drive & Path 
ChDrive ("C") 
ChDir ("C:") 
With Application 
    ' Set File Name to selected File 
    Filename = .GetOpenFilename(Filter, FilterIndex, Title) 
    ' Reset Start Drive/Path 
    ChDrive (Left(.DefaultFilePath, 1)) 
    ChDir (.DefaultFilePath) 
End With 

' Exit on Cancel 
If Filename = False Then 
    Exit Sub 
End If 

' Open File 
MsgBox Filename, vbInformation, "File Opened" ' This can be removed 
'------------- Load XML in table2------------------ 

'------------- END Load XML in table2------------------ 
End Sub 

Но как я могу загрузить файл XML и работать с ним?

Вот мой XML структура

<?xml version="1.0" encoding="UTF-8" ?> 

<sourcemonitor_metrics> 
    <project version="3.3"> 
    <project_name>metric_auswertung</project_name> 
    <project_directory>C:\Users\SULAS\Desktop\Metric_auswertung</project_directory> 
    <project_language>C</project_language> 

    <ignore_headers_footers>false</ignore_headers_footers> 
    <export_raw_numbers>false</export_raw_numbers> 
    <metric_names name_count="13"> 
     <metric_name id="M0" type="number">Lines</metric_name> 
     <metric_name id="M1" type="number">Statements</metric_name> 
     <metric_name id="M2" type="percent" divisor="M1">Percent Branch Statements</metric_name> 
     <metric_name id="M3" type="percent" divisor="M0">Percent Lines with Comments</metric_name> 
     <metric_name id="M4" type="number">Functions</metric_name> 
     <metric_name id="M5" type="average" divisor="M4">Average Statements per Function</metric_name> 
     <metric_name id="M6" type="string">Line Number of Most Complex Function</metric_name> 
     <metric_name id="M7" type="string">Name of Most Complex Function</metric_name> 
     <metric_name id="M8" type="maximum">Complexity of Most Complex Function</metric_name> 
     <metric_name id="M9" type="string">Line Number of Deepest Block</metric_name> 
     <metric_name id="M10" type="maximum">Maximum Block Depth</metric_name> 
     <metric_name id="M11" type="average" values="block_depths">Average Block Depth</metric_name> 
     <metric_name id="M12" type="average">Average Complexity</metric_name> 
    </metric_names> 
    <checkpoints checkpoint_count="1"> 
     <checkpoint checkpoint_name="Metric_Auswertung" ignore_blank_lines="false" modified_complexity="true" checkpoint_date="2013-02-25"> 
     <files file_count="3"> 
      <file file_name="Mcu - Kopie.c"> 
      <metrics metric_count="13"> 
       <metric id="M0">603</metric> 
       <metric id="M1">183</metric> 
       <metric id="M2">26,2</metric> 
       <metric id="M3">23,2</metric> 
       <metric id="M4">11</metric> 
       <metric id="M5">24,6</metric> 
       <metric id="M6">321</metric> 
       <metric id="M7">Mcu_GetPllStatus()</metric> 
       <metric id="M8">15</metric> 
       <metric id="M9">235</metric> 
       <metric id="M10">6</metric> 
       <metric id="M11">1,97</metric> 
       <metric id="M12">6,00</metric> 
      </metrics> 
      </file> 
     </files> 
     </checkpoint> 
    </checkpoints> 
    </project> 
</sourcemonitor_metrics> 

ответ

3

Вы можете работать непосредственно с документами XML с использованием MSXML. Для полной справки см. MSXML, а также проверьте, в частности, DOM reference. Чтобы использовать MSXML проще всего, откройте редактор VBA и перейдите в «Инструменты»> «Ссылки». Добавьте проверку рядом с «Microsoft XML, vX.0», где X - самая последняя версия.

«Как использовать XML» выходит за рамки данного вопроса, но вот основной VBA, чтобы вы начали:

Sub btn_load_xml_Click() 

    ' Get file name ... 

    Dim oDoc As New MSXML2.DOMDocument60 
    Dim xMetricNames As IXMLDOMNodeList 
    Dim xMetricName As IXMLDOMElement 
    Dim xMetrics As IXMLDOMNode 
    Dim xMetric As IXMLDOMElement 
    Dim mtID As String, mtName As String, mtValue As String 

    ' Load from file 
    oDoc.Load FileName 

    ' Select needed nodes 
    Set xMetrics = oDoc.SelectSingleNode("//project/checkpoints/checkpoint/files/file/metrics") 
    Set xMetricNames = oDoc.SelectNodes("//project/metric_names/metric_name") 
    For Each xMetricName In xMetricNames 
     mtName = xMetricName.Text 
     mtID = xMetricName.getAttribute("id") 
     mtValue = xMetrics.SelectSingleNode("metric[@id='" & mtID & "']").Text 

     ' Do whatever you want with these values 
    Next 

    Set oDoc = Nothing 

End Sub 
+1

Perfect, thanks :) – Samy

+2

MSXML2.DOMDocument всегда является синонимом MSXML2.DOMDocument30 от MSXML, v3.0. В более поздних версиях необходимо использовать конкретные ProgID - например, DOMDocument60 для MSXML, v6.0 - см. [Здесь] (http://blogs.msdn.com/b/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet -explorer.aspx) – barrowc

+1

@barrowc Спасибо за подсказку. Обновлен код соответственно. –

1

Вы пробовали:

Workbooks.OpenXML Filename:="C:\Path\File.xml", LoadOption:=xlXmlLoadImportToList 

Это позволит открыть файл XML как XML-таблицы в Excel. Затем вы можете работать над ним, как и с любым другим документом Excel.

+0

Но я хочу не весь XML только некоторые части. Everthing должно происходить в активной таблице не в новой таблице – Samy

+0

Как только файл открыт, вы можете не просто скопировать данные из новой таблицы в вашу активную таблицу, а затем закрыть файл xml? – Ripster

+0

Я хочу сделать это одним щелчком мыши, он должен автоматически принимать важные данные. Это приложение используется много раз, поэтому его лучше сделать одним щелчком мыши – Samy

Смежные вопросы