日期:2014-05-20  浏览次数:20707 次

手工制造《不完美WinForm导出Word》---同样求教高手
 这几天公司师兄喊我做个小东西,他提供TreeView和DataTable数据源,让我写可以把数据导出到Word的功能,其中,TreeView作为表头,即列名。DataTable作为具体表的数据;TreeView如果节点下面还有子节点的话,就要在Word中分离单元格,实现如图那种列名。小弟也不是高手,在网上找了很久。。没有关于这方面的东西。。有也不全面。。而且功能也不太行。。于是我话费了一天多的时间根据网上找的Word操作和自己以测试心态写的代码。。。竟然成功了。。。

但是师兄还让我在Word中写目录。。这个我暂时没什么思路。。。就先把自己的代码共享下。。希望帮到你们。。里面的那个for循环我话费了一下午+两小时才搞定的。。太他妈的绕了。。。

注意:这段代码可以运行,但dataTable的列名必须和TreeView节点+子节点的个数一样。。。不然就会报错。。ToWord()里面可以给自己写的TreeView对象,也可以给TreeView控件(可以把上面手动添加TreeView代码复制到加载事件里,为TreeView提供数据),只要dataTable的列名和TreeView节点+子节点的个数一样就OK。。。CSDN里面怎么给图片。。。这个我不知道。。。感兴趣的自己导出去看下。。。同时也求教高手。。。导出目录有什么思路提供没。。。QQ:619870447           欢迎指教

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace Word导出
{
    /// <summary>
    ///word导出
    ///编写人:
    ///日期:2012-5-5
    /// </summary>
    public partial class ToWord : Form
    {

        public ToWord()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 导出文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnDC_Click(object sender, EventArgs e)
        {

            //手动添加DataTable数据
            DataTable tb = new DataTable();
            //手动添加列数据
            tb.Columns.Add("姓名");
            tb.Columns.Add("喜欢");
            tb.Columns.Add("讨厌");
            tb.Columns.Add("农历");
            tb.Columns.Add("阳历");
            tb.Columns.Add("身高");
            tb.Columns.Add("体重");
            tb.Columns.Add("性别");
            //手动添加行数据
            tb.Rows.Add("***", "女人", "男人", "1992-11-18", "1992-12-11", "171cm","65kg", "男");
            tb.Rows.Add("***", "女人", "男人", "1992-11-18", "1992-12-11", "171cm", "65kg", "男");
            tb.Rows.Add("***", "女人", "男人", "1992-11-18", "1992-12-11", "171cm", "65kg", "男");