我已经做好一个word模板,里面放了一个表格。 然后,我从数据库读取n条数据,我希望每条数据插入到一个表格中对应的单元格,
我想实现的效果是,数据库有多少条数据就插入多少页,每页的插入的表格都和模板中的样式一样,只是内容,对应数据库中的内容我已经实现 产生的根据模板,写入单条数据,但是还不能分页,动态根据模板创建多个表格....请问该怎么做??

解决方案 »

  1.   

    using System;
     2using System.Collections.Generic;
     3using System.ComponentModel;
     4using System.Data;
     5using System.Drawing;
     6using System.Text;
     7using System.Windows.Forms;
     8using Interop.Word;
     9
    10namespace DataAccessTest
    11{
    12    public partial class WordTableRead : Form
    13    {
    14        public WordTableRead()
    15        {
    16            InitializeComponent();
    17        }
    18
    19        private void button1_Click(object sender, EventArgs e)
    20        {
    21            ApplicationClass cls = null;
    22            Document doc = null;
    23            Interop.Word.Table table = null;
    24            object missing = System.Reflection.Missing.Value;
    25            int rowIndex = 1, colIndex = 2;
    26
    27            object path = @"C:\temp3.doc";
    28            cls = new ApplicationClass();
    29
    30            try
    31            {
    32                doc = cls.Documents.Open(ref path, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
    33                table = doc.Tables.Item(1);
    34
    35                string text = table.Cell(rowIndex, colIndex).Range.Text;
    36                this.textBox1.Text = text.Substring(0, text.Length - 1);    //去除尾部的                
    37            }
    38            catch (Exception ex)
    39            {
    40                if (ex is System.Runtime.InteropServices.COMException)
    41                {
    42                    MessageBox.Show(((System.Runtime.InteropServices.COMException)(ex)).ErrorCode.ToString());
    43                }
    44            }
    45            finally
    46            {
    47                if( doc != null ) doc.Close(ref missing, ref missing, ref missing);
    48                cls.Quit(ref missing, ref missing, ref missing);
    49            }
    50        }
    51    }
    52}
      

  2.   

    public string CreateWordFile(string CheckedInfo)
            {
               string message = "";
                try
                {
                    Object Nothing = System.Reflection.Missing.Value;
                    Directory.CreateDirectory("C:/CNSI");  //创建文件所在目录
                    string name = "CNSI_" + DateTime.Now.ToShortString()+".doc";
                    object filename = "C://CNSI//" + name;  //文件保存路径
                    //创建Word文档
                    Word.Application WordApp = new Word.ApplicationClass();
                    Word.Document WordDoc = WordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);                //添加页眉
                    WordApp.ActiveWindow.View.Type = WdViewType.wdOutlineView;
                    WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekPrimaryHeader;
                    WordApp.ActiveWindow.ActivePane.Selection.InsertAfter("[页眉内容]");
                    WordApp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;//设置右对齐
                    WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekMainDocument;//跳出页眉设置                WordApp.Selection.ParagraphFormat.LineSpacing = 15f;//设置文档的行间距                //移动焦点并换行
                    object count = 14;
                    object WdLine = Word.WdUnits.wdLine;//换一行;
                     WordApp.Selection.MoveDown(ref WdLine, ref count, ref Nothing);//移动焦点
                     WordApp.Selection.TypeParagraph();//插入段落                 //文档中创建表格
                     Word.Table newTable = WordDoc.Tables.Add(WordApp.Selection.Range, 12, 3, ref Nothing, ref Nothing);
                     //设置表格样式
                     newTable.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleThickThinLargeGap;
                     newTable.Borders.InsideLineStyle = Word.WdLineStyle.wdLineStyleSingle;
                     newTable.Columns[1].Width = 100f;
                     newTable.Columns[2].Width = 220f;
                     newTable.Columns[3].Width = 105f;                 //填充表格内容
                     newTable.Cell(1, 1).Range.Text = "产品详细信息表";
                     newTable.Cell(1, 1).Range.Bold = 2;//设置单元格中字体为粗体
                     //合并单元格
                     newTable.Cell(1, 1).Merge(newTable.Cell(1, 3));
                     WordApp.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;//垂直居中
                     WordApp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;//水平居中
                            
                     //填充表格内容
                     newTable.Cell(2, 1).Range.Text = "产品基本信息";
                     newTable.Cell(2, 1).Range.Font.Color = Word.WdColor.wdColorDarkBlue;//设置单元格内字体颜色
                     //合并单元格
                     newTable.Cell(2, 1).Merge(newTable.Cell(2, 3));
                     WordApp.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;                  //填充表格内容
                      newTable.Cell(3, 1).Range.Text = "品牌名称:";
                      newTable.Cell(3, 2).Range.Text = BrandName;
                      //纵向合并单元格
                      newTable.Cell(3, 3).Select();//选中一行
                      object moveUnit = Word.WdUnits.wdLine;
                      object moveCount = 5;
                      object moveExtend = Word.WdMovementType.wdExtend;
                       WordApp.Selection.MoveDown(ref moveUnit, ref moveCount, ref moveExtend);
                       WordApp.Selection.Cells.Merge();
                       //插入图片
                       string FileName = Picture;//图片所在路径
                       object LinkToFile = false;
                       object SaveWithDocument = true;
                       object Anchor = WordDoc.Application.Selection.Range;
                       WordDoc.Application.ActiveDocument.InlineShapes.AddPicture(FileName, ref LinkToFile, ref SaveWithDocument, ref Anchor);
                        WordDoc.Application.ActiveDocument.InlineShapes[1].Width = 100f;//图片宽度
                        WordDoc.Application.ActiveDocument.InlineShapes[1].Height = 100f;//图片高度
                        //将图片设置为四周环绕型
                        Word.Shape s = WordDoc.Application.ActiveDocument.InlineShapes[1].ConvertToShape();
                        s.WrapFormat.Type = Word.WdWrapType.wdWrapSquare;
                            
                        newTable.Cell(12, 1).Range.Text = "产品特殊属性";
                        newTable.Cell(12, 1).Merge(newTable.Cell(12, 3));
                         //在表格中增加行
                         WordDoc.Content.Tables[1].Rows.Add(ref Nothing);
                          
                         WordDoc.Paragraphs.Last.Range.Text = "文档创建时间:" + DateTime.Now.ToString();//“落款”
                         WordDoc.Paragraphs.Last.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;                    //文件保存
                        WordDoc.SaveAs(ref filename, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
                        WordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
                        WordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
                        message=name+"文档生成成功,以保存到C:\CNSI\下";
                }
                catch
                {
                    message = "文件导出异常!";
                }
                return message;
            }
      

  3.   

    1.首先把你页面上固定的内容放入word模板的页眉和页脚。
    2.在页面的内部上加一个书签(bookerer)
    3.C#调用word组件,先打开模板,然后找到书签,再根据数据库的内容创建table。如果每条记录要创建一个table并分页的话,每读一条记录并创建了一个table后,加入一个分页符。
    4.具体操作word文件或模板请参考MSND网上的word automation。不过microsoft是不推荐这种做法的,特别是在服务器端做这种处理,word进程经常杀不死。
    5.可以考虑用crystal report做这种的处理,crystal report有导出到word的功能。