如何从CHM文件中获取TopicID?

时间:2013-05-27 16:20:55

标签: chm sandcastle excel-dna

我正在使用Sandcastle帮助文件生成器基于 csproj 文件生成CHM文件。我最终要做的是找到CHM文件中每个主题的TopicID,并将它们与Excel-Dna一起使用,如下所示:

...
[ExcelFunction(Category = "MyCategory", Name = "MyUDF", HelpTopic="MyHelp.chm!102")]
...

即使我知道CHM文件中文章的所有URL - 我可以看到7zip和HTML Help Workshop(HHW)的内容 - 我不知道如何使用Sandcastle或HHW来映射主题某些ID或找出我已经拥有的主题的ID。

有什么想法吗?

干杯,

的Christos

----更新----

我继续使用Doxygen创建了一个CHM文件,并在HTML Help Workshop中的HPP文件中手动添加了[MAP]和[ALIAS]字段。我已经将特定的html映射到数字1000,所以现在当我使用“MyHelp.chm!1000”时,它实际上在chm文件中打开了正确的html。 因此,我认为Sandcastle没有进行映射和使用Excel-Dna的别名是一个问题。我不想这样做,因为我计划在我们使用的TFS上添加它作为构建事件。 你认为还有其他办法吗?

我试过这样做:

MyHelp.chm!html\filename_of_generated_html
MyHelp.chm!html\filename_of_generated_html.html
MyHelp.chm!html\\filename_of_generated_html
MyHelp.chm!html.filename_of_generated_html

但他们似乎都没有能够指向CHM文件。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

从我的意识到,似乎没有一种简单的方法可以自动执行此操作。为此,最好的折衷方案是创建一个map / alias文件来进行重新映射。通过使用SHFB创建的输出作为临时副产品,您可以注入一个自定义的HHP文件,其中包含每个HTML文件的所有映射和别名。然后,这只是用所述HHP文件再次编译所有内容的问题。将新的UDF函数添加到Excel前端并通过Excel-Dna公开时,需要将手动条目添加到HHP文件中。对于具有少量UDF的项目,我认为自动创建HHP文件并不值得。但是,如果您正在处理1000个UDF,那么最好创建一个C#项目来自动生成此文件。 因此,当创建新的UDF函数时,需要将以下行添加到HHP文件中:

 For example if you've created the UDF function MyFunction(...), then its Excel-Dna attribute
 will be: 
 [ExcelFunction(IsThreadSafe = true, Category = Defines.ExcelCategory, Name = "MyFunction", Description = "My function's description", HelpTopic = "Help_Manual.chm!XXXX")]

 Then you'll need to add the following lines in the HHP file:

 [FILES]
 ...
 html\M_ExcelWrapper_QDAExcelUDFs_MyFunction.htm
 ...    


 [ALIAS]
 ...
 MYFUNCTION=html\M_ExcelWrapper_ExcelUDFs_MyFunction.htm
 ...     


 [MAP]
 ...
 #DEFINE MYFUNCTION                     XXXX
 ...

映射的名称需要与别名分配相匹配,而别名分配又需要指向已在[Files]部分中添加的文件。

我希望这在某种程度上有用。