Экспорт из Excel в XML с использованием XML Literals + VB.NET

Мне нужна помощь с этим .... У меня есть файл Excel с данными. И мне нужно экспортировать его в XML-файл, используя XML-литералы в VB.NET. Мне нужен XML-файл с результатом:

    <?xml version="1.0" standalone="no"?>
<soapenv:Envelope xmlns:soapenv="http://...">
    <soapenv:Header/>
    <soapenv:Body xmlns:wsu="http://....xsd">           
            <Header>
                <Verb>cancel</Verb> 
            </Header>
            <Request>
                <ID>VALUE-1</ID>
                <ID>VALUE-2</ID>
                <ID>VALUE-3</ID>
                ......
            </Request>
    </soapenv:Body>
</soapenv:Envelope>

Где VALUE-1, VALUE-2, .... и так далее - я получаю их из Cells с Ron Numer i и столбцом Number = 2. В VB.NET in Loop я сделал это примерно так:

While Not this condition
    While Not (String.IsNullOrEmpty(Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet.Cells(iRow, 1).Value))
    'Check next condition with IF
                   If LCase(Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet.Cells(iRow, 25).Value) = "y" Then
                   'Add XElement object into another one XML Element from main XDocument
                        objRequestCANCEL.Add(objIDCANCEL)
                        'Add Value for this new Element
                        objIDCANCEL.Value = Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet.Cells(iRow, 2).Value
                   End If
                   'Go to next Row and do the same - add XELement if condition is OK here
    iRow = iRow + 1
    End While

Здесь objIDCANCEL В качестве XElement в основном XDocument я использовал в этом случае XElements, такие как Variables. Но теперь мне нужно что-то вроде документа создания без переменных вроде этого:

Dim XDoc As XDocument = <?xml version="1.0" standalone="no"?>
                                  <soapenv:Envelope xmlns:soapenv="http://...">
                                        <soapenv:Header/>
                                        <soapenv:Body xmlns:wsu="http://....xsd">   
                                            <Header>
                                                <Verb>create</Verb>    
                                                <ID><%= varValue %> </ID>
                                                .....HERE I NEED ADD IN LOOP ALL VALUES FROM ALL ROWS IN EXCEL FILE.....
                                            </Header>
                                            <Request>
                                            </Request>
                                        </RequestMessage>
                                    </soapenv:Body>
                                </soapenv:Envelope>

Напишите, пожалуйста, как мне переписать этот Шлейф сюда?


person Community    schedule 25.08.2016    source источник
comment
Вы не можете вставить туда какой-либо оператор цикла, вы можете использовать только выражение LINQ From .. Select.   -  person Martin Honnen    schedule 25.08.2016
comment
Но как выглядит LINQ вместо Loop в моем случае с моими условиями?   -  person    schedule 25.08.2016


Ответы (1)


Вот простой пример использования LINQ и рабочего листа для считывания первого столбца (1) строк 1 .. 3 и заполнения некоторых XML-литералов:

    Dim excel As Excel.Application = New Excel.Application()
    excel.Workbooks.Open("sheet1.xlsx")
    Dim sheet As Excel._Worksheet = excel.ActiveWorkbook.ActiveSheet
    Dim cells As Excel.Range = sheet.Cells

    Dim doc As XDocument = <?xml version="1.0"?>
                           <root>
                               <values>
                                   <%= From i In Enumerable.Range(1, 3) Select <value>
                                                                                   <%= cells(i, 1).Value %>
                                                                               </value> %>
                               </values>

                           </root>

    doc.Save(Console.Out)

Тогда вывод будет, например,

<root>
  <values>
    <value>1</value>
    <value>2</value>
    <value>3</value>
  </values>
</root>

При необходимости адаптируйте это к вашему формату XML и содержимому таблицы Excel.

person Martin Honnen    schedule 25.08.2016
comment
Думаю, это то, что мне нужно! Большое спасибо! - person ; 25.08.2016