我有一个excel文件,它根据某个工作表的内容导出xml。我不是这个宏的作者,我只想根据自己的需要操纵它。
剧本内的相关评论:
这是生成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, "& ", "& ")
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 = 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
现在,如果我运行宏,它将生成一个包含以下内容的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>
请注意,只有标题和 description:abstract 字段具有language="en"
属性。我的问题是如何编辑代码,以便只有相关列具有language="en"
属性?以前我做的是打开生成的XML并手动添加language="en"
部分,如果我的工作表中有足够的记录,这是非常繁琐的。
提前致谢!
答案 0 :(得分: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
使用:
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"
我已将其添加到标题中:例如 -
title >> title::en
description: abstract >> description:abstract:fr