如何使用macros将属性添加到从Excel导出的结果xml中

我有一个excel文件,基于某个表的内容导出xml。 我不是这个macros的作者,我只是想操纵这个为我的需要。

剧本内的相关评论:

  1. devise用于Excel内部而不是VB的macros。 如果你想从VB中使用添加代码来使用Excel Object模型
  2. 这段代码与工作簿中名为“dublin_core”的工作表一起使用。
  3. 此代码使用“dublin_core”作为顶级XML属性。
  4. 假设表格的第一行包含属性(列)名称,而下面的行假定包含数据值
  5. 第一行被分割为“:”字符。 第一部分成为“元素”,第二部分成为“限定词”。 如果没有“:”(没有限定符),则使用“none”。
  6. 空白单元格的数据没有写入XML文件。
  7. 该函数假定表格中每一行的第一列有一个值。 如果发现空白的第一列,则退出。 这是为了防止它打印64,000空白行

这是生成XML文件的代码的一部分:

' create the dublin_core.xml file iFileNum = FreeFile FullPath = oDirectory & "\" & Trim(Cells(i, lCols).Value) & "\" & "dublin_core.xml" Open FullPath For Output As #iFileNum Print #iFileNum, "<?xml version=""1.0"" encoding=""UTF-8""?>" 'Print #iFileNum, "<" & sName & ">" Print #iFileNum, "<" & RowName & ">" For j = 1 To lCols - 1 If Trim(Cells(i, j).Value) <> "" Then Dim vals As Variant vals = Split(asCols(j - 1), ":") If UBound(vals) = 0 Then ReDim vals(1) vals(0) = asCols(j - 1) vals(1) = "none" End If Print #iFileNum, " <"; RowPrefix & " element=""" & vals(0) & """ qualifier=""" & vals(1) & """>"; 'Dim cellString As String cellString = Trim(Cells(i, j).Value) cellString = Replace(cellString, "& ", "&amp; ") cellString = Replace(cellString, "<", "&lt;") cellString = Replace(cellString, ">", "&gt;") cellString = Replace(cellString, "'", "’") cellString = Replace(cellString, "'", "‘") cellString = Replace(cellString, "'", "&apos;") cellString = Replace(cellString, """", "&quot;") cellString = Replace(cellString, "“", "“") cellString = Replace(cellString, "”", "”") cellString = Replace(cellString, "–", "-") cellString = Replace(cellString, "—", "-") cellString = Replace(cellString, "°", "°") cellString = Replace(cellString, "µ", "µ") cellString = Replace(cellString, "ñ", "ñ") cellString = Replace(cellString, "±", "±") cellString = Replace(cellString, "§", "
") cellString = Application.WorksheetFunction.Clean(cellString) Print #iFileNum, cellString; Print #iFileNum, "</" & RowPrefix & ">" DoEvents 'OPTIONAL End If Next j Print #iFileNum, " </" & RowName & ">" 'Print #iFileNum, "</" & sName & ">" ExportToXML = True ErrorHandler: If iFileNum > 0 Then Close #iFileNum Next i Exit Function End Function 

对于我的工作表的内容,例如我有这些条目:

 title | contributor:author | citation:spage | citation:epage | description: abstract Sample title | Doe, John | 45 | 50 | This is a sample abstract 

现在,如果我运行macros,它将生成一个XML文件,其内容如下:

 <?xml version="1.0" encoding="UTF-8"?> <dublin_core> <dcvalue element="title" qualifier="none">Sample title</dcvalue> <dcvalue element="contributor" qualifier="author">Doe, John</dcvalue> <dcvalue element="citation" qualifier="spage">45</dcvalue> <dcvalue element="citation" qualifier="epage">50</dcvalue> <dcvalue element="description" qualifier="abstract">This is a sample abstract</dcvalue> </dublin_core> 

想要实现的是添加一个语言属性,使得生成的XML如下所示:

 <?xml version="1.0" encoding="UTF-8"?> <dublin_core> <dcvalue element="title" qualifier="none" language="en">Sample title</dcvalue> <dcvalue element="contributor" qualifier="author">Doe, John</dcvalue> <dcvalue element="citation" qualifier="spage">45</dcvalue> <dcvalue element="citation" qualifier="epage">50</dcvalue> <dcvalue element="description" qualifier="abstract" language="en">This is a sample abstract</dcvalue> </dublin_core> 

请注意,只有标题说明:抽象字段具有language="en"属性。 我的问题是如何编辑代码,只有相关的列将有language="en"属性? 以前我所做的是打开生成的XML,手动添加language="en"部分,如果我的表中有大量logging,这是非常单调的。

提前致谢!

replace这个:

 If Trim(Cells(i, j).Value) <> "" Then Dim vals As Variant vals = Split(asCols(j - 1), ":") If UBound(vals) = 0 Then ReDim vals(1) vals(0) = asCols(j - 1) vals(1) = "none" End If Print #iFileNum, " <"; RowPrefix & " element=""" & vals(0) & """ qualifier=""" & vals(1) & """>"; 'Dim cellString As String 

有:

 Dim sContent, vals As Variant 'declare at top of procedure If Trim(Cells(i, j).Value) <> "" Then vals = Split(asCols(j - 1), ":") ReDim Preserve vals(2) 'resize (if needed), preserving content If vals(1) = "" Then vals(1) = "none" sContent = " <" & RowPrefix & " element=""" & vals(0) & _ """ qualifier=""" & vals(1) & """" 'add additional attribute? If Len(vals(2)) > 0 Then sContent = sContent & " language=""" & vals(2) & """" Print #iFileNum, sContent & ">"; 

为了避免硬编码哪些元素得到了language="en"我已经将它添加到了头文件中:eg –

 title >> title::en description: abstract >> description:abstract:fr