Excel 2007 XML Source Maps - Обновление схем - PullRequest
0 голосов
/ 13 июня 2011

У меня есть электронная таблица, которая сообщает о документах xml, сгенерированных приложением.Я использую функциональность, которая позволяет вам создавать формат электронной таблицы, перетаскивая элементы из панели «Исходный XML» на ваш лист.

У меня нет схемы (на данный момент) - Excelпросто выводится из предоставленного XML-документа.

Из-за изменения спецификации формат XML изменился - теперь есть несколько дополнительных элементов в нескольких местах.

Я не могу понять, какчтобы Excel обновил поля, доступные на панели источника XML (т. е. в выведенной схеме), на основе обновленного документа XML.Кажется, мне нужно начинать с нуля с новой электронной таблицы, если XML получает дополнительные поля.

Есть ли способ сделать это?

1 Ответ

0 голосов
/ 29 августа 2011

Я был в похожей ситуации, и в моем случае было проще начать с нуля, то есть добавить каждое поле вручную.Прежде чем я это сделал, я посмотрел, как Excel управляет этими соединениями, и поместил соответствующие (и я нахожу selfexplanitory) методы в следующем примере (в коде предполагается, что есть рабочий лист Tabelle1 со списком excel и двумя связанными с XML связями).хранится в ячейках A1 и B1 и далее в схеме действителен XPath для / dataroot / Projekte / ID - при этом, соответственно, измените его, чтобы опробовать).

Итак, я предположим с помощью этих методов / функций вы сможете

  • добавить свою вторую (новую) схему, а затем
  • прочитать всю соответствующую информацию, как показано ниже, т.е. прочитать XPathв поле старой схемы,
  • удалите старую ссылку на XPath и
  • добавьте ее снова для этой ячейки, используя новую схему.

НО я не пробовалэто сам (потому что, как я уже говорил в моем примере, это было всего 9 полей / ячеек и 2 таблицы)

Sub mainExcelSchemaExamples()

    ' View Inferred (or explicitly inserted) Schema
    Dim myxmlmap As XmlMap
    Dim myXMLSchemaString As String

    Set myxmlmap = ActiveWorkbook.XmlMaps(1)

    myXMLSchemaString = ActiveWorkbook.XmlMaps(1).Schemas(1).XML
    Debug.Print myXMLSchemaString

    ' Show XPath
    Dim mySheet As Worksheet
    Set mySheet = ActiveWorkbook.Sheets("Tabelle1")

    ' From a List
    Debug.Print mySheet.ListObjects(1).ListColumns(2).XPath.Map, _
            mySheet.ListObjects(1).ListColumns(2).XPath

    ' Single field
    Debug.Print mySheet.Range("A1").XPath.Map, mySheet.Range("A1").XPath
    Debug.Print mySheet.Range("B1").XPath.Map, mySheet.Range("B1").XPath

    ' Add XPath (and XML-Map)
    mySheet.Range("A2").XPath.SetValue Map:=myxmlmap, XPath:="/dataroot/Projekte/ID"

End Sub

Надеюсь, это поможет в качестве отправной точки.

С уважением, Андреас

...