2013-05-27 41 views
2

我使用Sandcastle帮助文件生成器生成CHM文件,该文件基于csproj文件。什么我最终想要做的,就是找到CHM文件每个主题的TopicID,并与Excel-DNA使用它们像这样:如何从CHM文件获取TopicIDs?

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

尽管我知道在文章的所有网址CHM文件 - 我可以使用7zip和HTML帮助工作室(HHW)查看内容 - 我不知道如何使用Sandcastle或HHW将主题映射到某些ID或查找我已经拥有的主题的ID有。

有什么想法?

干杯,

克里斯托

---- ---- UPDATE

我继续创建了一个Doxygen的CHM文件,并手动添加[MAP]和[别名] HTML Help Workshop中的HPP文件中的字段。我已经将特定的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

从我已经意识到,似乎并没有一个简单的方法来做到这一点自动。最好的折衷方案是花时间和努力,创建一个地图/别名文件来进行重新映射。通过使用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 
... 

映射的姓名必须与别名assignement,而这又需要指向一个文件已经添加到[Files]部分。

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