2012-07-21 102 views
0

我作爲信息開發人員工作。從Excel工作表中的文件名生成DITA文件

我需要創建.dita文件,並將文件名存儲在Excel表格中。

.dita文件是XML文件。文件的結構應該相同。結構如下:

<?xml version="1.0" encoding="UTF-8"?> 
<!--Arbortext, Inc., 1988-2011, v.4002--> 
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" 
"concept.dtd"> 
<?Pub Inc?> 
<concept id="concept-1-43B80068" xml:lang="en"> 
<title></title><?Pub Caret -1?> 
<shortdesc></shortdesc> 
<conbody> 
<p></p> 
</conbody> 
</concept> 

,然後我需要創建一個映射這些文件如下:

<map xml:lang="en"> 
<topicref href = "topic1.dita"> 
<topicref href = "topic2.dita"> 
</topicref> 
</map> 

請提供一個解決的辦法。

回答

2

假設您知道如何使用Python進行編程並運行Python應用程序,您可以嘗試以下將文件名放入列表的位置。如果您需要從Excel中讀取數據,那麼您可以使用其中一個包來讀取Python中的Excel文件,並使用它來代替下面的文件列表。

import os 

filelist = ["topic1", 
"topic2" 
] # array of dita files 

basedir = r'C:/DITA_files/' 

# create files 
if not os.path.exists(basedir): 
    os.mkdir(basedir) 

conceptstr = '''<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" 
"concept.dtd"> 
<?Pub Inc?> 
<concept id="concept-1-%s" xml:lang="en"> 
<title></title><?Pub Caret -1?> 
<shortdesc></shortdesc> 
<conbody> 
<p></p> 
</conbody> 
</concept> 
''' 

id_len = 8 
# create concept files and map 
for file in filelist: 
    print 'Writing ' + basedir + file + '.dita' 
    cf = open(basedir + file +'.dita', 'w') 
    cf.write(conceptstr) % [random.choice(string.ascii_letters) for n in xrange(id_len)] 
    cf.close() 

map = open(basedir + 'mymap.ditamap','wt') 

map.write('<map xml:lang="en">') 
for file in filelist: 
    map.write(r'''<topicref href="%s.dita"/> 
''' % (register, register)) 
    map.write('</map>') 
    map.close() 
1

請注意您的DITA標記無效。所有DITA主題必須包含一個包含內容的元素<title>。您可能希望將一些佔位符文本添加爲​​<title>元素的內容,例如:

<title>Title goes here</title> 

而且,你不需要下面的標記,因爲這些都是處理由PTC的Arbortext編輯器添加了說明:

<?Pub Inc?> 
<?Pub Caret -1?> 
2

你也可以在Excel中爲它創建一個VBA宏。選擇其中包含文件名的單元格並運行宏。 注意:要獲得你需要把它們輸出雙引號的兩倍「」

Sub CreateDitaConcept() 
Dim sFileName As String 
Dim iFileNum As Integer 

'Read filename from selected cell 
sFileName = Selection.Value 
'Get a free file number 
iFileNum = FreeFile 
'Open the file for output 
Open sFileName For Output As iFileNum 
'Print text to the file 
Print #iFileNum, "<?xml version=""1.0"" encoding=""UTF-8""?>" 
Print #iFileNum, "<!-- Arbortext etc -->" 
Print #iFileNum, "<!DOCTYPE concept PUBLIC ""-//OASIS//DTD DITA Concept//EN"" ""concept.dtd"">" 
Print #iFileNum, "<concept id=""concept_id"" xml:lang=""en"">" 
Print #iFileNum, "<title>Concept title</title>" 
Print #iFileNum, "<shortdesc></shortdesc>" 
Print #iFileNum, "<conbody>" 
Print #iFileNum, "<p>paragraph</p>" 
Print #iFileNum, "</conbody>" 
Print #iFileNum, "</concept>" 
'Close file 
Close #iFileNum 

末次