Microsoft Word のアドインを作成しています。フォルダー、ファイル、およびファイルのブックマークを階層構造で生成するツリー ビュー コントロールがあります。
このために、私はこれらのコードを使用しています:
void GetTree(string strSearchPath)
{
treeFiles.Nodes.Clear();
SetNode(treeFiles, strSearchPath);
treeFiles.TopNode.Expand();
}
void SetNode(TreeView treeName, string path)
{
DirectoryInfo dirInfo = new DirectoryInfo(path);
TreeNode node = new TreeNode(dirInfo.Name);
node.Tag = dirInfo;
GetFolders(dirInfo, node);
GetFiles(dirInfo, node);
treeName.Nodes.Add(node);
}
void GetFolders(DirectoryInfo d, TreeNode node)
{
try
{
DirectoryInfo[] dInfo = d.GetDirectories();
if (dInfo.Length > 0)
{
TreeNode treeNode = new TreeNode();
foreach (DirectoryInfo driSub in dInfo)
{
treeNode = node.Nodes.Add(driSub.Name, driSub.Name, 0, 0);
GetFiles(driSub, treeNode);
GetFolders(driSub, treeNode);
}
}
}
catch { }
}
void GetFiles(DirectoryInfo d, TreeNode node)
{
var files = d.GetFiles("*.doc*");
FileInfo[] subfileInfo = files.ToArray<FileInfo>();
if (subfileInfo.Length > 0)
{
for (int j = 0; j < subfileInfo.Length; j++)
{
bool isHidden = ((File.GetAttributes(subfileInfo[j].FullName) & FileAttributes.Hidden) == FileAttributes.Hidden);
if (!isHidden)
{
string strExtention = Path.GetExtension(subfileInfo[j].FullName);
if (strExtention.Contains("doc"))
{
TreeNode treeNode = new TreeNode();
treeNode = node.Nodes.Add(subfileInfo[j].FullName, subfileInfo[j].Name, 1, 1);
AddBookMarkFile(subfileInfo[j].FullName, treeNode);
}
}
}
}
}
private void AddBookMarkFile(string strParentFile, TreeNode node)
{
object oDocPath = strParentFile;
object oMissing = System.Reflection.Missing.Value;
object oVisible = false;
object oReadOnly = true;
object saveChanges = Word.WdSaveOptions.wdSaveChanges;
object originalFormat = Word.WdOriginalFormat.wdOriginalDocumentFormat;
object routeDocument = true;
Word.Document ReadDoc=null;
try
{
// ReadDoc = Globals.ThisAddIn.Application.Documents.Open(ref oDocPath, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oVisible);
ReadDoc = Globals.ThisAddIn.Application.Documents.Open(ref oDocPath, ref oMissing, ref oReadOnly, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oVisible, ref oMissing, ref oMissing, ref oMissing);
// Loop through all hyperlink
Word.Bookmarks bms = ReadDoc.Bookmarks;
for (int i = 1; i <= bms.Count; i++)
{
object index = (object)i;
Word.Bookmark bm = bms.get_Item(ref index);
if (!string.IsNullOrWhiteSpace(bm.Name.ToString()))
{
node.Nodes.Add(strParentFile + "~" + bm.Name.ToString(), bm.Name.ToString(), 1, 1);
}
}
}
finally
{
// ReadDoc.Close(ref saveChanges, ref originalFormat, ref routeDocument);
}
}
ノードのダブルクリックで、私はこのコードを使用しています:
private void treeFiles_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
string[] fullPath = e.Node.Name.Split('~');
string checkExt = Path.GetExtension(fullPath[0]);
if (checkExt.Contains("doc"))
{
object fileName = fullPath[0];
object readOnly = false;
object isVisible = true;
object missing = System.Reflection.Missing.Value;
Word.Document aDoc = Globals.ThisAddIn.Application.Documents.Open(ref fileName, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref isVisible);
//if (!string.IsNullOrWhiteSpace(fullPath[1]))
//{
// //Select the bookmark
// object bookmarkName = fullPath[1];
// if (aDoc.Bookmarks.Exists(bookmarkName.ToString()))
// {
// Word.Bookmark bookmark = aDoc.Bookmarks.get_Item(ref bookmarkName);
// bookmark.Select();
// }
//}
aDoc.Activate();
}
問題は次のとおりです。 1)。ツリービューでファイルをクリックしてもファイルが開かない。私が使わなければ
AddBookMarkFile(string strParentFile, TreeNode node)
次に、その作業ファイル。ブックマークファイルを親ファイルの子ファイルとして表示したい。ブックマークまたはファイルをクリックすると、開くはずです。
2) ツリー ビューでファイルを追加します。ブックマーク ファイルを追加すると、ファイルがドキュメント リカバリ タスク ペインに表示されます。どうすればそれを取り除くことができますか。
3)。私が使わなければ
AddBookMarkFile(string strParentFile, TreeNode node)
メソッドなら問題なく動作します。
私を助けてください。