Уникальные значения узлов с использованием oXMLFile.SelectNodes - PullRequest
0 голосов
/ 19 марта 2019

Итак, я динамически генерирую имена своих листов, используя следующий код, читая файл XML:

Set GenreNodes = oXMLFile.SelectNodes("/catalog/query/genre/text()")
.
.
Private Sub CreateSheet(sheetName)
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets.Add(after:= _
             ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    ws.Name = sheetName
End Sub

Прекрасно работает при использовании XML без повторения тегов подобного жанра, таких как:

<?xml version="1.0"?>
<catalog>
   <query id="bk101">
      <question>Do we have cloud security</question>
      <answer>Yes</answer>
      <genre>Cloud</genre>
   </query>
   <query id="bk102">
      <question>Do we have locks on the door</question>
      <answer>No</answer>
      <comment>We have fingerprint access.</comment>
      <genre>Physical Security</genre>
   </query>
</catalog>

Проблема в том, что в этом примере повторы в жанре (SDLC), например:

<?xml version="1.0"?>
<catalog>
   <query id="bk101">
      <question>Do we have cloud security</question>
      <answer>Yes</answer>
      <genre>Cloud</genre>
   </query>
   <query id="bk103">
      <question>What SDLC Priciple is follwed?</question>
      <answer>None</answer>
      <comment>We have code ninjas.</comment>
      <genre>SDLC</genre>
   </query>
   <query id="bk104">
      <question>Do you have OSWP status?</question>
      <answer>None</answer>
      <comment>We plan to do next year.</comment>
      <genre>SDLC</genre>
   </query>
</catalog>

Excel выдаёт мне ошибку Name already exists. Как извлечь уникальные имена узлов, у которых нет этой ошибки?

Спасибо.

1 Ответ

1 голос
/ 19 марта 2019

Обновите код создания листов, чтобы он не пытался создавать дубликаты листов:

Private Sub CreateSheet(sheetName)
    Dim ws As Worksheet

    On Error Resume Next '<< ignore error if sheet doesn't exist
    Set ws = ThisWorkbook.Sheets(sheetName)
    On Error Goto 0      '<< stop ignoring errors

    If ws Is Nothing Then 
        'sheet doesn't exist, so create it.
        Set ws = ThisWorkbook.Sheets.Add(after:= _
                 ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        ws.Name = sheetName

    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...