class ReadExcelToTree

{
public ReadExcelToTree()

{

}

/**//// <summary>
/// 读取Excel文件,内容存储在DataSet中
/// </summary>
/// <param name="opnFileName">Excel文件路径</param>
/// <returns>DataSet</returns>
public static DataSet ExcelToDataSet(string FileName)

{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
OleDbConnection conn = new OleDbConnection(strConn);
string strExcel ="select * from [sheet1$]";
OleDbDataAdapter XlsCommand = null;
DataSet ds = new DataSet();
try

{
conn.Open();
XlsCommand = new OleDbDataAdapter(strExcel, strConn);
XlsCommand.Fill(ds, "sheet1");
}
catch (Exception ex)

{
Console.WriteLine("错误!:" + ex.Message.ToString());
}
finally

{
conn.Close();
conn.Dispose();
}
return ds;
}

}
主程序中调用:
DataSet ds = ReadExcelToTree.ExcelToDataSet(@"CC08Help.xls");
生成树:
1
private void InitTreeView(DataTable dt, TreeView tv)
2
{
3
TreeNode curNodeLevel0 = null, curNodeLevel1 = null, curNodeLevel2 = null,
4
curNodeLevel3 = null, curNodeLevel4 = null, curNodeLevel5 = null,
5
curNodeLevel6 = null, curNodeLevel7 = null;
6
7
//对第一层节点初始化.
8
//就是Excel的 A1 单元格 我们定义该层节点为0层节点
9
curNodeLevel0 = new TreeNode("联机帮助");
10
11
for (int i = 0; i < dt.Rows.Count; i++)
12
{
13
DataRow dr = dt.Rows[i];
14
15
// 如果dr[1]不为空,则说明这是一个新的一层节点.该层节点为 1 层
16
if (dr[1].ToString() != string.Empty)
17
{
18
//创建一个节点.
19
TreeNode t = new TreeNode(dr[1].ToString());
20
21
//将该节点放到0层节点的子节点上,即一层节点
22
curNodeLevel0.Nodes.Add(t);
23
24
//设置当前的一层节点为刚刚生成的节点.
25
curNodeLevel1 = t;
26
//开始处理下一行.
27
continue;
28
}
29
30
31
// 如果循环走到这儿,则说明dr[1].ToString() == String.Empty;
32
if (dr[2].ToString() != String.Empty)
33
{
34
TreeNode t = new TreeNode(dr[2].ToString());
35
curNodeLevel1.Nodes.Add(t);
36
curNodeLevel2 = t;
37
continue;
38
}
39
40
if (dr[3].ToString() != string.Empty)
41
{
42
TreeNode t = new TreeNode(dr[3].ToString());
43
curNodeLevel2.Nodes.Add(t);
44
curNodeLevel3 = t;
45
continue;
46
}
47
48
if (dr[4].ToString() != string.Empty)
49
{
50
TreeNode t = new TreeNode(dr[4].ToString());
51
curNodeLevel3.Nodes.Add(t);
52
curNodeLevel4 = t;
53
continue;
54
}
55
if (dr[5].ToString() != string.Empty)
56
{
57
TreeNode t = new TreeNode(dr[5].ToString());
58
curNodeLevel4.Nodes.Add(t);
59
curNodeLevel5 = t;
60
continue;
61
}
62
if (dr[6].ToString() != string.Empty)
63
{
64
TreeNode t = new TreeNode(dr[6].ToString());
65
curNodeLevel5.Nodes.Add(t);
66
curNodeLevel6 = t;
67
continue;
68
}
69
if (dr[7].ToString() != string.Empty)
70
{
71
TreeNode t = new TreeNode(dr[7].ToString());
72
curNodeLevel6.Nodes.Add(t);
73
curNodeLevel7 = t;
74
continue;
75
}
76
}
77
78
tv.Nodes.Add(curNodeLevel1);
79
tv.CollapseAll();
80
}
程序中调用:
private void Help_Load(object sender, EventArgs e)
{
this.tvHelp.ImageList = this.imgLHelp;
DataSet ds = ReadExcelToTree.ExcelToDataSet(@"CC08Help.xls");
if (ds != null)
{
InitTreeView(ds.Tables[0], this.tvHelp);
}
foreach (TreeNode tn in tvHelp.Nodes)
{
SetLeafNodeImageIndex(tn);
}
this.webBrowser1.Url = new Uri(GetTNHtmlName(new TreeNode("(命令联机帮助)")));
}
private void TVHelp_MouseClick(object sender, MouseEventArgs e)
{
TreeNode selTreenode = tvHelp.GetNodeAt(e.Location); //注意不要用tvHelp.selected
if (e.Button == MouseButtons.Left)
{
if (selTreenode != null
&& selTreenode.Nodes.Count == 0)//代表此节点是叶节点
{
this.webBrowser1.Url = new Uri(GetTNHtmlName(selTreenode)) ;
}
}
}
1
2
//设置叶子节点的图标
3
private void SetLeafNodeImageIndex(TreeNode tn)
4
{
5
if (tn.Nodes.Count == 0)
6
{
7
tn.ImageIndex = 1;
8
return;
9
}
10
else
11
{
12
tn.ImageIndex = 0;
13
}
14
foreach (TreeNode childNode in tn.Nodes)
15
{
16
SetLeafNodeImageIndex(childNode);
17
}
18
}
1
private string GetTNHtmlName(TreeNode tn)
2
{
3
int startIndex = tn.Text.LastIndexOf('(');
4
int startIndex1 = tn.Text.LastIndexOf('('); ;
5
int endIndex = tn.Text.LastIndexOf(')');
6
int endIndex1 = tn.Text.LastIndexOf(')');
7
8
if(startIndex1 > startIndex)
9
{
10
startIndex = startIndex1;
11
}
12
if (endIndex1 > endIndex)
13
{
14
endIndex = endIndex1;
15
}
16
17
if (startIndex < 0 || endIndex < 0)
18
{
19
return "res://" + System.Environment.SystemDirectory + @"\system32\shdoclc.dll/http_404.htm";
20
}
21
22
string url = "file://" + Application.StartupPath + "/document/" + tn.Text.Substring(startIndex + 1, endIndex - startIndex - 1) + ".htm";
23
return url;
24
}
生成树节点的简化代码——改版!
private void InitTreeView(DataTable dt, TreeView tv)
{
int colums = dt.Columns.Count;
TreeNode[] curNodeLevel = new TreeNode[colums];
//对第一层节点初始化.
//就是Excel的 A1 单元格 我们定义该层节点为0层节点
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow dr = dt.Rows[i];
for (int j = 1; j <= colums; j++)
{
if (j == 1 && dr[j].ToString()!=String.Empty)
{
TreeNode t = new TreeNode(dr[j].ToString());
curNodeLevel[0] = t;
break;
}
else if(j >= 2)
{
if (dr[j].ToString() != string.Empty)
{
TreeNode t = new TreeNode(dr[j].ToString());
curNodeLevel[j - 2].Nodes.Add(t);
curNodeLevel[j - 1] = t;
break;
}
}
}
}
tv.Nodes.Add(curNodeLevel[0]);
tv.Nodes[0].Expand();
}
posted on 2008-09-19 20:25
天书 阅读(1007)
评论(0) 编辑 收藏 引用