0

感谢您的任何见解,(我提前为长篇道歉)

我经常需要根据 Salesforce.com 组织(云安装)中配置的元数据为客户创建配置工作簿。客户更喜欢此工作簿是 Excel 文件。

Salesforce.com 元数据 API 可用于为组织中的每个 Salesforce.com 对象创建方便的基于 xml 的“.object”文件,其中包含需要在 Excel 中结束的必要元数据。

我已经创建了一个 Excel 工作簿,其中包含一个工作表,该工作表用作我的“模板”,用于存储给定 .object 文件的元数据。

我在此工作表中创建了 3 个单独的表,用于存储对象的自定义字段、记录类型和验证元数据。

我创建了一个 .XSD 文件,该文件使用给定 .object 文件中的元数据填充此工作表中的所有三个表。

我想要一个 VB 宏来使用此工作表、表格和 .XSD 文件来循环执行以下任务的 .object 文件列表:

  1. 复制现有模板工作表 - 已解决
  2. 使用 .object 文件名的一部分重命名新副本 - 已解决
  3. ImportXML 使用 .XSD 文件和现有表(使用当前迭代的 .object 文件元数据填充新工作表表)
  4. 迭代到下一个 .object 文件并重复,直到每个都有自己的选项卡

注意:我将为每个配置工作簿分别创建此 .object 列表,可能通过扫描目录

主要困难:我可以复制模板工作表并重命名它,但是当我为新工作表运行导入 XML 时,它会覆盖表的每个实例(跨所有工作表)中的数据。

这意味着我最终会得到我需要的所有工作表,但它们都将包含来自执行的最终导入的相同 .object 文件的元数据,而不是适用于每个工作表的 .object 特定元数据。

问题:

  1. 这个架构适合这个问题吗?
  2. 由于我正在复制原始工作表(它具有我想保留的非表格数据和格式)来创建每个附加表格,因此我假设它必须将同一个表格复制到每张表格中。

    1. 有没有办法将这些复制的表相互分离并仍然维护我的 .XSD 数据绑定?
    2. 我最好删除表格并在每个工作表中从头开始重新构建一个新表格吗?
    3. 我在这里吠错树了吗?

这是我的代码:

Sub newObject(fileName As String)
    Dim folderPath As String
    Dim myMap As XmlMap
    Dim schemaPath As String
    folderPath = "C:\...\objects - QA\"
    schemaPath = "mySchema.XSD"
    ActiveSheet.Copy After:=Sheets(Sheets.Count)
    'Name the new copied sheet
    ActiveSheet.Name = Left(fileName, Len(fileName) - 7) & ActiveWorkbook.XmlMaps.Count
    'Add a named XmlMap to the collection
    Set myMap = ActiveWorkbook.XmlMaps.Add(folderPath & schemaPath)
    Call ImportXmlFromFile(folderPath & schemaPath, folderPath, fileName)

End Sub

Sub ImportXmlFromFile(myMap As String, myFolder As String, myFile As String)
   ' buildFieldsListS (myMap)
     ThisWorkbook.XmlMaps(myMap).Import (myFolder + myFile)

    Exit Sub
MyErr:
    MsgBox "Error #" & Err.Number & ": " & Err.Description, vbOKOnly

End Sub
4

1 回答 1

0

XmlMaps 是一个工作簿范围的资源,我怀疑当您打开一个新的对象文件,但给它相同的架构和根名称作为同一个工作簿中的现有 XmlMap 时,它认为您正在尝试更新先前/现有的地图,而不是创建并添加一个新的。

我认为您需要先将模板表复制到新工作簿,然后在该新工作簿中创建并导入新的 XmlMap。


或者,尝试进行以下更改:

Sub newObject(fileName As String)
    On Error Goto MyERR

    ' ... '

    'Add a named XmlMap to the collection'
    Set myMap = ActiveWorkbook.XmlMaps.Add(folderPath & schemaPath)
    Call ImportXmlFromFile(myMap, folderPath, fileName)

    Exit Sub
MyErr:
    MsgBox "Error #" & Err.Number & ": " & Err.Description, vbOKOnly

End Sub

Sub ImportXmlFromFile(myMap As XmlMap, ByVal myFolder As String, myFile As String)
     myMap.Import myFolder & myFile

End Sub
于 2012-08-23T18:53:13.630 回答